diff --git a/.buildpacks b/.buildpacks index 9fb12425..96d0a9dd 100644 --- a/.buildpacks +++ b/.buildpacks @@ -1,2 +1 @@ https://github.com/heroku/heroku-buildpack-nodejs.git -https://github.com/heroku/heroku-buildpack-ruby.git diff --git a/.codeclimate.yml b/.codeclimate.yml index a187069d..4aeeffb8 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -1,16 +1,10 @@ --- engines: - brakeman: - enabled: true - bundler-audit: - enabled: true duplication: enabled: true config: languages: count_threshold: 3 # rule of three - ruby: - mass_threshold: 36 # default: 18 javascript: mass_threshold: 80 # default: 40 eslint: @@ -18,21 +12,11 @@ engines: channel: "eslint-3" fixme: enabled: true - rubocop: - enabled: true - exclude_fingerprints: - - 74f18007b920e8d81148d2f6a2756534 ratings: paths: - - 'Gemfile.lock' - - '**.erb' - - '**.rb' - '**.js' - '**.jsx' exclude_paths: -- app/assets/images/ -- app/assets/javascripts/lib/ -- frontend/src/patched/ -- db/ -- script/ -- spec/ +- public/images +- public/lib +- src/patched/ diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 949de95b..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = { - "sourceType": "module", - "parser": "babel-eslint", - "parserOptions": { - "ecmaFeatures": { - "jsx": true - } - }, - "extends": "standard", - "installedESLint": true, - "env": { - "es6": true, - "node": true - }, - "plugins": [ - "promise", - "standard", - "react" - ], - "rules": { - "react/jsx-uses-react": [2], - "react/jsx-uses-vars": [2], - "space-before-function-paren": [2, "never"], - "yoda": [2, "never", { "exceptRange": true }] - } -} diff --git a/.gitignore b/.gitignore index 91b6ef85..7f8b9b0f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ # git config --global core.excludesfile ~/.gitignore_global #assety stuff +public/css public/assets public/metamaps_mobile public/api/index.html diff --git a/.nvmrc b/.nvmrc index ca063943..e3f76f34 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -6.2.2 +8.9.4 diff --git a/.rspec b/.rspec deleted file mode 100644 index 83e16f80..00000000 --- a/.rspec +++ /dev/null @@ -1,2 +0,0 @@ ---color ---require spec_helper diff --git a/.rubocop.yml b/.rubocop.yml deleted file mode 100644 index 05142581..00000000 --- a/.rubocop.yml +++ /dev/null @@ -1,29 +0,0 @@ -AllCops: - TargetRubyVersion: 2.3 - Exclude: - - 'db/**/*' - - 'tmp/**/*' - - 'bin/**/*' - - 'vendor/**/*' - - 'app/assets/javascripts/node_modules/**/*' - - 'Vagrantfile' - -Rails: - Enabled: true - -Metrics/LineLength: - Max: 120 - -Metrics/AbcSize: - Max: 16 - -Style/Documentation: - Enabled: false - -Style/EmptyMethod: - EnforcedStyle: expanded - -# I like this cop, but occasionally code is more readable without a guard clause, -# and I don't want to write rubocop:disable comments every time that happens -Style/GuardClause: - Enabled: false diff --git a/.ruby-gemset b/.ruby-gemset deleted file mode 100644 index ea3bcc43..00000000 --- a/.ruby-gemset +++ /dev/null @@ -1 +0,0 @@ -metamaps diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index 276cbf9e..00000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -2.3.0 diff --git a/.simplecov b/.simplecov deleted file mode 100644 index efee8860..00000000 --- a/.simplecov +++ /dev/null @@ -1,7 +0,0 @@ -if ENV['COVERAGE'] == 'on' - SimpleCov.start 'rails' do - add_group 'Policies', 'app/policies' - add_group 'Services', 'app/services' - add_group 'Serializers', 'app/serializers' - end -end diff --git a/.travis.yml b/.travis.yml index 3dca7316..8ccb5030 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,25 +1,4 @@ -sudo: false -language: ruby -cache: - bundler: true - directories: - - app/assets/javascripts/node_modules -rvm: - - 2.3.0 -before_script: - - echo "Rspec setup" - - export RAILS_ENV=test - - cp .example-env .env - - bundle exec rake db:create - - bundle exec rake db:schema:load - - echo "node setup" - - . $HOME/.nvm/nvm.sh - - nvm install stable - - nvm use stable - - npm install --no-optional -script: - - bundle exec rspec && bundle exec brakeman -q -z && npm test +language: node_js addons: code_climate: - repo_token: 479d3bf56798fbc7fff3fc8151a5ed09e8ac368fd5af332c437b9e07dbebb44e - postgresql: "9.4" + repo_token: 479d3bf56798fbc7fff3fc8151a5ed09e8ac368fd5af332c437b9e07dbebb44e \ No newline at end of file diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 077c481b..00000000 --- a/Gemfile +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: true - -source 'https://rubygems.org' -ruby '2.3.0' - -gem 'rails', '~> 5.0.0' - -gem 'active_model_serializers' -gem 'aws-sdk', '~> 2.7.0' -gem 'best_in_place' -gem 'delayed_job' -gem 'delayed_job_active_record' -gem 'devise' -gem 'doorkeeper' -gem 'dotenv-rails' -gem 'exception_notification' -gem 'httparty' -gem 'json' -gem 'kaminari' -gem 'mailboxer' -gem 'paperclip' -gem 'pg' -gem 'puma' -gem 'pundit' -gem 'pundit_extra' -gem 'rack-attack' -gem 'rack-cors' -gem 'redis', '~> 3.3.3' -gem 'slack-notifier' -gem 'snorlax' -gem 'sucker_punch' - -# asset stuff -gem 'jquery-rails' -gem 'jquery-ui-rails' -gem 'sass-rails' -gem 'uglifier' - -group :test do - gem 'brakeman', require: false - gem 'factory_girl_rails' - gem 'json-schema' - gem 'rspec-rails' - gem 'shoulda-matchers' - gem 'simplecov', require: false -end - -group :development, :test do - gem 'better_errors' - gem 'binding_of_caller' - gem 'faker' - gem 'pry-byebug' - gem 'pry-rails' - gem 'rubocop', '~> 0.48.1' # match code climate https://github.com/tootsuite/mastodon/issues/1758 - gem 'timecop' - gem 'tunemygc' -end diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index b083fb00..00000000 --- a/Gemfile.lock +++ /dev/null @@ -1,350 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - actioncable (5.0.5) - actionpack (= 5.0.5) - nio4r (>= 1.2, < 3.0) - websocket-driver (~> 0.6.1) - actionmailer (5.0.5) - actionpack (= 5.0.5) - actionview (= 5.0.5) - activejob (= 5.0.5) - mail (~> 2.5, >= 2.5.4) - rails-dom-testing (~> 2.0) - actionpack (5.0.5) - actionview (= 5.0.5) - activesupport (= 5.0.5) - rack (~> 2.0) - rack-test (~> 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (5.0.5) - activesupport (= 5.0.5) - builder (~> 3.1) - erubis (~> 2.7.0) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.0.3) - active_model_serializers (0.10.6) - actionpack (>= 4.1, < 6) - activemodel (>= 4.1, < 6) - case_transform (>= 0.2) - jsonapi-renderer (>= 0.1.1.beta1, < 0.2) - activejob (5.0.5) - activesupport (= 5.0.5) - globalid (>= 0.3.6) - activemodel (5.0.5) - activesupport (= 5.0.5) - activerecord (5.0.5) - activemodel (= 5.0.5) - activesupport (= 5.0.5) - arel (~> 7.0) - activesupport (5.0.5) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (~> 0.7) - minitest (~> 5.1) - tzinfo (~> 1.1) - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) - arel (7.1.4) - ast (2.3.0) - aws-sdk (2.7.0) - aws-sdk-resources (= 2.7.0) - aws-sdk-core (2.7.0) - aws-sigv4 (~> 1.0) - jmespath (~> 1.0) - aws-sdk-resources (2.7.0) - aws-sdk-core (= 2.7.0) - aws-sigv4 (1.0.2) - bcrypt (3.1.11) - best_in_place (3.1.1) - actionpack (>= 3.2) - railties (>= 3.2) - better_errors (2.3.0) - coderay (>= 1.0.0) - erubi (>= 1.0.0) - rack (>= 0.9.0) - binding_of_caller (0.7.2) - debug_inspector (>= 0.0.1) - brakeman (3.7.2) - builder (3.2.3) - byebug (9.1.0) - carrierwave (1.1.0) - activemodel (>= 4.0.0) - activesupport (>= 4.0.0) - mime-types (>= 1.16) - case_transform (0.2) - activesupport - climate_control (0.2.0) - cocaine (0.5.8) - climate_control (>= 0.0.3, < 1.0) - coderay (1.1.2) - concurrent-ruby (1.0.5) - debug_inspector (0.0.3) - delayed_job (4.1.3) - activesupport (>= 3.0, < 5.2) - delayed_job_active_record (4.1.2) - activerecord (>= 3.0, < 5.2) - delayed_job (>= 3.0, < 5) - devise (4.3.0) - bcrypt (~> 3.0) - orm_adapter (~> 0.1) - railties (>= 4.1.0, < 5.2) - responders - warden (~> 1.2.3) - diff-lcs (1.3) - docile (1.1.5) - doorkeeper (4.2.6) - railties (>= 4.2) - dotenv (2.2.1) - dotenv-rails (2.2.1) - dotenv (= 2.2.1) - railties (>= 3.2, < 5.2) - erubi (1.6.1) - erubis (2.7.0) - exception_notification (4.2.2) - actionmailer (>= 4.0, < 6) - activesupport (>= 4.0, < 6) - execjs (2.7.0) - factory_girl (4.8.0) - activesupport (>= 3.0.0) - factory_girl_rails (4.8.0) - factory_girl (~> 4.8.0) - railties (>= 3.0.0) - faker (1.8.4) - i18n (~> 0.5) - ffi (1.9.18) - globalid (0.4.0) - activesupport (>= 4.2.0) - httparty (0.15.6) - multi_xml (>= 0.5.2) - i18n (0.9.3) - concurrent-ruby (~> 1.0) - jmespath (1.3.1) - jquery-rails (4.3.1) - rails-dom-testing (>= 1, < 3) - railties (>= 4.2.0) - thor (>= 0.14, < 2.0) - jquery-ui-rails (6.0.1) - railties (>= 3.2.16) - json (2.1.0) - json-schema (2.8.0) - addressable (>= 2.4) - jsonapi-renderer (0.1.3) - kaminari (1.0.1) - activesupport (>= 4.1.0) - kaminari-actionview (= 1.0.1) - kaminari-activerecord (= 1.0.1) - kaminari-core (= 1.0.1) - kaminari-actionview (1.0.1) - actionview - kaminari-core (= 1.0.1) - kaminari-activerecord (1.0.1) - activerecord - kaminari-core (= 1.0.1) - kaminari-core (1.0.1) - loofah (2.0.3) - nokogiri (>= 1.5.9) - mail (2.6.6) - mime-types (>= 1.16, < 4) - mailboxer (0.15.1) - carrierwave (>= 0.5.8) - rails (>= 5.0.0) - method_source (0.8.2) - mime-types (3.1) - mime-types-data (~> 3.2015) - mime-types-data (3.2016.0521) - mimemagic (0.3.2) - mini_portile2 (2.3.0) - minitest (5.11.1) - multi_xml (0.6.0) - nio4r (2.1.0) - nokogiri (1.8.1) - mini_portile2 (~> 2.3.0) - orm_adapter (0.5.0) - paperclip (5.2.0) - activemodel (>= 4.2.0) - activesupport (>= 4.2.0) - cocaine (~> 0.5.5) - mime-types - mimemagic (~> 0.3.0) - parser (2.4.0.2) - ast (~> 2.3) - pg (0.21.0) - powerpack (0.1.1) - pry (0.10.4) - coderay (~> 1.1.0) - method_source (~> 0.8.1) - slop (~> 3.4) - pry-byebug (3.5.0) - byebug (~> 9.1) - pry (~> 0.10) - pry-rails (0.3.6) - pry (>= 0.10.4) - public_suffix (3.0.0) - puma (3.10.0) - pundit (1.1.0) - activesupport (>= 3.0.0) - pundit_extra (0.3.0) - rack (2.0.3) - rack-attack (5.0.1) - rack - rack-cors (1.0.1) - rack-test (0.6.3) - rack (>= 1.0) - rails (5.0.5) - actioncable (= 5.0.5) - actionmailer (= 5.0.5) - actionpack (= 5.0.5) - actionview (= 5.0.5) - activejob (= 5.0.5) - activemodel (= 5.0.5) - activerecord (= 5.0.5) - activesupport (= 5.0.5) - bundler (>= 1.3.0) - railties (= 5.0.5) - sprockets-rails (>= 2.0.0) - rails-dom-testing (2.0.3) - activesupport (>= 4.2.0) - nokogiri (>= 1.6) - rails-html-sanitizer (1.0.3) - loofah (~> 2.0) - railties (5.0.5) - actionpack (= 5.0.5) - activesupport (= 5.0.5) - method_source - rake (>= 0.8.7) - thor (>= 0.18.1, < 2.0) - rainbow (2.2.2) - rake - rake (12.3.0) - rb-fsevent (0.10.2) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) - redis (3.3.3) - responders (2.4.0) - actionpack (>= 4.2.0, < 5.3) - railties (>= 4.2.0, < 5.3) - rspec-core (3.6.0) - rspec-support (~> 3.6.0) - rspec-expectations (3.6.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.6.0) - rspec-mocks (3.6.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.6.0) - rspec-rails (3.6.1) - actionpack (>= 3.0) - activesupport (>= 3.0) - railties (>= 3.0) - rspec-core (~> 3.6.0) - rspec-expectations (~> 3.6.0) - rspec-mocks (~> 3.6.0) - rspec-support (~> 3.6.0) - rspec-support (3.6.0) - rubocop (0.48.1) - parser (>= 2.3.3.1, < 3.0) - powerpack (~> 0.1) - rainbow (>= 1.99.1, < 3.0) - ruby-progressbar (~> 1.7) - unicode-display_width (~> 1.0, >= 1.0.1) - ruby-progressbar (1.9.0) - sass (3.5.1) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sass-rails (5.0.6) - railties (>= 4.0.0, < 6) - sass (~> 3.1) - sprockets (>= 2.8, < 4.0) - sprockets-rails (>= 2.0, < 4.0) - tilt (>= 1.1, < 3) - shoulda-matchers (3.1.2) - activesupport (>= 4.0.0) - simplecov (0.15.0) - docile (~> 1.1.0) - json (>= 1.8, < 3) - simplecov-html (~> 0.10.0) - simplecov-html (0.10.2) - slack-notifier (2.3.1) - slop (3.6.0) - snorlax (0.1.6) - rails (> 4.1) - sprockets (3.7.1) - concurrent-ruby (~> 1.0) - rack (> 1, < 3) - sprockets-rails (3.2.1) - actionpack (>= 4.0) - activesupport (>= 4.0) - sprockets (>= 3.0.0) - sucker_punch (2.0.3) - concurrent-ruby (~> 1.0.0) - thor (0.20.0) - thread_safe (0.3.6) - tilt (2.0.8) - timecop (0.9.1) - tunemygc (1.0.69) - tzinfo (1.2.4) - thread_safe (~> 0.1) - uglifier (3.2.0) - execjs (>= 0.3.0, < 3) - unicode-display_width (1.3.0) - warden (1.2.7) - rack (>= 1.0) - websocket-driver (0.6.5) - websocket-extensions (>= 0.1.0) - websocket-extensions (0.1.2) - -PLATFORMS - ruby - -DEPENDENCIES - active_model_serializers - aws-sdk (~> 2.7.0) - best_in_place - better_errors - binding_of_caller - brakeman - delayed_job - delayed_job_active_record - devise - doorkeeper - dotenv-rails - exception_notification - factory_girl_rails - faker - httparty - jquery-rails - jquery-ui-rails - json - json-schema - kaminari - mailboxer - paperclip - pg - pry-byebug - pry-rails - puma - pundit - pundit_extra - rack-attack - rack-cors - rails (~> 5.0.0) - redis (~> 3.3.3) - rspec-rails - rubocop (~> 0.48.1) - sass-rails - shoulda-matchers - simplecov - slack-notifier - snorlax - sucker_punch - timecop - tunemygc - uglifier - -RUBY VERSION - ruby 2.3.0p0 - -BUNDLED WITH - 1.16.1 diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 58777e31..00000000 --- a/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ -GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/app/assets/javascripts/Metamaps.ServerData.js.erb b/Metamaps.ServerData.js.erb similarity index 100% rename from app/assets/javascripts/Metamaps.ServerData.js.erb rename to Metamaps.ServerData.js.erb diff --git a/Procfile b/Procfile deleted file mode 100644 index b6bae37c..00000000 --- a/Procfile +++ /dev/null @@ -1,3 +0,0 @@ -web: bundle exec puma -p $PORT -worker: bundle exec rake jobs:work - diff --git a/README.md b/README.md index 483909b3..ac708e50 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,82 @@ -Metamaps -======= +[![Build Status](https://travis-ci.org/metamaps/metamaps-ui.svg?branch=master)](https://travis-ci.org/metamaps/metamaps-ui) -[![Build Status](https://travis-ci.org/metamaps/metamaps.svg?branch=develop)](https://travis-ci.org/metamaps/metamaps) -[![Code Climate](https://codeclimate.com/github/metamaps/metamaps/badges/gpa.svg)](https://codeclimate.com/github/metamaps/metamaps) +Make sure you're running a good up to date LTS version of `node`, like 8.9.4 -## What is Metamaps? +Make sure you have `node-sass` installed +`$ npm install -g node-sass` -Metamaps is a free and open-source technology for changemakers, innovators, educators and students. It enables individuals and communities to build and visualize their shared knowledge and unlock their collective intelligence. +Run the following at the same time, in TWO SEPARATE terminals. We tell the server where the backend process is running with the API environment variable +JS files, and CSS will rebuild automatically, just refresh the page +If coding the server itself, you will have to use nodemon, or kill and restart the server process manually +``` +$ API=http://localhost:3001 node server.js +$ node-sass -w sass/application.scss public/css/application.css +``` -You can find a version of this software running at [metamaps.cc][site-beta], where the technology is being tested in an open beta. +To make sure the css files get built, use the following in another terminal +``` +touch sass/application.scss +``` -Metamaps is developed and maintained by a distributed, nomadic community comprised of technologists, artists and storytellers. You can get in touch by using whichever of these channels you prefer: +Run the metamaps api in another terminal using (on port 3001, so the UI can talk to it) +For now, make sure you are running on the `add-user-route` branch of Metamaps, and that it's up to date with the latest on that branch +`$ rails s -p 3001` -## How do I learn more? - -- Contact: [team@metamaps.cc](mailto:team@metamaps.cc) or [@metamapps](https://twitter.com/metamapps) on Twitter -- User Documentation: [docs.metamaps.cc](https://docs.metamaps.cc) -- User Community: [hylo.com/c/metamaps](https://www.hylo.com/c/metamaps) -- To see what we're developing, or to weigh in on what you'd like to see developed, see our [Metamaps Feedback and Features](https://trello.com/b/uFOA6a2x/metamaps-feedback-feature-ideas-requests) board on trello -- To follow along with, or contribute,to our design process, see our [Metamaps Design](https://trello.com/b/8HlCikOX/metamaps-design) board on trello -- To follow along with, or contribute to, our development process, see our [Github Issues and Pull Requests](https://github.com/metamaps/metamaps/issues) -- Request an invite to the open beta [here](https://metamaps.cc/request) +open up http://localhost:3000 and start coding! - +Checklist +- [x] Get the Import lightbox working, and not conflicting on screen +- [x] Handling CSRF +- [x] Fix images referenced in the JS +- [x] Figure out how authentication of requests from the frontend to the API works +- [x] Figure out how to combine the nodejs realtime server into server.js +- [x] Notifications: make sure loading states are working for popup and page +- [x] Request unreadNotificationCount +- [x] Request invite code +- [x] Request user object itself +- [x] Load the metacodes +- [x] move ImportDialog lightbox into main app +- [x] create topic form +- [x] Fork map lightbox / component -- To send us a personal message get in touch with us via email, Twitter, or Hylo -- If you would like to report a bug, please check the [issues][contributing-issues] section in our [contributing instructions][contributing]. -- If you would like to get set up as a developer, that's great! Read on for help getting your development environment set up. +- [ ] fix other places where metacode sets are used +- [ ] make newtopic form load metacodes from users selected ones +- [ ] create synapse form +- [ ] replace old loader with react loader +- [ ] ensure exports of maps work +- [ ] Notifications: make sure notifications either look nice, or redirect +- [ ] Notifications: pagination +- [ ] Notifications: Request unreadNotificationCount +- [ ] Notifications: CSS fixes related to 'controller-x' in body classes +- [ ] Make sure loading state for explore maps pages work +- [ ] Get actioncable working +- [ ] lightboxes +- [ ] About lightbox +- [ ] Switch Metacodes lightbox / component +- [ ] break up index.html into parts +- [ ] Handle CSS metacode colors +- [ ] Fix Request An Invite page +- [ ] Make 'new map' action work +- [ ] Modify the remaining rails templates into JSX templates + - [x] notifications list + - [x] notification page + - [x] list metacodes + - [x] new metacode + - [x] edit metacode + - [x] list metacode_sets + - [x] new metacode set + - [x] edit metacode set + - [ ] authorized apps + - [ ] registered apps + - [ ] authorize + - [ ] user passwords +- [ ] Modify the RubyOnRails app to only serve JSON responses, no HTML pages anymore +- [ ] Modify the frontend to request that data from the API which is necessary at first to load the page + - [x] Load the metacode sets -## Installation for local use or development of Metamaps - -First off is getting the code downloaded to your computer. You can download a zip file from github, but if you've got `git` you can just run `git clone https://github.com/metamaps/metamaps` in your terminal. - -There are instructions for setup on various platforms, with particular support for Mac and Ubuntu, which can be found here: -- [Mac Install Walkthrough][mac-installation] -- [Ubuntu Install Walkthrough][ubuntu-installation] - -If you prefer to isolate your install in a virtual machine, you may find it simpler to setup using Vagrant: -- [Vagrant installation][vagrant-installation] - -We don't promise support for Windows, but at one point we had it running and we've kept those docs available for reference -- [Outdated Windows Walkthrough][windows-installation] - -## Licensing information - -This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero 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 Affero General Public License for more details. - -The license can be read [here][license]. - -Copyright (c) 2017 Connor Turland - -[site-beta]: http://metamaps.cc -[license]: https://github.com/metamaps/metamaps/blob/develop/LICENSE -[contributing]: https://github.com/metamaps/metamaps/blob/develop/doc/CONTRIBUTING.md -[contributing-issues]: https://github.com/metamaps/metamaps/blob/develop/doc/CONTRIBUTING.md#reporting-bugs-and-other-issues -[mac-installation]: https://github.com/metamaps/metamaps/blob/develop/doc/MacInstallation.md -[ubuntu-installation]: https://github.com/metamaps/metamaps/blob/develop/doc/UbuntuInstallation.md -[vagrant-installation]: https://github.com/metamaps/metamaps/blob/develop/doc/VagrantInstallation.md -[windows-installation]: https://github.com/metamaps/metamaps/blob/develop/doc/WindowsInstallation.md +To run the server as a daemon that will be re-run if it crashes, you can +use the forever node package. +``` +$ npm install -g forever +$ forever start server.js +``` \ No newline at end of file diff --git a/Rakefile b/Rakefile deleted file mode 100755 index 451f68bb..00000000 --- a/Rakefile +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env rake -# frozen_string_literal: true - -# Add your own tasks in files placed in lib/tasks ending in .rake, -# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. - -require File.expand_path('../config/application', __FILE__) - -Metamaps::Application.load_tasks diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index de1c6dde..00000000 --- a/Vagrantfile +++ /dev/null @@ -1,45 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -$script = < diff --git a/app/views/doorkeeper/applications/edit.html.erb b/app/views/doorkeeper/applications/edit.html.erb deleted file mode 100644 index 8f92c3a3..00000000 --- a/app/views/doorkeeper/applications/edit.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -
-
- - - <%= render 'form', application: @application %> -
-
-<%= render 'script' %> diff --git a/app/views/doorkeeper/applications/index.html.erb b/app/views/doorkeeper/applications/index.html.erb deleted file mode 100644 index 25a94572..00000000 --- a/app/views/doorkeeper/applications/index.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -
-
- - - - - - - - - - - - <% @applications.each do |application| %> - - - - - - <% end %> - -
<%= t('.name') %><%= t('.callback_url') %>
<%= link_to application.name, oauth_application_path(application) %><%= application.redirect_uri %><%= render 'delete_form', application: application %>
-<%= link_to t('.new'), new_oauth_application_path, class: 'button link-button' %> -
-
-<%= render 'script' %> diff --git a/app/views/doorkeeper/applications/new.html.erb b/app/views/doorkeeper/applications/new.html.erb deleted file mode 100644 index 698dc25e..00000000 --- a/app/views/doorkeeper/applications/new.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -
-
-<%= link_to t('doorkeeper.applications.buttons.back'), oauth_applications_path(), class: 'button link-button button-margin' %> - - -<%= render 'form', application: @application %> -
-
-<%= render 'script' %> diff --git a/app/views/doorkeeper/applications/show.html.erb b/app/views/doorkeeper/applications/show.html.erb deleted file mode 100644 index 3030960c..00000000 --- a/app/views/doorkeeper/applications/show.html.erb +++ /dev/null @@ -1,37 +0,0 @@ -
-
- - <%= link_to t('doorkeeper.applications.buttons.back'), oauth_applications_path(), class: 'button link-button button-margin' %> - - - -

<%= t('.application_id') %>:

-

<%= @application.uid %>

- -

<%= t('.secret') %>:

-

<%= @application.secret %>

- - -

<%= t('.callback_urls') %>:

- - - <% @application.redirect_uri.split.each do |uri| %> - - - - - <% end %> -
- <%= uri %> - - <%= link_to t('doorkeeper.applications.buttons.authorize'), oauth_authorization_path(client_id: @application.uid, redirect_uri: uri, response_type: 'code'), class: 'button link-button', target: '_blank' %> -
- -
<%= link_to t('doorkeeper.applications.buttons.edit'), edit_oauth_application_path(@application), class: 'button link-button' %>
- -
<%= render 'delete_form', application: @application, submit_btn_css: 'button red-button' %>
-
-
-<%= render 'script' %> diff --git a/app/views/doorkeeper/authorizations/error.html.erb b/app/views/doorkeeper/authorizations/error.html.erb deleted file mode 100644 index 4d778e29..00000000 --- a/app/views/doorkeeper/authorizations/error.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -
-
- - -
-
<%= @pre_auth.error_response.body[:error_description] %>
-
-
-
diff --git a/app/views/doorkeeper/authorizations/new.html.erb b/app/views/doorkeeper/authorizations/new.html.erb deleted file mode 100644 index 52b2f6a4..00000000 --- a/app/views/doorkeeper/authorizations/new.html.erb +++ /dev/null @@ -1,48 +0,0 @@ -
-
- - -
-

- <%= raw t('.prompt', client_name: "#{ @pre_auth.client.name }") %> -

- - <% if @pre_auth.scopes.count > 0 %> -
-

<%= t('.able_to') %>:

- -
    - <% @pre_auth.scopes.each do |scope| %> -
  • <%= t scope, scope: [:doorkeeper, :scopes] %>
  • - <% end %> -
-
- <% end %> - -
-
- <%= form_tag oauth_authorization_path, method: :post do %> - <%= hidden_field_tag :client_id, @pre_auth.client.uid %> - <%= hidden_field_tag :redirect_uri, @pre_auth.redirect_uri %> - <%= hidden_field_tag :state, @pre_auth.state %> - <%= hidden_field_tag :response_type, @pre_auth.response_type %> - <%= hidden_field_tag :scope, @pre_auth.scope %> - <%= submit_tag t('doorkeeper.authorizations.buttons.authorize'), class: "button" %> - <% end %> -
-
- <%= form_tag oauth_authorization_path, method: :delete do %> - <%= hidden_field_tag :client_id, @pre_auth.client.uid %> - <%= hidden_field_tag :redirect_uri, @pre_auth.redirect_uri %> - <%= hidden_field_tag :state, @pre_auth.state %> - <%= hidden_field_tag :response_type, @pre_auth.response_type %> - <%= hidden_field_tag :scope, @pre_auth.scope %> - <%= submit_tag t('doorkeeper.authorizations.buttons.deny'), class: "button red-button" %> - <% end %> -
-
-
-
-
diff --git a/app/views/doorkeeper/authorizations/show.html.erb b/app/views/doorkeeper/authorizations/show.html.erb deleted file mode 100644 index 4079ed56..00000000 --- a/app/views/doorkeeper/authorizations/show.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -
-
- - -
- <%= params[:code] %> -
-
-
diff --git a/app/views/doorkeeper/authorized_applications/_delete_form.html.erb b/app/views/doorkeeper/authorized_applications/_delete_form.html.erb deleted file mode 100644 index 27ea3d73..00000000 --- a/app/views/doorkeeper/authorized_applications/_delete_form.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%- submit_btn_css ||= 'button red-button' %> -<%= form_tag oauth_authorized_application_path(application) do %> - - <%= submit_tag t('doorkeeper.authorized_applications.buttons.revoke'), onclick: "return confirm('#{ t('doorkeeper.authorized_applications.confirmations.revoke') }')", class: submit_btn_css %> -<% end %> diff --git a/app/views/doorkeeper/authorized_applications/_script.html.erb b/app/views/doorkeeper/authorized_applications/_script.html.erb deleted file mode 100644 index 284a98a2..00000000 --- a/app/views/doorkeeper/authorized_applications/_script.html.erb +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/views/doorkeeper/authorized_applications/index.html.erb b/app/views/doorkeeper/authorized_applications/index.html.erb deleted file mode 100644 index 42c3127d..00000000 --- a/app/views/doorkeeper/authorized_applications/index.html.erb +++ /dev/null @@ -1,37 +0,0 @@ -
-
- - -
-
- Coming soon!
- There are a number of apps being worked on for Metamaps currently, including the playful Metamapper Slack Bot. Check back here for updates.
- If you're a developer interested in building an app for Metamaps, check out the API docs. -

- <% if @applications.count > 0 %> - - - - - - - - - - - <% @applications.each do |application| %> - - - - - - <% end %> - -
<%= t('doorkeeper.authorized_applications.index.application') %><%= t('doorkeeper.authorized_applications.index.created_at') %>
<%= application.name %><%= application.created_at.strftime(t('doorkeeper.authorized_applications.index.date_format')) %><%= render 'delete_form', application: application %>
- <% end %> -
-
-
-<%= render 'script' %> diff --git a/app/views/explore/active.html.erb b/app/views/explore/active.html.erb deleted file mode 100644 index e6e2a3a6..00000000 --- a/app/views/explore/active.html.erb +++ /dev/null @@ -1,15 +0,0 @@ -<% # - # @file - # Shows a list of recently active maps - # GET /explore/active(.:format) - # %> - - diff --git a/app/views/explore/featured.html.erb b/app/views/explore/featured.html.erb deleted file mode 100644 index 9396ebdc..00000000 --- a/app/views/explore/featured.html.erb +++ /dev/null @@ -1,15 +0,0 @@ -<% # - # @file - # Shows a list of featured maps - # GET /explore/featured(.:format) - # %> - - diff --git a/app/views/explore/mapper.html.erb b/app/views/explore/mapper.html.erb deleted file mode 100644 index 9a24bda0..00000000 --- a/app/views/explore/mapper.html.erb +++ /dev/null @@ -1,18 +0,0 @@ -<% # - # @file - # Shows a list of a user's maps - # GET /explore/mapper/:id(.:format) - # %> - - diff --git a/app/views/explore/mine.html.erb b/app/views/explore/mine.html.erb deleted file mode 100644 index 21295d4f..00000000 --- a/app/views/explore/mine.html.erb +++ /dev/null @@ -1,15 +0,0 @@ -<% # - # @file - # Shows a list of current user's maps - # GET /explore/mine(.:format) - # %> - - diff --git a/app/views/explore/shared.html.erb b/app/views/explore/shared.html.erb deleted file mode 100644 index f40e9fdf..00000000 --- a/app/views/explore/shared.html.erb +++ /dev/null @@ -1,15 +0,0 @@ -<% # - # @file - # Shows a list of current user's maps - # GET /explore/mine(.:format) - # %> - - diff --git a/app/views/explore/starred.html.erb b/app/views/explore/starred.html.erb deleted file mode 100644 index 125c3e76..00000000 --- a/app/views/explore/starred.html.erb +++ /dev/null @@ -1,15 +0,0 @@ -<% # - # @file - # Shows a list of current user's starred maps - # GET /explore/starred(.:format) - # %> - - diff --git a/app/views/layouts/_foot.html.erb b/app/views/layouts/_foot.html.erb deleted file mode 100644 index bc3d4223..00000000 --- a/app/views/layouts/_foot.html.erb +++ /dev/null @@ -1,21 +0,0 @@ -
- -<%= render :partial => 'layouts/lightboxes' %> -<%= render :partial => 'layouts/templates' %> -<%= render :partial => 'shared/metacodeCssColors' %> -<%= render :partial => 'layouts/googleanalytics' if ENV["GA_TRACKING_CODE"].present? %> - - diff --git a/app/views/layouts/_lightboxes.html.erb b/app/views/layouts/_lightboxes.html.erb deleted file mode 100644 index d464b733..00000000 --- a/app/views/layouts/_lightboxes.html.erb +++ /dev/null @@ -1,116 +0,0 @@ -<%# - # @file - # The inner HTML of the account box that comes up in the bottom left - #%> - diff --git a/app/views/layouts/_templates.html.erb b/app/views/layouts/_templates.html.erb deleted file mode 100644 index dd0b8c7c..00000000 --- a/app/views/layouts/_templates.html.erb +++ /dev/null @@ -1,184 +0,0 @@ -<%# - # @file - # templates for the upper right autocomplete results - #%> - -
- - - - - - - - - - - - - -
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb deleted file mode 100644 index 340874fc..00000000 --- a/app/views/layouts/application.html.erb +++ /dev/null @@ -1,23 +0,0 @@ -<%# -# @file -# Main application file. Holds scaffolding present on every page. -# Then a certain non-partial view (no _ preceding filename) will be -# displayed within, based on URL -#%> - -<%= render :partial => 'layouts/head' %> - controller-<%= controller_name %> action-<%= action_name %>"> -
- <%= yield %> - <% if current_user %> - <% # for creating and pulling in topics and synapses %> - <% if controller_name == 'maps' && action_name == "conversation" %> - <%= render :partial => 'maps/newtopicsecret' %> - <% else %> - <%= render :partial => 'maps/newtopic' %> - <% end %> - <%= render :partial => 'maps/newsynapse' %> - <% # for populating the change metacode list on the topic card %> - <%= render :partial => 'shared/metacodeoptions' %> - <% end %> -<%= render :partial => 'layouts/foot' %> diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb deleted file mode 100644 index 991cf0ff..00000000 --- a/app/views/layouts/mailer.html.erb +++ /dev/null @@ -1,5 +0,0 @@ - - - <%= yield %> - - diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb deleted file mode 100644 index 37f0bddb..00000000 --- a/app/views/layouts/mailer.text.erb +++ /dev/null @@ -1 +0,0 @@ -<%= yield %> diff --git a/app/views/mailboxer/message_mailer/new_message_email.html.erb b/app/views/mailboxer/message_mailer/new_message_email.html.erb deleted file mode 100644 index c779e888..00000000 --- a/app/views/mailboxer/message_mailer/new_message_email.html.erb +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - -

You have a new message: <%= @subject %>

-

- You have received a new message: -

-
-

- <%= raw @message.body %> -

-
-

- Visit <%= link_to root_url, root_url %> and go to your inbox for more info. -

- - diff --git a/app/views/mailboxer/message_mailer/new_message_email.text.erb b/app/views/mailboxer/message_mailer/new_message_email.text.erb deleted file mode 100644 index 228ca58a..00000000 --- a/app/views/mailboxer/message_mailer/new_message_email.text.erb +++ /dev/null @@ -1,10 +0,0 @@ -You have a new message: <%= @subject %> -=============================================== - -You have received a new message: - ------------------------------------------------ -<%= @message.body.html_safe? ? @message.body : strip_tags(@message.body) %> ------------------------------------------------ - -Visit <%= root_url %> and go to your inbox for more info. diff --git a/app/views/mailboxer/message_mailer/reply_message_email.html.erb b/app/views/mailboxer/message_mailer/reply_message_email.html.erb deleted file mode 100644 index fd1286c5..00000000 --- a/app/views/mailboxer/message_mailer/reply_message_email.html.erb +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - -

You have a new reply: <%= @subject %>

-

- You have received a new reply: -

-
-

- <%= raw @message.body %> -

-
-

- Visit <%= link_to root_url, root_url %> and go to your inbox for more info. -

- - diff --git a/app/views/mailboxer/message_mailer/reply_message_email.text.erb b/app/views/mailboxer/message_mailer/reply_message_email.text.erb deleted file mode 100644 index c56bfb5e..00000000 --- a/app/views/mailboxer/message_mailer/reply_message_email.text.erb +++ /dev/null @@ -1,10 +0,0 @@ -You have a new reply: <%= @subject %> -=============================================== - -You have received a new reply: - ------------------------------------------------ -<%= @message.body.html_safe? ? @message.body : strip_tags(@message.body) %> ------------------------------------------------ - -Visit <%= root_url %> and go to your inbox for more info. diff --git a/app/views/mailboxer/notification_mailer/new_notification_email.html.erb b/app/views/mailboxer/notification_mailer/new_notification_email.html.erb deleted file mode 100644 index b696c649..00000000 --- a/app/views/mailboxer/notification_mailer/new_notification_email.html.erb +++ /dev/null @@ -1,7 +0,0 @@ - -
- <%= raw @notification.body %> -
-

Make sense with Metamaps

- <%= render partial: 'shared/mailer_unsubscribe_link' %> -
diff --git a/app/views/mailboxer/notification_mailer/new_notification_email.text.erb b/app/views/mailboxer/notification_mailer/new_notification_email.text.erb deleted file mode 100644 index a98af833..00000000 --- a/app/views/mailboxer/notification_mailer/new_notification_email.text.erb +++ /dev/null @@ -1,8 +0,0 @@ -<% mail = ApplicationMailer.mail_for_notification(@notification) %> -<% if mail %> - <%= mail.text_part&.body&.decoded %> -<% end %> - -Make sense with Metamaps - -<%= render partial: 'shared/mailer_unsubscribe_link' %> diff --git a/app/views/main/home.html.erb b/app/views/main/home.html.erb deleted file mode 100644 index 16870f13..00000000 --- a/app/views/main/home.html.erb +++ /dev/null @@ -1,40 +0,0 @@ -<%# - # @file - # Located at / - # Shows 3 most recently created topics, synapses, and maps. - # -%> - -<% content_for :title, "Home | Metamaps" %> -<% content_for :mobile_title, "Home" %> -
-
-
Make Sense with Metamaps
-
- METAMAPS.CC is a free and open source platform that supports real-time sense-making, distributed collaboration, and the creative intelligence of individuals, organizations and communities. We are currently in an invite-only beta. -
-
-
-
- -
-

Who finds it useful?

-

Designers, inventors, artists, educators, strategists, consultants, facilitators, entrepreneurs, systems thinkers, changemakers, analysts, students, researchers... maybe you!

- - EXPLORE FEATURED MAPS - REQUEST INVITE -
-
-
-
-
-
- <% # our partners %> -
-
-
- - diff --git a/app/views/main/requestinvite.html.erb b/app/views/main/requestinvite.html.erb deleted file mode 100644 index c026911a..00000000 --- a/app/views/main/requestinvite.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -<%# - # @file - # Located at /request - # Shows a form where people can request an invite - #%> - -<% content_for :title, "Request Invite | Metamaps" %> -<% content_for :mobile_title, "Request Invite" %> -
- diff --git a/app/views/map_activity_mailer/daily_summary.html.erb b/app/views/map_activity_mailer/daily_summary.html.erb deleted file mode 100644 index d28d00a5..00000000 --- a/app/views/map_activity_mailer/daily_summary.html.erb +++ /dev/null @@ -1,97 +0,0 @@ -<% button_style = "margin-top: 8px;background-color:#4fc059;border-radius:2px;color:white;display:inline-block;font-family:Roboto,Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;min-height:29px;line-height:29px;min-width:54px;outline:0px;padding:0 8px;text-align:center;text-decoration:none" %> - - - -
-

Hey <%= @user.name %>, there was activity by others in the last 24 hours on map - <%= link_to @map.name, map_url(@map) %> -

-
- <% if @summary_data[:stats][:messages_sent] %> -

<%= pluralize(@summary_data[:stats][:messages_sent], 'message') %>

- <% end %> - <% if @summary_data[:stats][:topics_added] %> -

<%= pluralize(@summary_data[:stats][:topics_added], 'topic') %> added

- <% end %> - <% if @summary_data[:stats][:synapses_added] %> -

<%= pluralize(@summary_data[:stats][:synapses_added], 'synapse') %> added

- <% end %> - <% if @summary_data[:stats][:topics_moved] %> -

<%= pluralize(@summary_data[:stats][:topics_moved], 'topic') %> moved

- <% end %> - <% if @summary_data[:stats][:topics_removed] %> -

<%= pluralize(@summary_data[:stats][:topics_removed], 'topic') %> removed

- <% end %> - <% if @summary_data[:stats][:synapses_removed] %> -

<%= pluralize(@summary_data[:stats][:synapses_removed], 'synapse') %> removed

- <% end %> -
-
- <% if @summary_data[:topics_added] || @summary_data[:synapses_added] %> -
- <% if @summary_data[:topics_added] %> -

Topics Added

-
    - <% @summary_data[:topics_added].each do |event| %> -
  • <%= event.eventable.name %>
  • - <% end %> -
- <% end %> - - <% if @summary_data[:synapses_added] %> -

Synapses Added

-
    - <% @summary_data[:synapses_added].each do |event| %> -
  • - <%= event.eventable.topic1.name %>
    -
    - <%= event.eventable.topic2.name %> -
  • - <% end %> -
- <% end %> -
- <% end %> - - - <% if @summary_data[:topics_removed] || @summary_data[:synapses_removed] %> -
- <% if @summary_data[:topics_removed] %> -

Topics Removed

-
    - <% @summary_data[:topics_removed].each do |event| %> -
  • <%= event.eventable.name %>
  • - <% end %> -
- <% end %> - - <% if @summary_data[:synapses_removed] %> -

Synapses Removed

-
    - <% @summary_data[:synapses_removed].each do |event| %> -
  • - <%= event.eventable.topic1.name %>
    -
    - <%= event.eventable.topic2.name %> -
  • - <% end %> -
- <% end %> -
- <% end %> - - <%= link_to 'Visit Map', map_url(@map), style: button_style %> - -
-

Make sense with Metamaps

- <%= link_to 'Unfollow this map', unfollow_from_email_map_url(@map) %> - <%= render partial: 'shared/mailer_unsubscribe_link' %> -
diff --git a/app/views/map_mailer/_unfollow.text.erb b/app/views/map_mailer/_unfollow.text.erb deleted file mode 100644 index e69de29b..00000000 diff --git a/app/views/map_mailer/access_approved.html.erb b/app/views/map_mailer/access_approved.html.erb deleted file mode 100644 index 91fd77e0..00000000 --- a/app/views/map_mailer/access_approved.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<% map = @map || map %> -<% button_style = "background-color:#4fc059;border-radius:2px;color:white;display:inline-block;font-family:Roboto,Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;min-height:29px;line-height:29px;min-width:54px;outline:0px;padding:0 8px;text-align:center;text-decoration:none" %> -

<%= map.user.name %> has responded to your access request and invited you to collaboratively edit the following map:

-

<%= link_to map.name, map_url(map), style: "font-size: 18px; text-decoration: none; color: #4fc059;" %>

-<% if map.desc %> -

<%= map.desc %>

-<% end %> -<%= link_to 'Go to Map', map_url(map), style: button_style %> diff --git a/app/views/map_mailer/access_approved.text.erb b/app/views/map_mailer/access_approved.text.erb deleted file mode 100644 index 2a8e54f6..00000000 --- a/app/views/map_mailer/access_approved.text.erb +++ /dev/null @@ -1,4 +0,0 @@ -<% map = @map || map %> -<%= map.user.name %> has responded to your access request and invited you to collaboratively edit the following map: - -<%= map.name %> [<%= map_url(map) %>] diff --git a/app/views/map_mailer/access_request.html.erb b/app/views/map_mailer/access_request.html.erb deleted file mode 100644 index 759b97eb..00000000 --- a/app/views/map_mailer/access_request.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<% map = @map || map %> -<% request = @request || request %> -<% button_style = "background-color:#4fc059;border-radius:2px;color:white;display:inline-block;font-family:Roboto,Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;min-height:29px;line-height:29px;min-width:54px;outline:0px;padding:0 8px;text-align:center;text-decoration:none" %> -

<%= request.user.name %> is requesting access to collaboratively edit the following map:

-

<%= map.name %>

-

<%= link_to "Allow", approve_access_map_url(id: map.id, request_id: request.id), style: "font-size: 18px; text-decoration: none; color: #4fc059;" %> -

<%= link_to "Decline", deny_access_map_url(id: map.id, request_id: request.id), style: "font-size: 18px; text-decoration: none; color: #DB5D5D;" %>

-<%= link_to 'Go to Map', map_url(map), style: button_style %> diff --git a/app/views/map_mailer/access_request.text.erb b/app/views/map_mailer/access_request.text.erb deleted file mode 100644 index c99aa6e6..00000000 --- a/app/views/map_mailer/access_request.text.erb +++ /dev/null @@ -1,10 +0,0 @@ -<% map = @map || map %> -<% request = @request || request %> -<%= request.user.name %> has requested to collaboratively edit the following map: - -<%= map.name %> [<%= map_url(map) %>] - -Allow [<%= approve_access_map_url(id: map.id, request_id: request.id) %>] -Decline [<%= deny_access_map_url(id: map.id, request_id: request.id) %>] - - diff --git a/app/views/map_mailer/invite_to_edit.html.erb b/app/views/map_mailer/invite_to_edit.html.erb deleted file mode 100644 index f08cc377..00000000 --- a/app/views/map_mailer/invite_to_edit.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<% map = @map || map %> -<% inviter = @inviter || inviter %> -<% button_style = "background-color:#4fc059;border-radius:2px;color:white;display:inline-block;font-family:Roboto,Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;min-height:29px;line-height:29px;min-width:54px;outline:0px;padding:0 8px;text-align:center;text-decoration:none" %> -

<%= inviter.name %> has invited you to collaboratively edit the following map:

-

<%= link_to map.name, map_url(map), style: "font-size: 18px; text-decoration: none; color: #4fc059;" %>

-<% if map.desc %> -

<%= map.desc %>

-<% end %> -<%= link_to 'Go to Map', map_url(map), style: button_style %> diff --git a/app/views/map_mailer/invite_to_edit.text.erb b/app/views/map_mailer/invite_to_edit.text.erb deleted file mode 100644 index b58cced9..00000000 --- a/app/views/map_mailer/invite_to_edit.text.erb +++ /dev/null @@ -1,5 +0,0 @@ -<% map = @map || map %> -<% inviter = @inviter || inviter %> -<%= inviter.name %> has invited you to collaboratively edit the following map: - -<%= map.name %> [<%= map_url(map) %>] diff --git a/app/views/maps/_mapinfobox.html.erb b/app/views/maps/_mapinfobox.html.erb deleted file mode 100644 index 9ded6a02..00000000 --- a/app/views/maps/_mapinfobox.html.erb +++ /dev/null @@ -1,96 +0,0 @@ -<%# - # Partial rendering form for a new topic on a map - # This code is called when viewing a metamap in show.html.erb in the views/maps folder - #%> -
- <%= @map && policy(@map).update? ? " canEdit" : "" %> - <%= @map && @map.permission != 'private' ? " shareable" : "" %>"> - - <% if current_user %> -
- Click here to name this map -
- <% end %> - - <% if @map %> -
- <% if policy(@map).update? %> - <%= @map.name %> - <% else %> - <%= @map.name %> - <% end %> -
- -
-
- <% relevantPeople = @map.permission == "commons" ? @map.contributors : @map.editors %> - <% if relevantPeople.count == 0 %> - - <% elsif relevantPeople.count == 1 %> - - <% elsif relevantPeople.count == 2 %> - - <% elsif relevantPeople.count > 2 %> - - <% end %> - <%= relevantPeople.count %> -
- - <% if @map.user == current_user %> -
- <% end %> -
-
-
- <%= @map.topics.count %> -
-
- <%= @map.synapses.count %> -
-
-
As the creator, you can change the permission of this map, and the permission of all the topics and synapses you have authority to change will change as well.
-
-
-
- -
- <% if policy(@map).update? %> - <%= @map.desc %> - <% else %> - <%= @map.desc %> - <% end %> -
- -
-

Created by: <%= @map.user == user ? "You" : @map.user.name %> on <%= @map.created_at.strftime("%m/%d/%Y") %>

-

Last edited: <%= @map.updated_at.strftime("%m/%d/%Y") %>

-
-
-
-
Update Thumbnail
- Thumb -
-
-
- Delete -
-
-
- Share -
-
-
- <% end %> -
diff --git a/app/views/maps/_newsynapse.html.erb b/app/views/maps/_newsynapse.html.erb deleted file mode 100644 index 00066933..00000000 --- a/app/views/maps/_newsynapse.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= form_for Synapse.new, url: synapses_url, remote: true do |form| %> -<%= form.text_field :desc, :placeholder => "describe the connection..." %> -<% end %> diff --git a/app/views/maps/_newtopic.html.erb b/app/views/maps/_newtopic.html.erb deleted file mode 100644 index 7b833d3c..00000000 --- a/app/views/maps/_newtopic.html.erb +++ /dev/null @@ -1,32 +0,0 @@ -<% @metacodes = user_metacodes() %> - -<%= form_for Topic.new, url: topics_url, remote: true do |form| %> -
-
Switch Metacodes
-
- -
-
Pin Open
-
Unpin
-
- -
- <% @metacodes.each do |metacode| %> - <%= metacode.name %> - <% end %> -
- - <%= form.text_field :name, :maxlength => 140, :placeholder => "title..." %> - -
-
- - -<% end %> diff --git a/app/views/maps/_newtopicsecret.html.erb b/app/views/maps/_newtopicsecret.html.erb deleted file mode 100644 index ffbc497a..00000000 --- a/app/views/maps/_newtopicsecret.html.erb +++ /dev/null @@ -1,36 +0,0 @@ -<%= form_for Topic.new, url: topics_url, remote: true do |form| %> -
-
Switch Metacodes
-
- -
- <% @metacodes = user_metacodes() - @metacodes.each do |m| %> - <%= m.name %> - <% end %> -
-
- - <%= @metacodes[0].name %> -
-
- <%= form.text_field :name, :maxlength => 140, :placeholder => "what are you thinking..." %> -
-
-
- -<% end %> \ No newline at end of file diff --git a/app/views/maps/conversation.html.erb b/app/views/maps/conversation.html.erb deleted file mode 100644 index 51d68a7a..00000000 --- a/app/views/maps/conversation.html.erb +++ /dev/null @@ -1,23 +0,0 @@ -<%# -# @file -# Code to display a map -# /maps/:id -#%> - -<% content_for :title, @map.name + " | Metamaps" %> -<% content_for :mobile_title, @map.name %> - diff --git a/app/views/maps/request_access.html.erb b/app/views/maps/request_access.html.erb deleted file mode 100644 index cf8aadb4..00000000 --- a/app/views/maps/request_access.html.erb +++ /dev/null @@ -1,37 +0,0 @@ -<%# -# @file -# Code to request access to a map -# /maps/:id/request_access -#%> - -<% content_for :title, 'Request Access | Metamaps' %> -<% content_for :mobile_title, 'Request Access' %> - -
-
-
-
- Hmmm. This map is private, but you can request to edit it from the map creator. -
-
REQUEST ACCESS
-
-
- - diff --git a/app/views/maps/show.html.erb b/app/views/maps/show.html.erb deleted file mode 100644 index 51d68a7a..00000000 --- a/app/views/maps/show.html.erb +++ /dev/null @@ -1,23 +0,0 @@ -<%# -# @file -# Code to display a map -# /maps/:id -#%> - -<% content_for :title, @map.name + " | Metamaps" %> -<% content_for :mobile_title, @map.name %> - diff --git a/app/views/metacode_sets/_form.html.erb b/app/views/metacode_sets/_form.html.erb deleted file mode 100644 index f209eece..00000000 --- a/app/views/metacode_sets/_form.html.erb +++ /dev/null @@ -1,89 +0,0 @@ -<%= form_for(@metacode_set) do |f| %> - <% if @metacode_set.errors.any? %> -
-

<%= pluralize(@metacode_set.errors.count, "error") %> prohibited this metacode set from being saved:

- -
    - <% @metacode_set.errors.full_messages.each do |msg| %> -
  • <%= msg %>
  • - <% end %> -
-
- <% end %> - -
- <%= f.label :name %> - <%= f.text_field :name %> -
-
-
- <%= f.label :desc, "Description" %> - <%= f.text_area :desc, :cols => "40", :rows => "4" %> -
-
- -
- -

Choose Metacodes

-
- Select All - Unselect All -
-
-
-
    - <% $i = 0 %> - <% @m = Metacode.order("name").all %> - <% while $i < (Metacode.all.length / 4) do %> -
  • class="toggledOff"<% end %> - onclick="Metamaps.Admin.liClickHandler.call(this);"> - <%= @m[$i].name %> -

    <%= @m[$i].name.downcase %>

    -
    -
  • - <% $i += 1 %> - <% end %> -
-
    - <% while $i < (Metacode.all.length / 4 * 2) do %> -
  • class="toggledOff"<% end %> - onclick="Metamaps.Admin.liClickHandler.call(this);"> - <%= @m[$i].name %> -

    <%= @m[$i].name.downcase %>

    -
    -
  • - <% $i += 1 %> - <% end %> -
-
    - <% while $i < (Metacode.all.length / 4 * 3) do %> -
  • class="toggledOff"<% end %> - onclick="Metamaps.Admin.liClickHandler.call(this);"> - <%= @m[$i].name %> -

    <%= @m[$i].name.downcase %>

    -
    -
  • - <% $i += 1 %> - <% end %> -
-
    - <% while $i < Metacode.all.length do %> -
  • class="toggledOff"<% end %> - onclick="Metamaps.Admin.liClickHandler.call(this);"> - <%= @m[$i].name %> -

    <%= @m[$i].name.downcase %>

    -
    -
  • - <% $i += 1 %> - <% end %> -
-
- <%= hidden_field(:metacodes, :value, {:value => 0}) %> -
- -
- <%= link_to 'Cancel', metacode_sets_path, - { :class => 'button' } %> - <%= f.submit :class => 'add', :onclick => "return Metamaps.Admin.validate();" %> -
-<% end %> diff --git a/app/views/metacode_sets/edit.html.erb b/app/views/metacode_sets/edit.html.erb deleted file mode 100644 index 017ab607..00000000 --- a/app/views/metacode_sets/edit.html.erb +++ /dev/null @@ -1,14 +0,0 @@ -
-
- <%= render 'form' %> -
-
- - diff --git a/app/views/metacode_sets/index.html.erb b/app/views/metacode_sets/index.html.erb deleted file mode 100644 index 68986895..00000000 --- a/app/views/metacode_sets/index.html.erb +++ /dev/null @@ -1,36 +0,0 @@ -
-
-
- - - - - - - - <% @metacode_sets.each do |metacode_set| %> - - - - - - <% end %> -
NameDescriptionMetacodes
- <%= metacode_set.name %>
- <%= link_to 'Edit', - edit_metacode_set_path(metacode_set) %> -
- <%= link_to 'Delete', - metacode_set, method: :delete, - data: { confirm: 'Are you sure?' } %> -
<%= metacode_set.desc %> - <% metacode_set.metacodes.each_with_index do |metacode, index| %> - - <% if (index+1)%4 == 0 %> -
- <% end %> - <% end %> -
-
-
-
diff --git a/app/views/metacode_sets/new.html.erb b/app/views/metacode_sets/new.html.erb deleted file mode 100644 index 017ab607..00000000 --- a/app/views/metacode_sets/new.html.erb +++ /dev/null @@ -1,14 +0,0 @@ -
-
- <%= render 'form' %> -
-
- - diff --git a/app/views/metacodes/_form.html.erb b/app/views/metacodes/_form.html.erb deleted file mode 100644 index 18236d85..00000000 --- a/app/views/metacodes/_form.html.erb +++ /dev/null @@ -1,43 +0,0 @@ -<%= form_for(@metacode) do |f| %> - <% if @metacode.errors.any? %> -
-

<%= pluralize(@metacode.errors.count, "error") %> prohibited this metacode from being saved:

-
    - <% @metacode.errors.full_messages.each do |msg| %> -
  • <%= msg %>
  • - <% end %> -
-
- <% end %> - -
- <%= f.label :name %> - <%= f.text_field :name %> -
-
- <% unless @metacode.new_record? %> -
- <%= f.label 'Current Icon' %> - <%= image_tag @metacode.icon, width: 96 %> -
- <% end %> -
- <% if @metacode.new_record? %> - <%= f.label 'Icon' %> - <% else %> - <%= f.label 'Replace Icon: ' %> - <% end %> - <%= f.hidden_field :manual_icon, value: nil %> - <%= f.file_field :aws_icon %> -
-
-
- <%= f.label :color, "Color (hex with # sign)" %> - <%= f.text_field :color %> -
-
-
- <%= link_to 'Cancel', metacodes_path, { :class => 'button' } %> - <%= f.submit :class => 'add' %> -
-<% end %> diff --git a/app/views/metacodes/edit.html.erb b/app/views/metacodes/edit.html.erb deleted file mode 100644 index 4eb40656..00000000 --- a/app/views/metacodes/edit.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -
-
- <%= render 'form' %> -
-
diff --git a/app/views/metacodes/index.html.erb b/app/views/metacodes/index.html.erb deleted file mode 100644 index f7f86e53..00000000 --- a/app/views/metacodes/index.html.erb +++ /dev/null @@ -1,30 +0,0 @@ -
-
-
- - - - - - - - - - <% @metacodes.each do |metacode| %> - - - - <% if metacode.color %> - - <% else %> - - <% end %> - - - - <% end %> -
NameIconColor
<%= metacode.name %><%= metacode.icon %> - <%= metacode.color %> - <%= image_tag metacode.icon, width: 40 %><%= link_to 'Edit', edit_metacode_path(metacode) %>
-
-
diff --git a/app/views/metacodes/new.html.erb b/app/views/metacodes/new.html.erb deleted file mode 100644 index 81819734..00000000 --- a/app/views/metacodes/new.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -
-
- <%= render 'form' %> -
-
diff --git a/app/views/notifications/index.html.erb b/app/views/notifications/index.html.erb deleted file mode 100644 index 4b0a69d2..00000000 --- a/app/views/notifications/index.html.erb +++ /dev/null @@ -1,78 +0,0 @@ -<% content_for :title, 'Notifications | Metamaps' %> -<% content_for :mobile_title, 'Notifications' %> - -
-
- -
    - <% blacklist = [MAP_ACCESS_REQUEST, MAP_ACCESS_APPROVED, MAP_INVITE_TO_EDIT] %> - <% notifications = @notifications.to_a.delete_if{|n| blacklist.include?(n.notification_code) && (n.notified_object.nil? || n.notified_object.map.nil?) }%> - <% notifications.each do |notification| %> - <% receipt = @receipts.find_by(notification_id: notification.id) %> -
  • - <%= link_to notification_path(notification.id) do %> -
    - <%= image_tag notification.sender.image(:thirtytwo) %> -
    -
    -
    <%= notification.sender.name %>
    - <% - case notification.notification_code - when MAP_ACCESS_APPROVED %> - <% map = notification.notified_object.map %> - granted your request to edit map <%= map.name %> - <% when MAP_ACCESS_REQUEST %> - <% map = notification.notified_object.map %> - wants permission to map with you on <%= map.name %> - <% if !notification.notified_object.answered %> -   
    Offer a response
    - <% end %> - <% when MAP_INVITE_TO_EDIT %> - <% map = notification.notified_object.map %> - gave you edit access to map <%= map.name %> - <% when TOPIC_ADDED_TO_MAP %> - <% topic = notification.notified_object.eventable - map = notification.notified_object.map %> - added topic <%= topic.name %> to map <%= map.name %> - <% when TOPIC_CONNECTED_1 %> - <% topic1 = notification.notified_object&.topic1 %> - <% topic2 = notification.notified_object&.topic2 %> - connected <%= topic1&.name %> to <%= topic2&.name %> - <% when TOPIC_CONNECTED_2 %> - <% topic1 = notification.notified_object&.topic1 %> - <% topic2 = notification.notified_object&.topic2 %> - connected <%= topic2&.name %> to <%= topic1&.name %> - <% when MESSAGE_FROM_DEVS %> - <%= notification.subject %> - <% end %> -
    - <% end %> -
    - <% if receipt.is_read? %> - <%= link_to 'mark as unread', mark_unread_notification_path(notification.id), remote: true, method: :put %> - <% else %> - <%= link_to 'mark as read', mark_read_notification_path(notification.id), remote: true, method: :put %> - <% end %> -
    -
    - <%= notification.created_at.strftime("%b %d") %> -
    -
    -
  • - <% end %> - <% if notifications.count == 0 %> -
    - You have no notifications. More time for dancing. -
    - <% end %> -
-
- - <% if @notifications.total_pages > 1 %> - - <% end %> -
diff --git a/app/views/notifications/mark_read.js.erb b/app/views/notifications/mark_read.js.erb deleted file mode 100644 index 17e418b8..00000000 --- a/app/views/notifications/mark_read.js.erb +++ /dev/null @@ -1,7 +0,0 @@ -$('#notification-<%= @notification.id %> .notification-read-unread > a') - .text('mark as unread') - .attr('href', '<%= mark_unread_notification_path(@notification.id) %>') -$('#notification-<%= @notification.id %>') - .removeClass('unread') - .addClass('read') -Metamaps.GlobalUI.Notifications.decrementUnread(Metamaps.GlobalUI.ReactApp.render) diff --git a/app/views/notifications/mark_unread.js.erb b/app/views/notifications/mark_unread.js.erb deleted file mode 100644 index 873e7af8..00000000 --- a/app/views/notifications/mark_unread.js.erb +++ /dev/null @@ -1,7 +0,0 @@ -$('#notification-<%= @notification.id %> .notification-read-unread > a') - .text('mark as read') - .attr('href', '<%= mark_read_notification_path(@notification.id) %>') -$('#notification-<%= @notification.id %>') - .removeClass('read') - .addClass('unread') -Metamaps.GlobalUI.Notifications.incrementUnread(Metamaps.GlobalUI.ReactApp.render) diff --git a/app/views/notifications/show.html.erb b/app/views/notifications/show.html.erb deleted file mode 100644 index e2cb2bd2..00000000 --- a/app/views/notifications/show.html.erb +++ /dev/null @@ -1,52 +0,0 @@ -<% content_for :title, 'Notifications | Metamaps' %> -<% content_for :mobile_title, 'Notifications' %> - -
-
- <%= link_to 'Back to notifications', notifications_path %> -
-
-

- <% case @notification.notification_code - when MAP_ACCESS_REQUEST - request = @notification.notified_object - map = request.map %> - <%= image_tag @notification.sender.image(:thirtytwo), class: 'thirty-two-avatar' %> <%= request.user.name %> wants to collaborate on map <%= map.name %> - <% else %> - <%= @notification.subject %> - <% end %> -

- <% case @notification.notification_code - when MAP_ACCESS_REQUEST %> -
-

- <% if false && request.answered %> - <% if request.approved %> - You already responded to this access request, and allowed access. - <% elsif !request.approved %> - You already responded to this access request, and declined access. If you changed your mind, you can still grant - them access by going to the map and adding them as a collaborator. - <% end %> - <% else %> - <%= image_tag asset_path('ellipsis.gif'), class: 'hidden' %> - <%= link_to 'Allow', approve_access_post_map_path(id: map.id, request_id: request.id), remote: true, method: :post, class: 'button allow' %> - <%= link_to 'Decline', deny_access_post_map_path(id: map.id, request_id: request.id), remote: true, method: :post, class: 'button decline' %> - - <% end %> -

- <%= link_to 'Go to map', map_url(map) %> -   <%= link_to 'View mapper profile', explore_path(id: request.user.id) %> -
- <% else %> -
- <%= raw @notification.body %> -
- <% end %> -
-
diff --git a/app/views/shared/_cheatsheet.html.erb b/app/views/shared/_cheatsheet.html.erb deleted file mode 100644 index 1ceca774..00000000 --- a/app/views/shared/_cheatsheet.html.erb +++ /dev/null @@ -1,175 +0,0 @@ -<%# - # @file - # The inner HTML of the cheatsheet - #%> - -

HELP

- -
- - -
- - -
-
Enter Topic (radial) View: Click on a Topic result from Search, or click the synapse icon inside open Topic Card on map
-
Recenter Topics around chosen Topic: Alt + click on the topic OR Alt + E
-
Reveal the siblings for a Topic: Right-click and choose 'Reveal siblings' OR Alt + R
-
Center topic and reveal siblings: Alt + T
-
Filter out visible Topics: Open Filter menu *** and toggle off/on
-
- -
-
Double-click on canvas: Bring up the metacode spinner
-
Scroll: change metacode spinner selection
-
Tab: rotate spinner counter-clockwise
-
Shift + tab: rotate spinner clockwise
-
Esc: Hides auto-suggestion results
-
Enter: create a new topic
-
Gear Icon: open up metacode settings
- -
- -
-
- Open Topic card: Double-click on topic icon -
-
- Move Topic card: Click and drag on topic card metacode -
-
- Change metacode: Mouse over metacode icon, then click on solid colored bar for metacode menu -
-
- Edit Topic title, description, link: Click on text in respective area (click small "X" to reset link) -
-
- Save Topic title, description, link: Hit enter, or click away -
-
- Change Topic permission: Click on 'Permission' icon (only for topic creator) -
-
- Open Topic view: Click on icon within topic card bar -
-
- Close Topic card: Click on canvas -
-
- Open 'Context Menu': Right-click/alt+click on topic icon or synapse or selection (multiple) to Hide/Remove/Delete, change metacode or permission -
- - -
- -
-
Open 'Create Synapse' prompt: Right-click & drag from one topic to another
-
Enter a label Begin typing (or leave blank)
-
Confirm new Synapse: Enter or Tab
-
Cancel new Synapse: Escape or Delete
-
Create new Topic with Synapse: Right-click + drag from existing topic to open canvas
-
Create Topic: Same as elsewhere
-
Create Synapse: Same as above
- - -
- -
-
Open Synapse card: Double-click on Synapse
-
Edit Synapse description: Click on current description text
-
Save Synapse description: Hit enter
-
Edit directionality: Select appropriate arrow boxes
-
Change synapse permission: Click on 'permission' icon (only for synapse creator)
-
Browse / select from multiple (stacked) synapses: Click dropdown icon and select desired synapse
-
Open 'Context Menu': Right-click/alt-click on Synapse
-
*Hide/Remove/Delete synapse within context menu
- - -
- -
-
Move around Canvas: Click and drag
-
Zoom in/out: Scroll OR click on
&
-
Zoom to see all: Click
OR Ctrl + E
-
Filter Map Contents: Open the Filter Menu *** and toggle items off/on
-
Return to 'Explore Maps' (home) page: Click the Metamaps logo in the upper left corner
- - -
- -
-
Select/Deselect Topic: Click on topic icon
-
Select/Deselect Synapse: Click on synapse
-
Select multiple Topics/Synapses: Shift + click to include each
-
Select multiple with Selection Box: Right-click/Shift-click + drag on Canvas
-
Move all selected Topics & Synapses: Click + drag on selected topic(s)/synapse(s)
-
Open 'Context Menu': Right-click/Alt-click on selected topic(s)
-
*Hide/Remove/Delete/Change permissions of multiple topics & synapses within context menu
-
Zoom to selection box Ctrl-click + drag
-
Deselect all topics & Synapses: Click on background or Esc
-
- -
-
Search for Topics and Maps: Type query terms into search bar, wait for results below
-
Limit search results: Click checkbox for only items you created; click arrow above Topics or Maps section to collapse
-
Add Topic to current Map: Click "+" on a topic result
-
Jump to Topic View: Click anywhere else on a topic result
-
Search by metacode: type "[name of metacode]:", then your search query. i.e. idea:create...
-
Search for map: type "map:", then your search query. i.e. map:exploring...
-
Search for mapper: type "mapper:", then your search query. i.e. mapper:Robert
-
- -
-
Ctrl + /: Open 'Search' prompt
-
Ctrl + H: Hide selection on map
-
Ctrl + M: Remove selection from map
-
Ctrl + D: Delete selection
-
Ctrl + A: Select all topics
-
Ctrl + E: See all on map (zoom to extents)
-
Esc (while in search): Close search
-
Esc (with selection): Deselect all
-
-
- -
- -
- -
-

For more information about Metamaps.cc, visit our Knowledge Base or skip directly to a section by clicking on one of the categories below.

- - -
- - -
diff --git a/app/views/shared/_forkmap.html.erb b/app/views/shared/_forkmap.html.erb deleted file mode 100644 index 1a262d74..00000000 --- a/app/views/shared/_forkmap.html.erb +++ /dev/null @@ -1,62 +0,0 @@ -<%# - # @file - # Partial view, renders a form that creates a new map. - #%> -
-<%= form_for Map.new, url: maps_url, remote: true, html: { class: "new_map", id: "fork_map" } do |form|%> - -

Save To New Map

- -
- - <%= form.text_field :name, :maxlength => 140 %> -
-
- -
- - <%= form.text_area :desc, class: "description", :rows => 5, :cols => 43 %> -
-
- -
- -

*new topics and synapses take on the same permission as the map they are created on

-
-
-
-
- Anyone with an account can edit this map. Anyone without an account can only view it. -
-
-

COMMONS

-
-
-
-
- Only people you allow can edit this map. Anyone can view it. -
-
-

PUBLIC

-
-
-
-
- Only people you allow can edit this map. No one else can view it. -
-
-

PRIVATE

-
-
-
-

Anyone with an account can edit this map. Anyone without an account can only view it.

-
-
- -
- - -
-
-<% end %> -
diff --git a/app/views/shared/_mailer_unsubscribe_link.html.erb b/app/views/shared/_mailer_unsubscribe_link.html.erb deleted file mode 100644 index 5aab4689..00000000 --- a/app/views/shared/_mailer_unsubscribe_link.html.erb +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/app/views/shared/_mailer_unsubscribe_link.text.erb b/app/views/shared/_mailer_unsubscribe_link.text.erb deleted file mode 100644 index ff851865..00000000 --- a/app/views/shared/_mailer_unsubscribe_link.text.erb +++ /dev/null @@ -1,5 +0,0 @@ - - -You can unsubscribe from all Metamaps emails by visiting the following link: - -<%= unsubscribe_notifications_url(protocol: Rails.env.production? ? :https : :http) %> diff --git a/app/views/shared/_metacodeCssColors.html.erb b/app/views/shared/_metacodeCssColors.html.erb deleted file mode 100644 index 5ef6119e..00000000 --- a/app/views/shared/_metacodeCssColors.html.erb +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/app/views/shared/_metacodeoptions.html.erb b/app/views/shared/_metacodeoptions.html.erb deleted file mode 100644 index 3cf9604e..00000000 --- a/app/views/shared/_metacodeoptions.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%# - # @file - # this code generates the list of icons that will drop down in the metacode select list on the topic card - #%> - - diff --git a/app/views/shared/_switchmetacodes.html.erb b/app/views/shared/_switchmetacodes.html.erb deleted file mode 100644 index 9dbdabb6..00000000 --- a/app/views/shared/_switchmetacodes.html.erb +++ /dev/null @@ -1,121 +0,0 @@ -<%# - # @file - # The inner HTML for switching your metacode set - #%> - -<% metacodes = current_user.settings.metacodes %> -<% selectedSet = metacodes[0].include?("metacodeset") ? metacodes[0].sub("metacodeset-","") : "custom" %> -<% allMetacodeSets = MetacodeSet.order("name").all.to_a %> -<% if selectedSet == "custom" - index = allMetacodeSets.length + 2 - elsif selectedSet == 'Recent' - index = 0 - elsif selectedSet == 'Most' - index = 1 - else - set = MetacodeSet.find(selectedSet.to_i) - index = allMetacodeSets.index(set) + 2 - end %> -

Switch Metacode Set

- -

Use metacode sets to enter different modes of mapping.

- -
- - <% recent = user_recent_metacodes() %> -
- <% @list = '' %> - <% recent.each_with_index do |m, index| %> - <% @list += '
  • ' + m.name + '

    ' + m.name.downcase + '

  • ' %> - <% end %> -
    -

    The 5 Metacodes you've used most recently.

    -
    -
      - <%= @list.html_safe %> -
    -
    -
    -
    - -
    - <% most_used = user_most_used_metacodes() %> -
    - <% @list = '' %> - <% most_used.each_with_index do |m, index| %> - <% @list += '
  • ' + m.name + '

    ' + m.name.downcase + '

  • ' %> - <% end %> -
    -

    The 5 Metacodes you've used the most.

    -
    -
      - <%= @list.html_safe %> -
    -
    -
    -
    - -
    - <% allMetacodeSets.each_with_index do |m, localindex| %> -
    - <% @list = '' %> - <% m.metacodes.sort{|x,y| x.name <=> y.name }.each_with_index do |m, index| %> - <% @list += '
  • ' + m.name + '

    ' + m.name.downcase + '

  • ' %> - <% end %> -
    -

    <%= m.desc %>

    -
    -
      - <%= @list.html_safe %> -
    -
    -
    -
    - -
    - <% end %> -
    -
    Choose Your Metacodes
    -
    NONE
    -
    ALL
    - <% @list = '' %> - <% metacodesInUse = user_metacodes() %> - <% Metacode.order("name").all.each_with_index do |m, index| %> - <% mClass = metacodesInUse.index(m) == nil ? "toggledOff" : "" %> - <% @list += '
  • ' + m.name + '

    ' + m.name.downcase + '

  • ' %> - <% end %> - -
    -
      - <%= @list.html_safe %> -
    -
    -
    - -
    -
    - -
    - - diff --git a/app/views/tokens/new.html.erb b/app/views/tokens/new.html.erb deleted file mode 100644 index e655010d..00000000 --- a/app/views/tokens/new.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%= form_for @token, url: '/api/v2/tokens', method: :post do |form| %> -

    Request new API Token

    - <%= form.text_field :description, placeholder: "Token description..." %> - <%= form.submit %> -<% end %> diff --git a/app/views/topic_mailer/_unfollow.html.erb b/app/views/topic_mailer/_unfollow.html.erb deleted file mode 100644 index 555722a9..00000000 --- a/app/views/topic_mailer/_unfollow.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -
    -You are receiving this email because you are following this topic. -<%= link_to 'Unfollow', unfollow_from_email_topic_url(topic) %> \ No newline at end of file diff --git a/app/views/topic_mailer/_unfollow.text.erb b/app/views/topic_mailer/_unfollow.text.erb deleted file mode 100644 index 78128bd4..00000000 --- a/app/views/topic_mailer/_unfollow.text.erb +++ /dev/null @@ -1,2 +0,0 @@ -You are receiving this email because you are following this topic. -To unfollow, go to: <%= unfollow_from_email_topic_url(topic) %> \ No newline at end of file diff --git a/app/views/topic_mailer/added_to_map.html.erb b/app/views/topic_mailer/added_to_map.html.erb deleted file mode 100644 index 5cdb4301..00000000 --- a/app/views/topic_mailer/added_to_map.html.erb +++ /dev/null @@ -1,13 +0,0 @@ -<% topic = @entity || entity %> -<% event = @event || event %> -<% button_style = "background-color:#4fc059;border-radius:2px;color:white;display:inline-block;font-family:Roboto,Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;min-height:29px;line-height:29px;min-width:54px;outline:0px;padding:0 8px;text-align:center;text-decoration:none" %> -

    - <%= event.user.name %> - added topic <%= topic.name %> - to map <%= event.map.name %> -

    - -<%= link_to 'Go to Topic', topic_url(topic), style: button_style %> -<%= link_to 'Go to Map', map_url(event.map), style: button_style %> - -<%= render :partial => 'topic_mailer/unfollow', locals: { topic: topic } %> \ No newline at end of file diff --git a/app/views/topic_mailer/added_to_map.text.erb b/app/views/topic_mailer/added_to_map.text.erb deleted file mode 100644 index 67518cc6..00000000 --- a/app/views/topic_mailer/added_to_map.text.erb +++ /dev/null @@ -1,8 +0,0 @@ -<% topic = @entity || entity %> -<% event = @event || event %> -<%= event.user.name %> added topic <%= topic.name %> to map <%= event.map.name %> - -topic_url(topic) -map_url(event.map) - -<%= render :partial => 'topic_mailer/unfollow', locals: { topic: topic } %> \ No newline at end of file diff --git a/app/views/topic_mailer/connected.html.erb b/app/views/topic_mailer/connected.html.erb deleted file mode 100644 index 65e08c04..00000000 --- a/app/views/topic_mailer/connected.html.erb +++ /dev/null @@ -1,17 +0,0 @@ -<% topic1 = @entity || entity - synapse = @event || event - button_style = "background-color:#4fc059;border-radius:2px;color:white;display:inline-block;font-family:Roboto,Arial,Helvetica,sans-serif;font-size:12px;font-weight:bold;min-height:29px;line-height:29px;min-width:54px;outline:0px;padding:0 8px;text-align:center;text-decoration:none" - topic2 = (topic1.id == synapse.topic1_id ? synapse.topic2 : synapse.topic1) %> - -

    - <%= synapse.user.name %> - connected topic <%= topic1.name %> - to topic <%= topic2.name %> - <% if synapse.desc.length > 0 %> - with the description "<%= synapse.desc %>". - <% end %> -

    - -<%= link_to 'View the connection', topic_url(topic1), style: button_style %> - -<%= render :partial => 'topic_mailer/unfollow', locals: { topic: topic1 } %> \ No newline at end of file diff --git a/app/views/topic_mailer/connected.text.erb b/app/views/topic_mailer/connected.text.erb deleted file mode 100644 index e3688025..00000000 --- a/app/views/topic_mailer/connected.text.erb +++ /dev/null @@ -1,10 +0,0 @@ -<% topic1 = @entity || entity - synapse = @event || event - topic2 = (topic1.id == synapse.topic1_id ? synapse.topic2 : synapse.topic1) %> - -<%= synapse.user.name %> connected topic <%= topic1.name %> to topic <%= topic2.name %> -<%= synapse.desc.length > 0 ? ' with the description' + synapse.desc : '' %> - -<%= topic_url(topic1) %> - -<%= render :partial => 'topic_mailer/unfollow', locals: { topic: topic1 } %> \ No newline at end of file diff --git a/app/views/topics/_new.html.erb b/app/views/topics/_new.html.erb deleted file mode 100644 index 4f856a81..00000000 --- a/app/views/topics/_new.html.erb +++ /dev/null @@ -1,35 +0,0 @@ -<%# - # @file - # This file contains code for rendering a new topic form. - # It's called from the show topic / radial view pages - #%> - -
    -<%= form_for Topic.new, url: topics_url, remote: true do |form| %> -
    -
    Switch Metacodes
    -
    -
    -
    Keep Open
    -
    -
    - <% @m = user.settings.metacodes %> - <% set = @m[0].include?("metacodeset") ? MetacodeSet.find(@m[0].sub("metacodeset-","").to_i) : false %> - <% if set %> - <% @metacodes = set.metacodes %> - <% else %> - <% @metacodes = [] %> - <% @m.each do |m| %> - <% @metacodes.push(Metacode.find(m.to_i)) %> - <% end %> - <% end %> - <% @metacodes.sort! {|m1,m2| m2.name.downcase <=> m1.name.downcase }.rotate!(-1) %> - <% @metacodes.each do |metacode| %> - <%= metacode.name %> - <% end %> -
    - <%= form.text_field :name, :maxlength => 140, :placeholder => "title..." %> -
    -
    -<% end %> -
    diff --git a/app/views/topics/show.html.erb b/app/views/topics/show.html.erb deleted file mode 100644 index 119f2f40..00000000 --- a/app/views/topics/show.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -<%# -# -# @file -# This shows a topic and its siblings. -# URL: /topics/ -# -%> - -<% content_for :title, @topic.name + " | Metamaps" %> -<% content_for :mobile_title, @topic.name %> - diff --git a/app/views/users/confirmations/new.html.erb b/app/views/users/confirmations/new.html.erb deleted file mode 100644 index 9c27eb72..00000000 --- a/app/views/users/confirmations/new.html.erb +++ /dev/null @@ -1,12 +0,0 @@ -

    Resend confirmation instructions

    - -<%= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f| %> - <%= devise_error_messages! %> - -
    <%= f.label :email %>
    - <%= f.email_field :email, :autofocus => true %>
    - -
    <%= f.submit "Resend confirmation instructions" %>
    -<% end %> - -<%= render "devise/shared/links" %> diff --git a/app/views/users/edit.html.erb b/app/views/users/edit.html.erb deleted file mode 100644 index 1ee406e7..00000000 --- a/app/views/users/edit.html.erb +++ /dev/null @@ -1,87 +0,0 @@ -<%# - # @file - # /users/:id/edit - # User edit form - #%> - -<% content_for :title, @user.name + "'s Settings | Metamaps" %> -<% content_for :mobile_title, "Account Settings" %> -
    -<%= form_for @user, url: user_url, :html =>{ :multipart => true, :class => "edit_user centerGreyForm"} do |form| %> -

    Edit Settings

    -
    -
    - <%= image_tag @user.image.url(:ninetysix), :size => "84x84" %> -
    -
    -
    -
    -
      -
    • - Upload Photo - <%= hidden_field_tag "remove_image", "0" %> - <%= form.file_field :image %> - <%= form.label :image %> -
    • -
    • Remove
    • -
    • Cancel
    • -
    -
    - -
    -
    -
    <%= @user.name %>
    -
    -
    - <%= form.label :name, "Name:", class: 'firstFieldText' %> - <%= form.text_field :name %> -
    -
    - <%= form.label :email, "Email:", class: 'firstFieldText' %> - <%= form.email_field :email %> -
    -
    - <%= form.label :emails_allowed, class: 'firstFieldText' do %> - <%= form.check_box :emails_allowed, class: 'inline' %> - Send Metamaps notifications to my email. - <% end %> - <%= fields_for :settings, @user.settings do |settings| %> - <%= settings.label :follow_topic_on_created, class: 'firstFieldText' do %> - <%= settings.check_box :follow_topic_on_created, class: 'inline' %> - Auto-follow topics you create. - <% end %> - <%= settings.label :follow_topic_on_contributed, class: 'firstFieldText' do %> - <%= settings.check_box :follow_topic_on_contributed, class: 'inline' %> - Auto-follow topics you edit. - <% end %> - <%= settings.label :follow_map_on_created, class: 'firstFieldText' do %> - <%= settings.check_box :follow_map_on_created, class: 'inline' %> - Auto-follow maps you create. - <% end %> - <%= settings.label :follow_map_on_contributed, class: 'firstFieldText' do %> - <%= settings.check_box :follow_map_on_contributed, class: 'inline' %> - Auto-follow maps you edit. - <% end %> - <% end %> -
    -
    Change Password
    -
    -
    - <%= form.label :current_password, "Current Password:", :class => "firstFieldText" %> - <%= password_field_tag :current_password, params[:current_password] %> -
    -
    - <%= form.label :password, "New Password:", :class => "firstFieldText" %> - <%= form.password_field :password, :autocomplete => :off%> -
    -
    - <%= form.label :password_confirmation, "Confirm New Password:", :class => "firstFieldText" %> - <%= form.password_field :password_confirmation, :autocomplete => :off%> -
    -
    Oops, don't change password
    -
    -
    - <%= form.submit "Update", class: "update", onclick: "Metamaps.Account.showLoading()" %> -
    -<% end %> -
    diff --git a/app/views/users/mailer/confirmation_instructions.html.erb b/app/views/users/mailer/confirmation_instructions.html.erb deleted file mode 100644 index 5b04a725..00000000 --- a/app/views/users/mailer/confirmation_instructions.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -

    Welcome <%= @email %>!

    - -

    You can confirm your account email through the link below:

    - -

    <%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>

    diff --git a/app/views/users/mailer/reset_password_instructions.html.erb b/app/views/users/mailer/reset_password_instructions.html.erb deleted file mode 100644 index bb938968..00000000 --- a/app/views/users/mailer/reset_password_instructions.html.erb +++ /dev/null @@ -1,11 +0,0 @@ -

    Hey there Metamapper with email <%= @resource.email %>!

    - -

    Please create a new password. Your password needs to contain a capital letter, a number, an emoji, 7 elements from the Periodic Table, and a plot containing a protagonist with some character development and a surprise twist ending.

    - -

    Just kidding. But it does have to be between 8 and 40 characters.

    - -

    Change your password using the link below.

    - -

    <%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @token) %>

    - -

    If you didn't request this, click your heels three times and pretend nothing ever happened.

    diff --git a/app/views/users/mailer/unlock_instructions.html.erb b/app/views/users/mailer/unlock_instructions.html.erb deleted file mode 100644 index a4152e13..00000000 --- a/app/views/users/mailer/unlock_instructions.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -

    Hello <%= @resource.email %>!

    - -

    Your account has been locked due to an excessive number of unsuccessful sign in attempts.

    - -

    Click the link below to unlock your account:

    - -

    <%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %>

    diff --git a/app/views/users/passwords/edit.html.erb b/app/views/users/passwords/edit.html.erb deleted file mode 100644 index 76e4c20d..00000000 --- a/app/views/users/passwords/edit.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -<% content_for :title, "Change Password | Metamaps" %> -<% content_for :mobile_title, "Change Password" %> - -
    -<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put, :class => "forgotPassword centerGreyForm forgotPasswordReset" }) do |f| %> - <%= f.hidden_field :reset_password_token %> - -

    Change password

    - -
    <%= f.label :password, "New password", :class => "firstFieldText" %> - <%= f.password_field :password, :autofocus => true %>
    - -
    <%= f.label :password_confirmation, "Confirm new password", :class => "firstFieldText" %> - <%= f.password_field :password_confirmation %>
    - -
    <%= f.submit "Change my password" %>
    - -<% end %> -
    - diff --git a/app/views/users/passwords/new.html.erb b/app/views/users/passwords/new.html.erb deleted file mode 100644 index 5b8fb902..00000000 --- a/app/views/users/passwords/new.html.erb +++ /dev/null @@ -1,17 +0,0 @@ -<% content_for :title, "Password Reset | Metamaps" %> -<% content_for :mobile_title, "Password Reset" %> - -
    -<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post, :class => "forgotPassword centerGreyForm" }) do |f| %> - -

    FORGOT PASSWORD?

    - -
    <%= f.label :email, "Enter your email:", :class => "firstFieldText" %> - <%= f.email_field :email, :autofocus => true %>
    - -
    <%= f.submit "Send Password Reset Instructions" %>
    - -<% end %> -
    - - diff --git a/app/views/users/registrations/edit.html.erb b/app/views/users/registrations/edit.html.erb deleted file mode 100644 index 9bb26462..00000000 --- a/app/views/users/registrations/edit.html.erb +++ /dev/null @@ -1,29 +0,0 @@ -

    Edit <%= resource_name.to_s.humanize %>

    - -<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> - <%= devise_error_messages! %> - -
    <%= f.label :email %>
    - <%= f.email_field :email, :autofocus => true %>
    - - <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> -
    Currently waiting confirmation for: <%= resource.unconfirmed_email %>
    - <% end %> - -
    <%= f.label :password %> (leave blank if you don't want to change it)
    - <%= f.password_field :password, :autocomplete => "off" %>
    - -
    <%= f.label :password_confirmation %>
    - <%= f.password_field :password_confirmation %>
    - -
    <%= f.label :current_password %> (we need your current password to confirm your changes)
    - <%= f.password_field :current_password %>
    - -
    <%= f.submit "Update" %>
    -<% end %> - -

    Cancel my account

    - -

    Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), :data => { :confirm => "Are you sure?" }, :method => :delete %>.

    - -<%= link_to "Back", :back %> diff --git a/app/views/users/registrations/new.html.erb b/app/views/users/registrations/new.html.erb deleted file mode 100644 index 17409d07..00000000 --- a/app/views/users/registrations/new.html.erb +++ /dev/null @@ -1,29 +0,0 @@ -<% content_for :title, "Sign Up | Metamaps" %> -<% content_for :mobile_title, "Join" %> - -
    -<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :post, :class => "new_user centerGreyForm" }) do |f| %> - -

    Sign Up

    - -
    <%= f.label :name, "Name:", :class => "firstFieldText" %> - <%= f.text_field :name, :autofocus => true %>
    - -
    <%= f.label :email, "Email:", :class => "fieldText" %> - <%= f.email_field :email %>
    - -
    <%= f.label :password, "Password:", :class => "fieldText" %> - <%= f.password_field :password %>
    - -
    <%= f.label :password_confirmation, "Password Confirmation:", :class => "fieldText" %> - <%= f.password_field :password_confirmation %>
    - -
    <%= f.label "Access Code:", :class => "fieldText" %> - <%= f.text_field :joinedwithcode, :value => params[:code] %>
    - -
    <%= f.submit "Sign up!" %>
    - -

    Don't have an access code?
    Request an Invite
    -<% end %> -
    - diff --git a/app/views/users/sessions/new.html.erb b/app/views/users/sessions/new.html.erb deleted file mode 100644 index 129f905e..00000000 --- a/app/views/users/sessions/new.html.erb +++ /dev/null @@ -1,32 +0,0 @@ -<% content_for :title, "Sign In | Metamaps" %> -<% content_for :mobile_title, "Login" %> - -
    -<%= form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :method => :post, :class => "centerGreyForm login" }) do |f| %> -

    SIGN IN

    - -
    -
    - <%= f.email_field :email, :autofocus => true, :placeholder => "Email" %>
    - -
    - <%= f.password_field :password, :placeholder => "Password" %>
    - -
    <%= f.submit "Sign in" %>
    - - <% if devise_mapping.rememberable? -%> -
    - <%= f.label :remember_me, "Stay signed in" %> - <%= f.check_box :remember_me %> -
    -
    - <% end -%> -
    -
    - <%- if devise_mapping.recoverable? && controller_name != 'passwords' %> - <%= link_to "Forgot password?", new_password_path(resource_name) %> - <% end -%> -
    -<% end %> -
    - diff --git a/app/views/users/shared/_links.erb b/app/views/users/shared/_links.erb deleted file mode 100644 index f687d7ee..00000000 --- a/app/views/users/shared/_links.erb +++ /dev/null @@ -1,25 +0,0 @@ -<%- if controller_name != 'sessions' %> - <%= link_to "Sign in", new_session_path(resource_name) %>
    -<% end -%> - -<%- if devise_mapping.registerable? && controller_name != 'registrations' %> - <%= link_to "Sign up", new_user_path(resource_name) %>
    -<% end -%> - -<%- if devise_mapping.recoverable? && controller_name != 'passwords' %> - <%= link_to "Forgot your password?", new_password_path(resource_name) %>
    -<% end -%> - -<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %> - <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %>
    -<% end -%> - -<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %> - <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %>
    -<% end -%> - -<%- if devise_mapping.omniauthable? %> - <%- resource_class.omniauth_providers.each do |provider| %> - <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %>
    - <% end -%> -<% end -%> \ No newline at end of file diff --git a/app/views/users/unlocks/new.html.erb b/app/views/users/unlocks/new.html.erb deleted file mode 100644 index 020787f8..00000000 --- a/app/views/users/unlocks/new.html.erb +++ /dev/null @@ -1,12 +0,0 @@ -

    Resend unlock instructions

    - -<%= form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f| %> - <%= devise_error_messages! %> - -
    <%= f.label :email %>
    - <%= f.email_field :email, :autofocus => true %>
    - -
    <%= f.submit "Resend unlock instructions" %>
    -<% end %> - -<%= render "devise/shared/links" %> diff --git a/bin/build-apidocs.sh b/bin/build-apidocs.sh deleted file mode 100755 index 28931b2f..00000000 --- a/bin/build-apidocs.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -# Note: you need to run `npm install` before using this script or raml2html won't be installed - -OLD_DIR=$(pwd) -cd $(dirname $0)/.. - -if [[ ! -x ./node_modules/.bin/raml2html ]]; then - npm install -fi - -./node_modules/.bin/raml2html -i ./doc/api/api.raml -o ./public/api/index.html -t doc/api/templates/template.nunjucks -if [[ -x $(which open) ]]; then - open public/api/index.html -fi - -cd $OLD_DIR diff --git a/bin/bundle b/bin/bundle deleted file mode 100755 index 66e9889e..00000000 --- a/bin/bundle +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env ruby -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) -load Gem.bin_path('bundler', 'bundle') diff --git a/bin/configure.sh b/bin/configure.sh deleted file mode 100755 index 5d2b9751..00000000 --- a/bin/configure.sh +++ /dev/null @@ -1,17 +0,0 @@ -# Make sure we've got NFS handy. -if [ $(uname) == 'Linux' ] && [ ! -e /etc/init.d/nfs-kernel-server ]; then - sudo apt-get install -y nfs-common nfs-kernel-server rpcbind -fi - -# Vagrant up -vagrant up - -# Bundle! -vagrant ssh --command "cd /vagrant; gem install bundler"; -vagrant ssh --command "cd /vagrant; bundle install"; - -# copy the db config -vagrant ssh --command "cd /vagrant; cp .example-env .env"; - -# Rake all the things -vagrant ssh --command "cd /vagrant; rake db:create; rake db:setup" diff --git a/bin/delayed_job b/bin/delayed_job deleted file mode 100755 index edf19598..00000000 --- a/bin/delayed_job +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env ruby - -require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment')) -require 'delayed/command' -Delayed::Command.new(ARGV).daemonize diff --git a/bin/jenkins-test.sh b/bin/jenkins-test.sh deleted file mode 100755 index f70a1e50..00000000 --- a/bin/jenkins-test.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -l - -# jenkins machine prerequisites -# sudo aptitude -q -y install libpq-dev -# install rvm with user gemsets -# install node and npm - -source "$HOME/.rvm/scripts/rvm" -rvm use $(cat .ruby-version) || \ - rvm install $(cat .ruby-version) -rvm gemset use $(cat .ruby-gemset) || \ - rvm gemset create $(cat .ruby-gemset) && \ - rvm gemset use $(cat .ruby-gemset) -gem install bundler - -set -x - -#configure environment -export RAILS_ENV=test -cp .example-env .env -sed -i -e "s/DB_USERNAME='.*'/DB_USERNAME='jenkins'/" .env - -# rspec tests -bundle install -rake db:drop -rake db:create -rake db:schema:load -rake db:migrate -COVERAGE=on bundle exec rspec - -# javascript tests -cd app/assets/javascripts -npm install -npm test diff --git a/bin/rails b/bin/rails deleted file mode 100755 index 07396602..00000000 --- a/bin/rails +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env ruby -APP_PATH = File.expand_path('../config/application', __dir__) -require_relative '../config/boot' -require 'rails/commands' diff --git a/bin/rake b/bin/rake deleted file mode 100755 index 17240489..00000000 --- a/bin/rake +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env ruby -require_relative '../config/boot' -require 'rake' -Rake.application.run diff --git a/bin/start b/bin/start deleted file mode 100755 index ed2b0130..00000000 --- a/bin/start +++ /dev/null @@ -1,2 +0,0 @@ -#start rails server and realtime node server -vagrant ssh --command "cd /vagrant; rails s -d; forever start ./realtime/realtime-server.js" \ No newline at end of file diff --git a/bin/stop b/bin/stop deleted file mode 100755 index b8bdaeb6..00000000 --- a/bin/stop +++ /dev/null @@ -1,2 +0,0 @@ -# stop rails server and node server -vagrant ssh --command "cd /vagrant; kill -9 $(cat tmp/pids/server.pid); forever stopall" \ No newline at end of file diff --git a/config.ru b/config.ru deleted file mode 100644 index 207953e1..00000000 --- a/config.ru +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true - -# This file is used by Rack-based servers to start the application. - -require ::File.expand_path('../config/environment', __FILE__) -run Metamaps::Application diff --git a/config/application.rb b/config/application.rb deleted file mode 100644 index f7dbf17b..00000000 --- a/config/application.rb +++ /dev/null @@ -1,65 +0,0 @@ -# frozen_string_literal: true - -require_relative 'boot' - -require 'csv' -require 'rails/all' - -Bundler.require(*Rails.groups) - -module Metamaps - class Application < Rails::Application - # Settings in config/environments/* take precedence over those specified here. - # Application configuration should go into files in config/initializers - # -- all .rb files in that directory are automatically loaded. - # - config.active_job.queue_adapter = if ENV['ACTIVE_JOB_FRAMEWORK'] == 'sucker_punch' - :sucker_punch - else - :delayed_job - end - - # Custom directories with classes and modules you want to be autoloadable. - config.autoload_paths << Rails.root.join('app', 'decorators', 'services') - - # Configure the default encoding used in templates for Ruby 1.9. - config.encoding = 'utf-8' - - config.to_prepare do - Doorkeeper::ApplicationsController.layout 'application' - Doorkeeper::AuthorizationsController.layout 'application' - Doorkeeper::AuthorizedApplicationsController.layout 'application' - Doorkeeper::ApplicationController.helper ApplicationHelper - end - - config.middleware.use Rack::Attack - - # Configure sensitive parameters which will be filtered from the log file. - config.filter_parameters += [:password] - - # Enable the asset pipeline - config.assets.initialize_on_precompile = false - - # Version of your assets, change this if you want to expire all your assets - config.assets.version = '2.0' - - config.generators do |g| - g.test_framework :rspec - end - - # pundit errors return 403 FORBIDDEN - config.action_dispatch.rescue_responses['Pundit::NotAuthorizedError'] = :forbidden - - # S3 file storage - config.paperclip_defaults = { - storage: :s3, - s3_protocol: 'https', - s3_region: ENV['S3_REGION'], - s3_credentials: { - bucket: ENV['S3_BUCKET_NAME'], - access_key_id: ENV['AWS_ACCESS_KEY_ID'], - secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] - } - } - end -end diff --git a/config/boot.rb b/config/boot.rb deleted file mode 100644 index 6868388e..00000000 --- a/config/boot.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -require 'rubygems' -require 'rails/commands/server' - -module Rails - class Server - def default_options - super.merge(Host: '0.0.0.0', Port: 3000) - end - end -end - -# Set up gems listed in the Gemfile. -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) - -require 'bundler/setup' diff --git a/config/brakeman.ignore b/config/brakeman.ignore deleted file mode 100644 index c2491dcd..00000000 --- a/config/brakeman.ignore +++ /dev/null @@ -1,24 +0,0 @@ -{ - "ignored_warnings": [ - { - "warning_type": "Cross-Site Request Forgery", - "warning_code": 7, - "fingerprint": "59d73ce0b791aa7ed532510c780235a8b23f7cd1246dbf9da258e36f5d1e2b0a", - "message": "'protect_from_forgery' should be called in Api::V2::RestfulController", - "file": "app/controllers/api/v2/restful_controller.rb", - "line": 4, - "link": "http://brakemanscanner.org/docs/warning_types/cross-site_request_forgery/", - "code": null, - "render_path": null, - "location": { - "type": "controller", - "controller": "Api::V2::RestfulController" - }, - "user_input": null, - "confidence": "High", - "note": "Cookie-based auth is disabled for the API except for the tokens endpoint. We're hoping this is sufficiently secure, because CSRF-forged links might get clicked on another site, but the generated tokens won't go back to the attacker. Also, an attacker would need a token to delete it, which means they've got access at that point anyways. - Devin, Feb 2017" - } - ], - "updated": "2017-02-11 20:00:09 -0800", - "brakeman_version": "3.4.1" -} diff --git a/config/cable.yml b/config/cable.yml deleted file mode 100644 index 34eb5cdc..00000000 --- a/config/cable.yml +++ /dev/null @@ -1,9 +0,0 @@ -development: - adapter: async - -test: - adapter: async - -production: - adapter: redis - url: <%= ENV['REDISTOGO_URL'] %> diff --git a/config/database.yml b/config/database.yml deleted file mode 100644 index c6cad0fa..00000000 --- a/config/database.yml +++ /dev/null @@ -1,21 +0,0 @@ -default: &default - min_messages: WARNING - encoding: unicode - pool: 5 - adapter: postgresql - host: <%= ENV['DB_HOST'] %> - port: <%= ENV['DB_PORT'] %> - username: <%= ENV['DB_USERNAME'] %> - password: <%= ENV['DB_PASSWORD'] %> - -development: - <<: *default - database: <%= ENV['DB_NAME'] %>_development - -test: - <<: *default - database: <%= ENV['DB_NAME'] %>_test - -production: - <<: *default - database: <%= ENV['DB_NAME'] %>_production diff --git a/config/environment.rb b/config/environment.rb deleted file mode 100644 index d5abe558..00000000 --- a/config/environment.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -# Load the Rails application. -require_relative 'application' - -# Initialize the Rails application. -Rails.application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb deleted file mode 100644 index c491510f..00000000 --- a/config/environments/development.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -Rails.application.configure do - # Settings specified here will take precedence over those in config/application.rb - - config.log_level = :info - config.eager_load = false - - # In the development environment your application's code is reloaded on - # every request. This slows down response time but is perfect for development - # since you don't have to restart the web server when you make code changes. - config.cache_classes = false - - # Show full error reports and disable caching - config.consider_all_requests_local = true - config.action_controller.perform_caching = false - - config.action_mailer.delivery_method = :file - config.action_mailer.file_settings = { - location: 'tmp/mails' - } - config.action_mailer.default_url_options = { host: 'localhost:3000' } - config.action_mailer.raise_delivery_errors = true - - # Print deprecation notices to the Rails logger - config.active_support.deprecation = :log - - config.action_mailer.preview_path = Rails.root.join('spec', 'mailers', 'previews') - - # Expands the lines which load the assets - config.assets.debug = false - config.assets.quiet = true - - # S3 file storage - config.paperclip_defaults = {} # store on local machine for dev -end diff --git a/config/environments/production.rb b/config/environments/production.rb deleted file mode 100644 index 3dea4927..00000000 --- a/config/environments/production.rb +++ /dev/null @@ -1,56 +0,0 @@ - -# frozen_string_literal: true - -Rails.application.configure do - # Settings specified here will take precedence over those in config/application.rb - - config.action_cable.allowed_request_origins = [ - 'https://metamaps.herokuapp.com', 'http://metamaps.herokuapp.com', 'https://metamaps.cc' - ] - - # log to stdout - logger = Logger.new(STDOUT) - logger.formatter = config.log_formatter - logger.level = :warn - config.logger = ActiveSupport::TaggedLogging.new(logger) - - # Code is not reloaded between requests - config.eager_load = true - config.cache_classes = true - - # Full error reports are disabled and caching is turned on - config.consider_all_requests_local = false - config.action_controller.perform_caching = true - - # Disable Rails's static asset server (Apache or nginx will already do this) - config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? - - # Don't fallback to assets pipeline if a precompiled asset is missed - config.assets.compile = false - - config.assets.js_compressor = :uglifier - - config.action_mailer.delivery_method = :smtp - config.action_mailer.smtp_settings = { - address: ENV['SMTP_SERVER'], - port: ENV['SMTP_PORT'], - user_name: ENV['SMTP_USERNAME'], - password: ENV['SMTP_PASSWORD'], - authentication: 'plain', - enable_starttls_auto: true, - openssl_verify_mode: 'none' - } - config.action_mailer.default_url_options = { host: ENV['MAILER_DEFAULT_URL'] } - # Don't care if the mailer can't send - config.action_mailer.raise_delivery_errors = true - - # Generate digests for assets URLs - config.assets.digest = true - - # Enable locale fallbacks for I18n (makes lookups for any locale fall back to - # the I18n.default_locale when a translation can not be found) - config.i18n.fallbacks = true - - # Send deprecation notices to registered listeners - config.active_support.deprecation = :notify -end diff --git a/config/environments/test.rb b/config/environments/test.rb deleted file mode 100644 index 4c7426b7..00000000 --- a/config/environments/test.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -Metamaps::Application.configure do - # Settings specified here will take precedence over those in config/application.rb - - config.eager_load = false - - # The test environment is used exclusively to run your application's - # test suite. You never need to work with it otherwise. Remember that - # your test database is "scratch space" for the test suite and is wiped - # and recreated between test runs. Don't rely on the data there! - config.cache_classes = true - - # Configure static asset server for tests with Cache-Control for performance - config.public_file_server.enabled = true - config.public_file_server.headers = { - 'Cache-Control' => 'public, max-age=3600' - } - - # Show full error reports and disable caching - config.consider_all_requests_local = true - config.action_controller.perform_caching = false - - # Raise exceptions instead of rendering exception templates - config.action_dispatch.show_exceptions = false - - # Disable request forgery protection in test environment - config.action_controller.allow_forgery_protection = false - - # Tell Action Mailer not to deliver emails to the real world. - # The :test delivery method accumulates sent emails in the - # ActionMailer::Base.deliveries array. - config.action_mailer.delivery_method = :test - config.action_mailer.default_url_options = { host: 'localhost:3000' } - - # Print deprecation notices to the stderr - config.active_support.deprecation = :stderr - - # assets config - config.assets.compile = true - config.assets.compress = false - config.assets.debug = false - config.assets.digest = false -end diff --git a/config/initializers/access_codes.rb b/config/initializers/access_codes.rb deleted file mode 100644 index c735b13a..00000000 --- a/config/initializers/access_codes.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -$codes = [] -if ActiveRecord::Base.connection.data_source_exists? 'users' - $codes = ActiveRecord::Base.connection - .execute('SELECT code FROM users') - .map { |user| user['code'] } -end diff --git a/config/initializers/active_model_serializers.rb b/config/initializers/active_model_serializers.rb deleted file mode 100644 index 84e882e4..00000000 --- a/config/initializers/active_model_serializers.rb +++ /dev/null @@ -1,3 +0,0 @@ -# frozen_string_literal: true - -ActiveModelSerializers.config.adapter = :json diff --git a/config/initializers/application_controller_renderer.rb b/config/initializers/application_controller_renderer.rb deleted file mode 100644 index 315ac48a..00000000 --- a/config/initializers/application_controller_renderer.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true -# Be sure to restart your server when you modify this file. - -# ApplicationController.renderer.defaults.merge!( -# http_host: 'example.org', -# https: false -# ) diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb deleted file mode 100644 index 83195397..00000000 --- a/config/initializers/assets.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -Rails.application.configure do - # Version of your assets, change this if you want to expire all your assets. - config.assets.version = '2.0' - config.assets.quiet = true - - # Add additional assets to the asset load path - # Rails.application.config.assets.paths << Emoji.images_path - - # Precompile additional assets. - # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. - config.assets.precompile += %w[application-secret.css application-secret.js webpacked/metamaps.bundle.js] -end diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb deleted file mode 100644 index 5b98aef4..00000000 --- a/config/initializers/backtrace_silencers.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true -# Be sure to restart your server when you modify this file. - -# You can add backtrace silencers for libraries that you're using but don't -# wish to see in your backtraces. -# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } - -# You can also remove all the silencers if you're trying to debug a problem -# that might stem from framework code. -# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb deleted file mode 100644 index 046c7487..00000000 --- a/config/initializers/cookies_serializer.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -# Be sure to restart your server when you modify this file. - -# Specify a serializer for the signed and encrypted cookie jars. -# Valid options are :json, :marshal, and :hybrid. -Rails.application.config.action_dispatch.cookies_serializer = :hybrid diff --git a/config/initializers/cors.rb b/config/initializers/cors.rb deleted file mode 100644 index 27f799d5..00000000 --- a/config/initializers/cors.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -Rails.application.config.middleware.insert_before 0, Rack::Cors do - allow do - origins '*' - resource '/api/*', - headers: :any, - methods: %i[get post put delete options head] - end -end diff --git a/config/initializers/delayed_job.rb b/config/initializers/delayed_job.rb deleted file mode 100644 index c978c537..00000000 --- a/config/initializers/delayed_job.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -module ExceptionNotifierInDelayedJob - def handle_failed_job(job, error) - super - ExceptionNotfier.notify_exception(error) - end -end - -Delayed::Worker.class_eval do - prepend ExceptionNotifierInDelayedJob -end - -Delayed::Worker.logger = Logger.new(Rails.root.join('log', 'delayed_job.log')) diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb deleted file mode 100644 index 71f72490..00000000 --- a/config/initializers/devise.rb +++ /dev/null @@ -1,256 +0,0 @@ -# frozen_string_literal: true - -# Use this hook to configure devise mailer, warden hooks and so forth. -# Many of these configuration options can be set straight in your model. -Devise.setup do |config| - # The secret key used by Devise. Devise uses this key to generate - # random tokens. Changing this key will render invalid all existing - # confirmation, reset password and unlock tokens in the database. - # Devise will use the `secret_key_base` on Rails 4+ applications as its `secret_key` - # by default. You can change it below and use your own secret key. - # config.secret_key = '4d38a819bcea6314ffccb156a8e84b1b52c51ed446d11877c973791b3cd88' + - # '449e9dbd7990cbc6e7f37d84702168ec36391467000c842ed5bed4f0b05df2b9507' - - # ==> Mailer Configuration - # Configure the e-mail address which will be shown in Devise::Mailer, - # note that it will be overwritten if you use your own mailer class with default "from" parameter. - config.mailer_sender = ENV['DEVISE_MAILER_SENDER'] - - # Configure the class responsible to send e-mails. - # config.mailer = "Devise::Mailer" - - config.secret_key = ENV['DEVISE_SECRET_KEY'] - - # ==> ORM configuration - # Load and configure the ORM. Supports :active_record (default) and - # :mongoid (bson_ext recommended) by default. Other ORMs may be - # available as additional gems. - require 'devise/orm/active_record' - - # ==> Configuration for any authentication mechanism - # Configure which keys are used when authenticating a user. The default is - # just :email. You can configure it to use [:username, :subdomain], so for - # authenticating a user, both parameters are required. Remember that those - # parameters are used only when authenticating and not when retrieving from - # session. If you need permissions, you should implement that in a before filter. - # You can also supply a hash where the value is a boolean determining whether - # or not authentication should be aborted when the value is not present. - # config.authentication_keys = [ :email ] - - # Configure parameters from the request object used for authentication. Each entry - # given should be a request method and it will automatically be passed to the - # find_for_authentication method and considered in your model lookup. For instance, - # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. - # The same considerations mentioned for authentication_keys also apply to request_keys. - # config.request_keys = [] - - # Configure which authentication keys should be case-insensitive. - # These keys will be downcased upon creating or modifying a user and when used - # to authenticate or find a user. Default is :email. - config.case_insensitive_keys = [:email] - - # Configure which authentication keys should have whitespace stripped. - # These keys will have whitespace before and after removed upon creating or - # modifying a user and when used to authenticate or find a user. Default is :email. - config.strip_whitespace_keys = [:email] - - # Tell if authentication through request.params is enabled. True by default. - # It can be set to an array that will enable params authentication only for the - # given strategies, for example, `config.params_authenticatable = [:database]` will - # enable it only for database (email + password) authentication. - # config.params_authenticatable = true - - # Tell if authentication through HTTP Basic Auth is enabled. False by default. - # It can be set to an array that will enable http authentication only for the - # given strategies, for example, `config.http_authenticatable = [:token]` will - # enable it only for token authentication. - # config.http_authenticatable = false - - # If http headers should be returned for AJAX requests. True by default. - # config.http_authenticatable_on_xhr = true - - # The realm used in Http Basic Authentication. "Application" by default. - # config.http_authentication_realm = "Application" - - # It will change confirmation, password recovery and other workflows - # to behave the same regardless if the e-mail provided was right or wrong. - # Does not affect registerable. - # config.paranoid = true - - # By default Devise will store the user in session. You can skip storage for - # :http_auth and :token_auth by adding those symbols to the array below. - # Notice that if you are skipping storage for all authentication paths, you - # may want to disable generating routes to Devise's sessions controller by - # passing :skip => :sessions to `devise_for` in your config/routes.rb - config.skip_session_storage = [:http_auth] - - # ==> Configuration for :database_authenticatable - # For bcrypt, this is the cost for hashing the password and defaults to 10. If - # using other encryptors, it sets how many times you want the password re-encrypted. - # - # Limiting the stretches to just one in testing will increase the performance of - # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use - # a value less than 10 in other environments. - config.stretches = Rails.env.test? ? 1 : 10 - - # Setup a pepper to generate the encrypted password. - # config.pepper = "640ad415cb5292ac9ddbfa6ad7d9653d1537f1184e4037c2453db3eccb98e1c82" + - # "facc6d3de7bf9d4c41d9967d41194c6e120f36f430e195ba840cd00e02dea59" - - # ==> Configuration for :confirmable - # A period that the user is allowed to access the website even without - # confirming his account. For instance, if set to 2.days, the user will be - # able to access the website for two days without confirming his account, - # access will be blocked just in the third day. Default is 0.days, meaning - # the user cannot access the website without confirming his account. - # config.allow_unconfirmed_access_for = 2.days - - # A period that the user is allowed to confirm their account before their - # token becomes invalid. For example, if set to 3.days, the user can confirm - # their account within 3 days after the mail was sent, but on the fourth day - # their account can't be confirmed with the token any more. - # Default is nil, meaning there is no restriction on how long a user can take - # before confirming their account. - # config.confirm_within = 3.days - - # If true, requires any email changes to be confirmed (exactly the same way as - # initial account confirmation) to be applied. Requires additional unconfirmed_email - # db field (see migrations). Until confirmed new email is stored in - # unconfirmed email column, and copied to email column on successful confirmation. - config.reconfirmable = true - - # Defines which key will be used when confirming an account - # config.confirmation_keys = [ :email ] - - # ==> Configuration for :rememberable - # The time the user will be remembered without asking for credentials again. - config.remember_for = 2.weeks - - # Invalidates all the remember me tokens when the user signs out. - config.expire_all_remember_me_on_sign_out = true - - # If true, extends the user's remember period when remembered via cookie. - # config.extend_remember_period = false - - # Options to be passed to the created cookie. For instance, you can set - # :secure => true in order to force SSL only cookies. - # config.rememberable_options = {} - - # ==> Configuration for :validatable - # Range for password length. Default is 8..128. - config.password_length = 8..128 - - # Email regex used to validate email formats. It simply asserts that - # an one (and only one) @ exists in the given string. This is mainly - # to give user feedback and not to assert the e-mail validity. - # config.email_regexp = /\A[^@]+@[^@]+\z/ - - # ==> Configuration for :timeoutable - # The time you want to timeout the user session without activity. After this - # time the user will be asked for credentials again. Default is 30 minutes. - # config.timeout_in = 30.minutes - - # ==> Configuration for :lockable - # Defines which strategy will be used to lock an account. - # :failed_attempts = Locks an account after a number of failed attempts to sign in. - # :none = No lock strategy. You should handle locking by yourself. - # config.lock_strategy = :failed_attempts - - # Defines which key will be used when locking and unlocking an account - # config.unlock_keys = [:email] - - # Defines which strategy will be used to unlock an account. - # :email = Sends an unlock link to the user email - # :time = Re-enables login after a certain amount of time (see :unlock_in below) - # :both = Enables both strategies - # :none = No unlock strategy. You should handle unlocking by yourself. - # config.unlock_strategy = :both - - # Number of authentication tries before locking an account if lock_strategy - # is failed attempts. - # config.maximum_attempts = 20 - - # Time interval to unlock the account if :time is enabled as unlock_strategy. - # config.unlock_in = 1.hour - - # Warn on the last attempt before the account is locked. - # config.last_attempt_warning = true - - # ==> Configuration for :recoverable - # - # Defines which key will be used when recovering the password for an account - # config.reset_password_keys = [:email] - - # Time interval you can reset your password with a reset password key. - # Don't put a too small interval or your users won't have the time to - # change their passwords. - config.reset_password_within = 24.hours - - # When set to false, does not sign a user in automatically after their password is - # reset. Defaults to true, so a user is signed in automatically after a reset. - # config.sign_in_after_reset_password = true - - # ==> Configuration for :encryptable - # Allow you to use another encryption algorithm besides bcrypt (default). You can use - # :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1, - # :authlogic_sha512 (then you should set stretches above to 20 for default behavior) - # and :restful_authentication_sha1 (then you should set stretches to 10, and copy - # REST_AUTH_SITE_KEY to pepper) - # config.encryptor = :sha512 - - # ==> Scopes configuration - # Turn scoped views on. Before rendering "sessions/new", it will first check for - # "users/sessions/new". It's turned off by default because it's slower if you - # are using only default views. - config.scoped_views = true - - # Configure the default scope given to Warden. By default it's the first - # devise role declared in your routes (usually :user). - # config.default_scope = :user - - # Set this configuration to false if you want /users/sign_out to sign out - # only the current scope. By default, Devise signs out all scopes. - # config.sign_out_all_scopes = true - - # ==> Navigation configuration - # Lists the formats that should be treated as navigational. Formats like - # :html, should redirect to the sign in page when the user does not have - # access, but formats like :xml or :json, should return 401. - # - # If you have any extra navigational formats, like :iphone or :mobile, you - # should add them to the navigational formats lists. - # - # The "*/*" below is required to match Internet Explorer requests. - # config.navigational_formats = ["*/*", :html] - - # The default HTTP method used to sign out a resource. Default is :delete. - config.sign_out_via = :delete - - # ==> OmniAuth - # Add a new OmniAuth provider. Check the wiki for more information on setting - # up on your models and hooks. - # config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo' - - # ==> Warden configuration - # If you want to use other strategies, that are not supported by Devise, or - # change the failure app, you can configure them inside the config.warden block. - # - # config.warden do |manager| - # manager.intercept_401 = false - # manager.default_strategies(:scope => :user).unshift :some_external_strategy - # end - - # ==> Mountable engine configurations - # When using Devise inside an engine, let's call it `MyEngine`, and this engine - # is mountable, there are some extra configurations to be taken into account. - # The following options are available, assuming the engine is mounted as: - # - # mount MyEngine, at: '/my_engine' - # - # The router that invoked `devise_for`, in the example above, would be: - # config.router_name = :my_engine - # - # When using OmniAuth, Devise cannot automatically set OmniAuth path, - # so you need to do it manually. For the users scope, it would be: - # config.omniauth_path_prefix = '/my_engine/users/auth' -end diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb deleted file mode 100644 index 3182dd03..00000000 --- a/config/initializers/doorkeeper.rb +++ /dev/null @@ -1,121 +0,0 @@ -# frozen_string_literal: true - -Doorkeeper.configure do - # Change the ORM that doorkeeper will use (needs plugins) - orm :active_record - - # This block will be called to check whether the resource owner is authenticated or not. - resource_owner_authenticator do - if current_user - current_user - else - store_location_for(User, request.fullpath) - redirect_to(sign_in_url, notice: 'Sign In to Connect') - end - end - - # If you want to restrict access to the web interface for adding oauth authorized applications, - # you need to declare the block below. - admin_authenticator do - if current_user&.admin - current_user - elsif current_user && !current_user.admin - redirect_to(root_url, notice: 'Unauthorized') - else - store_location_for(User, request.fullpath) - redirect_to(sign_in_url, notice: 'Try signing in to do that') - end - end - - # Authorization Code expiration time (default 10 minutes). - # authorization_code_expires_in 10.minutes - - # Access token expiration time (default 2 hours). - # If you want to disable expiration, set this to nil. - access_token_expires_in nil - - # Assign a custom TTL for implicit grants. - # custom_access_token_expires_in do |oauth_client| - # oauth_client.application.additional_settings.implicit_oauth_expiration - # end - - # Use a custom class for generating the access token. - # https://github.com/doorkeeper-gem/doorkeeper#custom-access-token-generator - # access_token_generator "::Doorkeeper::JWT" - - # Reuse access token for the same resource owner within an application (disabled by default) - # Rationale: https://github.com/doorkeeper-gem/doorkeeper/issues/383 - # reuse_access_token - - # Issue access tokens with refresh token (disabled by default) - # use_refresh_token - - # Provide support for an owner to be assigned to each registered application (disabled by default) - # Optional parameter :confirmation => true (default false) if you want to enforce ownership of - # a registered application - # Note: you must also run the rails g doorkeeper:application_owner generator to provide the - # necessary support - # - # enable_application_owner :confirmation => false - - # Define access token scopes for your provider - # For more information go to - # https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Scopes - # default_scopes :public - # optional_scopes :write, :update - - # Change the way client credentials are retrieved from the request object. - # By default it retrieves first from the `HTTP_AUTHORIZATION` header, then - # falls back to the `:client_id` and `:client_secret` params from the `params` object. - # Check out the wiki for more information on customization - # client_credentials :from_basic, :from_params - - # Change the way access token is authenticated from the request object. - # By default it retrieves first from the `HTTP_AUTHORIZATION` header, then - # falls back to the `:access_token` or `:bearer_token` params from the `params` object. - # Check out the wiki for more information on customization - # access_token_methods :from_bearer_authorization, :from_access_token_param, :from_bearer_param - - # Change the native redirect uri for client apps - # When clients register with the following redirect uri, they won't be redirected to any server - # and the authorization code will be displayed within the provider - # The value can be any string. Use nil to disable this feature. When disabled, clients - # must provide a valid URL (Similar behaviour: - # https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi) - # - # native_redirect_uri 'urn:ietf:wg:oauth:2.0:oob' - - # Forces the usage of the HTTPS protocol in non-native redirect uris (enabled - # by default in non-development environments). OAuth2 delegates security in - # communication to the HTTPS protocol so it is wise to keep this enabled. - # - # force_ssl_in_redirect_uri !Rails.env.development? - - # Specify what grant flows are enabled in array of Strings. The valid - # strings and the flows they enable are: - # - # "authorization_code" => Authorization Code Grant Flow - # "implicit" => Implicit Grant Flow - # "password" => Resource Owner Password Credentials Grant Flow - # "client_credentials" => Client Credentials Grant Flow - # - # If not specified, Doorkeeper enables authorization_code and - # client_credentials. - # - # implicit and password grant flows have risks that you should understand - # before enabling: - # http://tools.ietf.org/html/rfc6819#section-4.4.2 - # http://tools.ietf.org/html/rfc6819#section-4.4.3 - # - # grant_flows %w(authorization_code client_credentials) - - # Under some circumstances you might want to have applications auto-approved, - # so that the user skips the authorization step. - # For example if dealing with a trusted application. - # skip_authorization do |resource_owner, client| - # client.superapp? or resource_owner.admin? - # end - - # WWW-Authenticate Realm (default "Doorkeeper"). - # realm "Doorkeeper" -end diff --git a/config/initializers/exception_notification.rb b/config/initializers/exception_notification.rb deleted file mode 100644 index 421974be..00000000 --- a/config/initializers/exception_notification.rb +++ /dev/null @@ -1,84 +0,0 @@ -# frozen_string_literal: true - -require 'exception_notification/rails' - -module ExceptionNotifier - class MetamapsNotifier < SlackNotifier - def call(exception, options = {}) - # trick original notifier to "ping" self, storing the result - # in @message_opts and then modifying the result - @old_notifier = @notifier - @notifier = self - super - @notifier = @old_notifier - - @message_opts[:attachments][0][:fields] = new_fields(exception, options[:env]) - @message_opts[:attachments][0][:text] = new_text(exception, options[:env]) - - @notifier.ping '', @message_opts - end - - def ping(message, message_opts) - @message = message - @message_opts = message_opts - end - - private - - def new_fields(exception, env) - new_fields = [] - - backtrace = exception.backtrace.reject { |line| line =~ %r{/(vendor/bundle|vendor_ruby)/} } - backtrace = backtrace[0..3] if backtrace.length > 4 - backtrace = "```\n#{backtrace.join("\n")}\n```" - new_fields << { title: 'Backtrace', value: backtrace } - - user = env.dig('exception_notifier.exception_data', :current_user) - new_fields << { title: 'Current User', value: "`#{user.name} <#{user.email}>`" } - - new_fields - end - - def new_text(exception, _env) - text = @message_opts[:attachments][0][:text].chomp - text += ': ' + exception.message + "\n" - text - end - end -end - -ExceptionNotification.configure do |config| - # Ignore additional exception types. - # ActiveRecord::RecordNotFound, AbstractController::ActionNotFound and - # ActionController::RoutingError are already added. - config.ignored_exceptions += %w[ - ActionView::TemplateError CustomError UnauthorizedException - InvalidArgumentException InvalidEntityException InvalidRequestException - NotFoundException ValidationException - ] - - # Adds a condition to decide when an exception must be ignored or not. - # The ignore_if method can be invoked multiple times to add extra conditions. - config.ignore_if do |_exception, _options| - !Rails.env.production? - end - - # Notifiers ###### - - if ENV['SLACK_EN_WEBHOOK_URL'] - config.add_notifier :metamaps, webhook_url: ENV['SLACK_EN_WEBHOOK_URL'] - end - - # Email notifier sends notifications by email. - # config.add_notifier :email, { - # :email_prefix => "[ERROR] ", - # :sender_address => %{"Notifier" }, - # :exception_recipients => %w{exceptions@example.com} - # } - - # Webhook notifier sends notifications over HTTP protocol. Requires 'httparty' gem. - # config.add_notifier :webhook, { - # :url => 'http://example.com:5555/hubot/path', - # :http_method => :post - # } -end diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb deleted file mode 100644 index 7a4f47b4..00000000 --- a/config/initializers/filter_parameter_logging.rb +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true - -# Be sure to restart your server when you modify this file. - -# Configure sensitive parameters which will be filtered from the log file. -Rails.application.config.filter_parameters += [:password] diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb deleted file mode 100644 index aa7435fb..00000000 --- a/config/initializers/inflections.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true -# Be sure to restart your server when you modify this file. - -# Add new inflection rules using the following format. Inflections -# are locale specific, and you may define rules for as many different -# locales as you wish. All of these examples are active by default: -# ActiveSupport::Inflector.inflections(:en) do |inflect| -# inflect.plural /^(ox)$/i, '\1en' -# inflect.singular /^(ox)en/i, '\1' -# inflect.irregular 'person', 'people' -# inflect.uncountable %w( fish sheep ) -# end - -# These inflection rules are supported but not enabled by default: -# ActiveSupport::Inflector.inflections(:en) do |inflect| -# inflect.acronym 'RESTful' -# end diff --git a/config/initializers/internal_testers.rb b/config/initializers/internal_testers.rb deleted file mode 100644 index 6603bee2..00000000 --- a/config/initializers/internal_testers.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -def is_tester(user) - user && %w[ - connorturland@gmail.com devin@callysto.com chessscholar@gmail.com solaureum@gmail.com - ishanshapiro@gmail.com - ].include?(user.email) -end diff --git a/config/initializers/kaminari_config.rb b/config/initializers/kaminari_config.rb deleted file mode 100644 index fb53dfce..00000000 --- a/config/initializers/kaminari_config.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -Kaminari.configure do |config| - # config.default_per_page = 25 - # config.max_per_page = nil - # config.window = 4 - # config.outer_window = 0 - # config.left = 0 - # config.right = 0 - # config.page_method_name = :page - # config.param_name = :page -end diff --git a/config/initializers/mailboxer.rb b/config/initializers/mailboxer.rb deleted file mode 100644 index b8abd079..00000000 --- a/config/initializers/mailboxer.rb +++ /dev/null @@ -1,58 +0,0 @@ -# frozen_string_literal: true - -# notification codes to differentiate different types of notifications -# e.g. a notification might have { -# notified_object_type: 'Map', -# notified_object_id: 1, -# notification_code: MAILBOXER_CODE_ACCESS_REQUEST -# }, -# which would imply that this is an access request to Map.find(1) -MESSAGE_FROM_DEVS = 'MESSAGE_FROM_DEVS' - -# these ones are old and can't change without a migration -MAP_ACCESS_APPROVED = 'ACCESS_APPROVED' -MAP_ACCESS_REQUEST = 'ACCESS_REQUEST' -MAP_INVITE_TO_EDIT = 'INVITE_TO_EDIT' - -# these ones are new -# MAP_RECEIVED_TOPIC -# MAP_LOST_TOPIC -# MAP_TOPIC_MOVED -# MAP_RECEIVED_SYNAPSE -# MAP_LOST_SYNAPSE -# MAP_COLLABORATOR_ADDED -# MAP_UPDATED -# ADD_MAP_FORKED -# MAP_ADDED_TO_MAP -# MAP_MESSAGE -# MAP_STARRED -# MAP_COLLABORATOR_REMOVED - -TOPIC_ADDED_TO_MAP = 'TOPIC_ADDED_TO_MAP' -TOPIC_CONNECTED_1 = 'TOPIC_CONNECTED_1' -TOPIC_CONNECTED_2 = 'TOPIC_CONNECTED_2' -# TOPIC_DELETED -# TOPIC_DISCONNECTED -# TOPIC_UPDATED -# TOPIC_REMOVED_FROM_MAP - -Mailboxer.setup do |config| - # Configures if your application uses or not email sending for Notifications and Messages - config.uses_emails = true - - # Configures the default from for emails sent for Messages and Notifications - config.default_from = 'team@metamaps.cc' - - # Configures the methods needed by mailboxer - config.email_method = :mailboxer_email - config.name_method = :name - - # Configures if you use or not a search engine and which one you are using - # Supported engines: [:solr,:sphinx] - config.search_enabled = false - config.search_engine = :solr - - # Configures maximum length of the message subject and body - config.subject_max_length = 255 - config.body_max_length = 32_000 -end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb deleted file mode 100644 index 3d4dd77f..00000000 --- a/config/initializers/mime_types.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -# Be sure to restart your server when you modify this file. - -# Add new mime types for use in respond_to blocks: -# Mime::Type.register "text/richtext", :rtf - -# RDF export -Mime::Type.register 'text/turtle', :ttl diff --git a/config/initializers/new_framework_defaults.rb b/config/initializers/new_framework_defaults.rb deleted file mode 100644 index 69b31ed1..00000000 --- a/config/initializers/new_framework_defaults.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -# Be sure to restart your server when you modify this file. -# -# This file contains migration options to ease your Rails 5.0 upgrade. -# -# Read the Rails 5.0 release notes for more info on each option. - -# Enable per-form CSRF tokens. Previous versions had false. -Rails.application.config.action_controller.per_form_csrf_tokens = true - -# Enable origin-checking CSRF mitigation. Previous versions had false. -Rails.application.config.action_controller.forgery_protection_origin_check = true - -# Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`. -# Previous versions had false. -ActiveSupport.to_time_preserves_timezone = true - -# Require `belongs_to` associations by default. Previous versions had false. -Rails.application.config.active_record.belongs_to_required_by_default = true - -# Do not halt callback chains when a callback returns false. Previous versions had true. -ActiveSupport.halt_callback_chains_on_return_false = false - -# Configure SSL options to enable HSTS with subdomains. Previous versions had false. -Rails.application.config.ssl_options = { hsts: { subdomains: true } } diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb deleted file mode 100644 index 45b5e913..00000000 --- a/config/initializers/paperclip.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -Paperclip::Attachment.default_options[:url] = ':s3_domain_url' -Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename' diff --git a/config/initializers/rack_attack.rb b/config/initializers/rack_attack.rb deleted file mode 100644 index 83a978a8..00000000 --- a/config/initializers/rack_attack.rb +++ /dev/null @@ -1,64 +0,0 @@ -# frozen_string_literal: true - -module Rack - class Attack - Rack::Attack.cache.store = ActiveSupport::Cache::MemoryStore.new - - # Throttle all requests by IP (60rpm) - # - # Key: "rack::attack:#{Time.now.to_i/:period}:req/ip:#{req.ip}" - # throttle('req/ip', :limit => 300, :period => 5.minutes) do |req| - # req.ip # unless req.path.start_with?('/assets') - # end - - # Throttle POST requests to /login by IP address - # - # Key: "rack::attack:#{Time.now.to_i/:period}:logins/ip:#{req.ip}" - throttle('logins/ip', limit: 5, period: 20.seconds) do |req| - req.ip if req.path == '/login' && req.post? - end - - # Throttle POST requests to /login by email param - # - # Key: "rack::attack:#{Time.now.to_i/:period}:logins/email:#{req.email}" - # - # Note: This creates a problem where a malicious user could intentionally - # throttle logins for another user and force their login requests to be - # denied, but that's not very common and shouldn't happen to you. (Knock - # on wood!) - throttle('logins/email', limit: 5, period: 20.seconds) do |req| - if req.path == '/login' && req.post? - # return the email if present, nil otherwise - req.params['email'].presence - end - end - - throttle('load_url_title/req/5mins/ip', limit: 300, period: 5.minutes) do |req| - req.ip if req.path == 'hacks/load_url_title' - end - throttle('load_url_title/req/1s/ip', limit: 5, period: 1.second) do |req| - # If the return value is truthy, the cache key for the return value - # is incremented and compared with the limit. In this case: - # "rack::attack:#{Time.now.to_i/1.second}:load_url_title/req/ip:#{req.ip}" - # - # If falsy, the cache key is neither incremented nor checked. - - req.ip if req.path == 'hacks/load_url_title' - end - - self.throttled_response = lambda do |env| - now = Time.zone.now - match_data = env['rack.attack.match_data'] - period = match_data[:period] - limit = match_data[:limit] - - headers = { - 'X-RateLimit-Limit' => limit.to_s, - 'X-RateLimit-Remaining' => '0', - 'X-RateLimit-Reset' => (now + (period - now.to_i % period)).to_s - } - - [429, headers, ['']] - end - end -end diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb deleted file mode 100644 index 3c3b0242..00000000 --- a/config/initializers/secret_token.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -# Be sure to restart your server when you modify this file. - -# Your secret key for verifying the integrity of signed cookies. -# If you change this key, all old signed cookies will become invalid! -# Make sure the secret is at least 30 characters and all random, -# no regular words or you'll be exposed to dictionary attacks. -Rails.application.config.secret_key_base = ENV['SECRET_KEY_BASE'] diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb deleted file mode 100644 index d7bb3be0..00000000 --- a/config/initializers/session_store.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -# Be sure to restart your server when you modify this file. - -Rails.application.config.session_store :cookie_store, key: '_Metamaps_session' - -# Use the database for sessions instead of the cookie-based default, -# which shouldn't be used to store highly confidential information -# (create the session table with "rails generate session_migration") -# Rails.application.config.session_store :active_record_store diff --git a/config/initializers/version.rb b/config/initializers/version.rb deleted file mode 100644 index 26510e0b..00000000 --- a/config/initializers/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -METAMAPS_VERSION = '3..6.1' -METAMAPS_BUILD = `git log -1 --pretty=%H`.chomp[0..11].freeze -METAMAPS_LAST_UPDATED = `git log -1 --pretty='%ad'`.split(' ').values_at(1, 2, 4).join(' ').freeze diff --git a/config/initializers/warden_hooks.rb b/config/initializers/warden_hooks.rb deleted file mode 100644 index 3b212513..00000000 --- a/config/initializers/warden_hooks.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -Warden::Manager.after_set_user do |user, auth, opts| - scope = opts[:scope] - auth.cookies.signed["#{scope}.id"] = user.id - auth.cookies.signed["#{scope}.expires_at"] = 30.minutes.from_now -end -Warden::Manager.before_logout do |_user, auth, opts| - scope = opts[:scope] - auth.cookies.signed["#{scope}.id"] = nil - auth.cookies.signed["#{scope}.expires_at"] = nil -end diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb deleted file mode 100644 index 1dbadf48..00000000 --- a/config/initializers/wrap_parameters.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -# Be sure to restart your server when you modify this file. -# -# This file contains settings for ActionController::ParamsWrapper which -# is enabled by default. - -# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. -ActiveSupport.on_load(:action_controller) do - wrap_parameters format: [:json] -end - -# To enable root element in JSON for ActiveRecord objects. -# ActiveSupport.on_load(:active_record) do -# self.include_root_in_json = true -# end diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml deleted file mode 100644 index 26a10f29..00000000 --- a/config/locales/devise.en.yml +++ /dev/null @@ -1,60 +0,0 @@ -# Additional translations at https://github.com/plataformatec/devise/wiki/I18n - -en: - devise: - confirmations: - confirmed: "Your email address has been successfully confirmed." - send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes." - send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes." - failure: - already_authenticated: "You are already signed in." - inactive: "Your account is not activated yet." - invalid: "Invalid %{authentication_keys} or password." - locked: "Your account is locked." - last_attempt: "You have one more attempt before your account is locked." - not_found_in_database: "Invalid %{authentication_keys} or password." - timeout: "Your session expired. Please sign in again to continue." - unauthenticated: "You need to sign in or sign up before continuing." - unconfirmed: "You have to confirm your email address before continuing." - mailer: - confirmation_instructions: - subject: "Confirmation instructions" - reset_password_instructions: - subject: "Reset password instructions" - unlock_instructions: - subject: "Unlock instructions" - omniauth_callbacks: - failure: "Could not authenticate you from %{kind} because \"%{reason}\"." - success: "Successfully authenticated from %{kind} account." - passwords: - no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." - send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes." - send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." - updated: "Your password has been changed successfully. You are now signed in." - updated_not_active: "Your password has been changed successfully." - registrations: - destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon." - signed_up: "Welcome! You have signed up successfully." - signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." - signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." - signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." - update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address." - updated: "Your account has been updated successfully." - sessions: - signed_in: "Signed in successfully." - signed_out: "Signed out successfully." - already_signed_out: "Signed out successfully." - unlocks: - send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes." - send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes." - unlocked: "Your account has been unlocked successfully. Please sign in to continue." - errors: - messages: - already_confirmed: "was already confirmed, please try signing in" - confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" - expired: "has expired, please request a new one" - not_found: "not found" - not_locked: "was not locked" - not_saved: - one: "1 error prohibited this %{resource} from being saved:" - other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/config/locales/doorkeeper.en.yml b/config/locales/doorkeeper.en.yml deleted file mode 100644 index ad83dc78..00000000 --- a/config/locales/doorkeeper.en.yml +++ /dev/null @@ -1,122 +0,0 @@ -en: - activerecord: - attributes: - doorkeeper/application: - name: 'Name' - redirect_uri: 'Redirect URIs' - errors: - models: - doorkeeper/application: - attributes: - redirect_uri: - fragment_present: 'cannot contain a fragment.' - invalid_uri: 'must be a valid URI.' - relative_uri: 'must be an absolute URI.' - secured_uri: 'must be an HTTPS/SSL URI.' - - doorkeeper: - applications: - confirmations: - destroy: 'Are you sure?' - buttons: - back: 'Back' - edit: 'Edit' - destroy: 'remove' - submit: 'Submit' - cancel: 'Cancel' - authorize: 'Authorize' - form: - error: 'Whoops! Check your form for possible errors' - help: - redirect_uri: 'Use one line per URI' - native_redirect_uri: 'Use %{native_redirect_uri} for local tests' - scopes: 'Separate scopes with spaces. Leave blank to use the default scopes.' - edit: - title: 'Edit application' - index: - title: 'Registered Apps' - new: 'New App' - name: 'Name' - callback_url: 'Redirect URIs' - new: - title: 'New App' - show: - title: '%{name}' - application_id: 'App ID' - secret: 'App Secret' - callback_urls: 'Redirect URIs' - - authorizations: - buttons: - authorize: 'Authorize' - deny: 'Deny' - error: - title: 'Invalid Authorization Request' - new: - title: 'Authorization required' - prompt: 'Authorize %{client_name} to use your account?' - able_to: 'This application will be able to' - show: - title: 'Authorization code' - - authorized_applications: - confirmations: - revoke: 'Are you sure?' - buttons: - revoke: 'Revoke' - index: - title: 'Authorized Apps' - application: 'App' - created_at: 'Date Authorized' - date_format: '%Y-%m-%d' - - errors: - messages: - # Common error messages - invalid_request: 'The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.' - invalid_redirect_uri: 'The redirect uri included is not valid.' - unauthorized_client: 'The client is not authorized to perform this request using this method.' - access_denied: 'The resource owner or authorization server denied the request.' - invalid_scope: 'The requested scope is invalid, unknown, or malformed.' - server_error: 'The authorization server encountered an unexpected condition which prevented it from fulfilling the request.' - temporarily_unavailable: 'The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server.' - - #configuration error messages - credential_flow_not_configured: 'Resource Owner Password Credentials flow failed due to Doorkeeper.configure.resource_owner_from_credentials being unconfigured.' - resource_owner_authenticator_not_configured: 'Resource Owner find failed due to Doorkeeper.configure.resource_owner_authenticator being unconfiged.' - - # Access grant errors - unsupported_response_type: 'The authorization server does not support this response type.' - - # Access token errors - invalid_client: 'Client authentication failed due to unknown client, no client authentication included, or unsupported authentication method.' - invalid_grant: 'The provided authorization grant is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.' - unsupported_grant_type: 'The authorization grant type is not supported by the authorization server.' - - # Password Access token errors - invalid_resource_owner: 'The provided resource owner credentials are not valid, or resource owner cannot be found' - - invalid_token: - revoked: "The access token was revoked" - expired: "The access token expired" - unknown: "The access token is invalid" - - flash: - applications: - create: - notice: 'Application created.' - destroy: - notice: 'Application deleted.' - update: - notice: 'Application updated.' - authorized_applications: - destroy: - notice: 'Application revoked.' - - layouts: - admin: - nav: - app: 'METAMAPS' - applications: 'Applications' - application: - title: 'OAuth authorization required' diff --git a/config/locales/en.yml b/config/locales/en.yml deleted file mode 100644 index c4ada107..00000000 --- a/config/locales/en.yml +++ /dev/null @@ -1,4 +0,0 @@ -en: - mailboxer: - notification_mailer: - subject: "%{subject}" diff --git a/config/puma.rb b/config/puma.rb deleted file mode 100644 index 03a28243..00000000 --- a/config/puma.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -# Puma can serve each request in a thread from an internal thread pool. -# The `threads` method setting takes two numbers a minimum and maximum. -# Any libraries that use thread pools should be configured to match -# the maximum value specified for Puma. Default is set to 5 threads for minimum -# and maximum, this matches the default thread size of Active Record. -# -threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }.to_i -threads threads_count, threads_count - -# Specifies the `port` that Puma will listen on to receive requests, default is 3000. -# -port ENV.fetch('PORT') { 3000 } - -# Specifies the `environment` that Puma will run in. -# -environment ENV.fetch('RAILS_ENV') { 'development' } - -# Specifies the number of `workers` to boot in clustered mode. -# Workers are forked webserver processes. If using threads and workers together -# the concurrency of the application would be max `threads` * `workers`. -# Workers do not work on JRuby or Windows (both of which do not support -# processes). -# -# workers ENV.fetch("WEB_CONCURRENCY") { 2 } - -# Use the `preload_app!` method when specifying a `workers` number. -# This directive tells Puma to first boot the application and load code -# before forking the application. This takes advantage of Copy On Write -# process behavior so workers use less memory. If you use this option -# you need to make sure to reconnect any threads in the `on_worker_boot` -# block. -# -# preload_app! - -# The code in the `on_worker_boot` will be called if you are using -# clustered mode by specifying a number of `workers`. After each worker -# process is booted this block will be run, if you are using `preload_app!` -# option you will want to use this block to reconnect to any threads -# or connections that may have been created at application boot, Ruby -# cannot share connections between processes. -# -# on_worker_boot do -# ActiveRecord::Base.establish_connection if defined?(ActiveRecord) -# end - -# Allow puma to be restarted by `rails restart` command. -plugin :tmp_restart diff --git a/config/routes.rb b/config/routes.rb deleted file mode 100644 index eba0d5e1..00000000 --- a/config/routes.rb +++ /dev/null @@ -1,149 +0,0 @@ -# frozen_string_literal: true - -Metamaps::Application.routes.draw do - use_doorkeeper - mount ActionCable.server => '/cable' - - root to: 'main#home', via: :get - get 'request', to: 'main#requestinvite', as: :request - - namespace :explore do - get 'active' - get 'featured' - get 'mine' - get 'shared' - get 'starred' - get 'mapper/:id', action: 'mapper' - end - get :explore, to: redirect('/') - - resources :maps, except: %i[index edit] do - member do - get :conversation - get :export - post 'events/:event', action: :events - get :contains - - get :request_access, - to: 'access#request_access' - get 'approve_access/:request_id', - to: 'access#approve_access', - as: :approve_access - get 'deny_access/:request_id', - to: 'access#deny_access', - as: :deny_access - - post :access_request, - to: 'access#access_request', - default: { format: :json } - post 'approve_access/:request_id', - to: 'access#approve_access_post', - as: :approve_access_post, - default: { format: :json } - post 'deny_access/:request_id', - to: 'access#deny_access_post', - as: :deny_access_post, - default: { format: :json } - - post :access, to: 'access#access', default: { format: :json } - - post :star, to: 'stars#create', default: { format: :json } - post :unstar, to: 'stars#destroy', default: { format: :json } - post :follow, default: { format: :json } - post :unfollow, default: { format: :json } - get :unfollow_from_email - end - end - - resources :mappings, except: %i[index new edit] - - resources :messages, only: %i[show create update destroy] - resources :notifications, only: %i[index show] do - collection do - get :unsubscribe - end - member do - put :mark_read - put :mark_unread - end - end - - resources :metacode_sets, except: [:show] - - resources :metacodes, except: [:destroy] - get 'metacodes/:name', to: 'metacodes#show' - - namespace :search do - get :topics - get :maps - get :mappers - get :synapses - end - - resources :synapses, except: %i[index new edit] - - resources :topics, except: %i[index new edit] do - member do - get :network - get :relative_numbers - get :relatives - post :follow, default: { format: :json } - post :unfollow, default: { format: :json } - get :unfollow_from_email - end - collection do - get :autocomplete_topic - end - end - - resources :tokens, only: [:new] - - devise_for :users, skip: :sessions, controllers: { - registrations: 'users/registrations', - passwords: 'users/passwords', - sessions: 'users/sessions' - } - - devise_scope :user do - get 'login' => 'users/sessions#new', :as => :sign_in - post 'login' => 'users/sessions#create', :as => :user_session - get 'logout' => 'users/sessions#destroy', :as => :destroy_user_session - get 'join' => 'users/registrations#new', :as => :sign_up - end - - resources :users, except: %i[index destroy] do - member do - get :details - end - end - post 'user/updatemetacodes', to: 'users#updatemetacodes', as: :updatemetacodes - post 'user/update_metacode_focus', to: 'users#update_metacode_focus' - - namespace :api, path: '/api', default: { format: :json } do - namespace :v2, path: '/v2' do - resources :metacodes, only: %i[index show] - resources :mappings, only: %i[index create show update destroy] - resources :maps, only: %i[index create show update destroy] do - post :stars, to: 'stars#create', on: :member - delete :stars, to: 'stars#destroy', on: :member - end - resources :synapses, only: %i[index create show update destroy] - resources :tokens, only: %i[index create destroy] - resources :topics, only: %i[index create show update destroy] - resources :users, only: %i[index show] do - get :current, on: :collection - end - match '*path', to: 'restful#catch_404', via: :all - end - namespace :v1, path: '/v1' do - root to: 'deprecated#deprecated', via: :all - match '*path', to: 'deprecated#deprecated', via: :all - end - match '*path', to: 'v2/restful#catch_404', via: :all - end - - namespace :hacks do - get 'load_url_title' - end -end -# rubocop:enable Rubocop/Metrics/BlockLength diff --git a/config/spring.rb b/config/spring.rb deleted file mode 100644 index ed3449f1..00000000 --- a/config/spring.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -%w[ - .ruby-version - .ruby-gemset - .rbenv-vars - tmp/restart.txt - tmp/caching-dev.txt -].each { |path| Spring.watch(path) } diff --git a/db/migrate/20140517115027_create_metacode_sets.rb b/db/migrate/20140517115027_create_metacode_sets.rb deleted file mode 100644 index cf7d1994..00000000 --- a/db/migrate/20140517115027_create_metacode_sets.rb +++ /dev/null @@ -1,13 +0,0 @@ -class CreateMetacodeSets < ActiveRecord::Migration - def change - create_table :metacode_sets do |t| - t.string :name - t.text :desc - t.references :user - t.boolean :mapperContributed - - t.timestamps - end - add_index :metacode_sets, :user_id - end -end diff --git a/db/migrate/20140517115841_create_in_metacode_sets.rb b/db/migrate/20140517115841_create_in_metacode_sets.rb deleted file mode 100644 index 2933cfa4..00000000 --- a/db/migrate/20140517115841_create_in_metacode_sets.rb +++ /dev/null @@ -1,12 +0,0 @@ -class CreateInMetacodeSets < ActiveRecord::Migration - def change - create_table :in_metacode_sets do |t| - t.references :metacode - t.references :metacode_set - - t.timestamps - end - add_index :in_metacode_sets, :metacode_id - add_index :in_metacode_sets, :metacode_set_id - end -end diff --git a/db/migrate/20140625212637_add_image_and_audio_to_topics.rb b/db/migrate/20140625212637_add_image_and_audio_to_topics.rb deleted file mode 100644 index 46bead64..00000000 --- a/db/migrate/20140625212637_add_image_and_audio_to_topics.rb +++ /dev/null @@ -1,11 +0,0 @@ -class AddImageAndAudioToTopics < ActiveRecord::Migration - def self.up - add_attachment :topics, :image - add_attachment :topics, :audio - end - - def self.down - remove_attachment :topics, :image - remove_attachment :topics, :audio - end -end diff --git a/db/migrate/20140707161810_add_image_to_users.rb b/db/migrate/20140707161810_add_image_to_users.rb deleted file mode 100644 index 0a479fda..00000000 --- a/db/migrate/20140707161810_add_image_to_users.rb +++ /dev/null @@ -1,9 +0,0 @@ -class AddImageToUsers < ActiveRecord::Migration - def self.up - add_attachment :users, :image - end - - def self.down - remove_attachment :users, :image - end -end diff --git a/db/migrate/20140815162253_add_screenshot_to_maps.rb b/db/migrate/20140815162253_add_screenshot_to_maps.rb deleted file mode 100644 index c42cca51..00000000 --- a/db/migrate/20140815162253_add_screenshot_to_maps.rb +++ /dev/null @@ -1,9 +0,0 @@ -class AddScreenshotToMaps < ActiveRecord::Migration - def self.up - add_attachment :maps, :screenshot - end - - def self.down - remove_attachment :maps, :screenshot - end -end diff --git a/db/migrate/20140930013020_add_color_to_metacodes.rb b/db/migrate/20140930013020_add_color_to_metacodes.rb deleted file mode 100644 index 59c8f89f..00000000 --- a/db/migrate/20140930013020_add_color_to_metacodes.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddColorToMetacodes < ActiveRecord::Migration - def change - add_column :metacodes, :color, :string - end -end diff --git a/db/migrate/20141121204712_add_generation_to_users.rb b/db/migrate/20141121204712_add_generation_to_users.rb deleted file mode 100644 index 777bbd66..00000000 --- a/db/migrate/20141121204712_add_generation_to_users.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddGenerationToUsers < ActiveRecord::Migration - def change - add_column :users, :generation, :integer - end -end diff --git a/db/migrate/20151001024122_mapping_polymorphism.rb b/db/migrate/20151001024122_mapping_polymorphism.rb deleted file mode 100644 index 7e3ae76b..00000000 --- a/db/migrate/20151001024122_mapping_polymorphism.rb +++ /dev/null @@ -1,36 +0,0 @@ -class MappingPolymorphism < ActiveRecord::Migration - def up - add_column :mappings, :mappable_id, :integer - add_column :mappings, :mappable_type, :string - add_index :mappings, [:mappable_id, :mappable_type] - - Mapping.find_each do |mapping| - if mapping.synapse_id.nil? && mapping.topic_id.nil? - puts "Mapping id=#{mapping.id} has no valid id, skipping!" - next - end - if !mapping.synapse_id.nil? && !mapping.topic_id.nil? - puts "Mapping id=#{mapping.id} has both topic and synapse ids, skipping!" - next - end - - if mapping.synapse_id.nil? - mapping.mappable = Topic.find_by(id: mapping.topic_id) - else - mapping.mappable = Synapse.find_by(id: mapping.synapse_id) - end - - if mapping.mappable.nil? - mapping.delete - else - mapping.save - end - end - end - - def down - remove_index :mappings, [:mappable_id, :mappable_type] - remove_column :mappings, :mappable_id, :integer - remove_column :mappings, :mappable_type, :string - end -end diff --git a/db/migrate/20151023143719_add_missing_indexes.rb b/db/migrate/20151023143719_add_missing_indexes.rb deleted file mode 100644 index 551f2319..00000000 --- a/db/migrate/20151023143719_add_missing_indexes.rb +++ /dev/null @@ -1,16 +0,0 @@ -class AddMissingIndexes < ActiveRecord::Migration - def change - add_index :topics, :user_id - add_index :topics, :metacode_id - add_index :synapses, [:node2_id, :node2_id] - add_index :synapses, [:node1_id, :node1_id] - add_index :synapses, :user_id - add_index :synapses, :node1_id - add_index :synapses, :node2_id - add_index :mappings, [:map_id, :topic_id] - add_index :mappings, [:map_id, :synapse_id] - add_index :mappings, :map_id - add_index :mappings, :user_id - add_index :maps, :user_id - end -end diff --git a/db/migrate/20151205205831_messages.rb b/db/migrate/20151205205831_messages.rb deleted file mode 100644 index f12e14db..00000000 --- a/db/migrate/20151205205831_messages.rb +++ /dev/null @@ -1,15 +0,0 @@ -class Messages < ActiveRecord::Migration - def change - create_table :messages do |t| - t.text :message - t.references :user - t.integer :resource_id - t.string :resource_type - - t.timestamps - end - add_index :messages, :user_id - add_index :messages, :resource_id - add_index :messages, :resource_type - end -end diff --git a/db/migrate/20160120061513_metacode_asset_path_update.rb b/db/migrate/20160120061513_metacode_asset_path_update.rb deleted file mode 100644 index af5e7970..00000000 --- a/db/migrate/20160120061513_metacode_asset_path_update.rb +++ /dev/null @@ -1,14 +0,0 @@ -class Metacode < ActiveRecord::Base -end - -class MetacodeAssetPathUpdate < ActiveRecord::Migration - def change - Metacode.first(50).each do |metacode| - next unless metacode.icon.start_with?('/assets/icons/') - metacode.icon = metacode.icon.sub(/^\/assets\/icons/, 'https://s3.amazonaws.com/metamaps-assets/metacodes') - metacode.icon = metacode.icon.sub('blueprint_96px', 'blueprint/96px') - metacode.icon = metacode.icon.sub('generics_96px', 'generics/96px') - metacode.save - end - end -end diff --git a/db/migrate/20160223061711_add_attachment_icon_to_metacodes.rb b/db/migrate/20160223061711_add_attachment_icon_to_metacodes.rb deleted file mode 100644 index 82162f9f..00000000 --- a/db/migrate/20160223061711_add_attachment_icon_to_metacodes.rb +++ /dev/null @@ -1,8 +0,0 @@ -class AddAttachmentIconToMetacodes < ActiveRecord::Migration - def change - change_table :metacodes do |t| - t.rename :icon, :manual_icon - t.attachment :aws_icon - end - end -end diff --git a/db/migrate/20160310200131_create_tokens.rb b/db/migrate/20160310200131_create_tokens.rb deleted file mode 100644 index 7b9272a5..00000000 --- a/db/migrate/20160310200131_create_tokens.rb +++ /dev/null @@ -1,11 +0,0 @@ -class CreateTokens < ActiveRecord::Migration - def change - create_table :tokens do |t| - t.string :token - t.string :description - t.references :user, index: true, foreign_key: true - - t.timestamps null: false - end - end -end diff --git a/db/migrate/20160312234946_create_events.rb b/db/migrate/20160312234946_create_events.rb deleted file mode 100644 index 4ce01e35..00000000 --- a/db/migrate/20160312234946_create_events.rb +++ /dev/null @@ -1,11 +0,0 @@ -class CreateEvents < ActiveRecord::Migration - def change - create_table :events do |t| - t.string :kind, limit: 255 - t.references :eventable, polymorphic: true, index: true - t.references :user, index: true - t.references :map, index: true - t.timestamps - end - end -end diff --git a/db/migrate/20160312235006_create_webhooks.rb b/db/migrate/20160312235006_create_webhooks.rb deleted file mode 100644 index 0d1cf899..00000000 --- a/db/migrate/20160312235006_create_webhooks.rb +++ /dev/null @@ -1,10 +0,0 @@ -class CreateWebhooks < ActiveRecord::Migration - def change - create_table :webhooks do |t| - t.references :hookable, polymorphic: true, index: true - t.string :kind, null: false - t.string :uri, null: false - t.text :event_types, array: true, default: [] - end - end -end diff --git a/db/migrate/20160313003721_create_delayed_jobs.rb b/db/migrate/20160313003721_create_delayed_jobs.rb deleted file mode 100644 index 3d055fa7..00000000 --- a/db/migrate/20160313003721_create_delayed_jobs.rb +++ /dev/null @@ -1,22 +0,0 @@ -class CreateDelayedJobs < ActiveRecord::Migration - def self.up - create_table :delayed_jobs, force: true do |table| - table.integer :priority, default: 0, null: false # Allows some jobs to jump to the front of the queue - table.integer :attempts, default: 0, null: false # Provides for retries, but still fail eventually. - table.text :handler, null: false # YAML-encoded string of the object that will do work - table.text :last_error # reason for last failure (See Note below) - table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future. - table.datetime :locked_at # Set when a client is working on this object - table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead) - table.string :locked_by # Who is working on this object (if locked) - table.string :queue # The name of the queue this job is in - table.timestamps null: true - end - - add_index :delayed_jobs, [:priority, :run_at], name: 'delayed_jobs_priority' - end - - def self.down - drop_table :delayed_jobs - end -end diff --git a/db/migrate/20160318141618_create_doorkeeper_tables.rb b/db/migrate/20160318141618_create_doorkeeper_tables.rb deleted file mode 100644 index a5ab182e..00000000 --- a/db/migrate/20160318141618_create_doorkeeper_tables.rb +++ /dev/null @@ -1,50 +0,0 @@ -class CreateDoorkeeperTables < ActiveRecord::Migration - def change - create_table :oauth_applications do |t| - t.string :name, null: false - t.string :uid, null: false - t.string :secret, null: false - t.text :redirect_uri, null: false - t.string :scopes, null: false, default: '' - t.timestamps - end - - add_index :oauth_applications, :uid, unique: true - - create_table :oauth_access_grants do |t| - t.integer :resource_owner_id, null: false - t.integer :application_id, null: false - t.string :token, null: false - t.integer :expires_in, null: false - t.text :redirect_uri, null: false - t.datetime :created_at, null: false - t.datetime :revoked_at - t.string :scopes - end - - add_index :oauth_access_grants, :token, unique: true - - create_table :oauth_access_tokens do |t| - t.integer :resource_owner_id - t.integer :application_id - - # If you use a custom token generator you may need to change this column - # from string to text, so that it accepts tokens larger than 255 - # characters. More info on custom token generators in: - # https://github.com/doorkeeper-gem/doorkeeper/tree/v3.0.0.rc1#custom-access-token-generator - # - # t.text :token, null: false - t.string :token, null: false - - t.string :refresh_token - t.integer :expires_in - t.datetime :revoked_at - t.datetime :created_at, null: false - t.string :scopes - end - - add_index :oauth_access_tokens, :token, unique: true - add_index :oauth_access_tokens, :resource_owner_id - add_index :oauth_access_tokens, :refresh_token, unique: true - end -end diff --git a/db/migrate/20160331181959_create_user_maps.rb b/db/migrate/20160331181959_create_user_maps.rb deleted file mode 100644 index 2af6e87a..00000000 --- a/db/migrate/20160331181959_create_user_maps.rb +++ /dev/null @@ -1,10 +0,0 @@ -class CreateUserMaps < ActiveRecord::Migration - def change - create_table :user_maps do |t| - t.references :user, index: true - t.references :map, index: true - - t.timestamps - end - end -end diff --git a/db/migrate/20160401133937_add_defers_to_map_to_topics_and_synapses.rb b/db/migrate/20160401133937_add_defers_to_map_to_topics_and_synapses.rb deleted file mode 100644 index afcd6df2..00000000 --- a/db/migrate/20160401133937_add_defers_to_map_to_topics_and_synapses.rb +++ /dev/null @@ -1,6 +0,0 @@ -class AddDefersToMapToTopicsAndSynapses < ActiveRecord::Migration - def change - add_column :topics, :defer_to_map_id, :integer - add_column :synapses, :defer_to_map_id, :integer - end -end diff --git a/db/migrate/20160820231717_star.rb b/db/migrate/20160820231717_star.rb deleted file mode 100644 index 1e661dce..00000000 --- a/db/migrate/20160820231717_star.rb +++ /dev/null @@ -1,9 +0,0 @@ -class Star < ActiveRecord::Migration - def change - create_table :stars do |t| - t.references :user, index: true - t.references :map, index: true - t.timestamps - end - end -end diff --git a/db/migrate/20160928022635_rename_node1_id_to_topic1_id_in_synapses.rb b/db/migrate/20160928022635_rename_node1_id_to_topic1_id_in_synapses.rb deleted file mode 100644 index fc5b4a1b..00000000 --- a/db/migrate/20160928022635_rename_node1_id_to_topic1_id_in_synapses.rb +++ /dev/null @@ -1,6 +0,0 @@ -class RenameNode1IdToTopic1IdInSynapses < ActiveRecord::Migration[5.0] - def change - rename_column :synapses, :node1_id, :topic1_id - rename_column :synapses, :node2_id, :topic2_id - end -end diff --git a/db/migrate/20161013162214_create_access_requests.rb b/db/migrate/20161013162214_create_access_requests.rb deleted file mode 100644 index 248ad005..00000000 --- a/db/migrate/20161013162214_create_access_requests.rb +++ /dev/null @@ -1,12 +0,0 @@ -class CreateAccessRequests < ActiveRecord::Migration[5.0] - def change - create_table :access_requests do |t| - t.references :user, foreign_key: true - t.boolean :approved, default: false - t.boolean :answered, default: false - t.references :map, foreign_key: true - - t.timestamps - end - end -end diff --git a/db/migrate/20161101031231_create_mailboxer.mailboxer_engine.rb b/db/migrate/20161101031231_create_mailboxer.mailboxer_engine.rb deleted file mode 100644 index 99ed59b1..00000000 --- a/db/migrate/20161101031231_create_mailboxer.mailboxer_engine.rb +++ /dev/null @@ -1,65 +0,0 @@ -# This migration comes from mailboxer_engine (originally 20110511145103) -class CreateMailboxer < ActiveRecord::Migration - def self.up - #Tables - #Conversations - create_table :mailboxer_conversations do |t| - t.column :subject, :string, :default => "" - t.column :created_at, :datetime, :null => false - t.column :updated_at, :datetime, :null => false - end - #Receipts - create_table :mailboxer_receipts do |t| - t.references :receiver, :polymorphic => true - t.column :notification_id, :integer, :null => false - t.column :is_read, :boolean, :default => false - t.column :trashed, :boolean, :default => false - t.column :deleted, :boolean, :default => false - t.column :mailbox_type, :string, :limit => 25 - t.column :created_at, :datetime, :null => false - t.column :updated_at, :datetime, :null => false - end - #Notifications and Messages - create_table :mailboxer_notifications do |t| - t.column :type, :string - t.column :body, :text - t.column :subject, :string, :default => "" - t.references :sender, :polymorphic => true - t.column :conversation_id, :integer - t.column :draft, :boolean, :default => false - t.string :notification_code, :default => nil - t.references :notified_object, :polymorphic => true - t.column :attachment, :string - t.column :updated_at, :datetime, :null => false - t.column :created_at, :datetime, :null => false - t.boolean :global, default: false - t.datetime :expires - end - - #Indexes - #Conversations - #Receipts - add_index "mailboxer_receipts","notification_id" - - #Messages - add_index "mailboxer_notifications","conversation_id" - - #Foreign keys - #Conversations - #Receipts - add_foreign_key "mailboxer_receipts", "mailboxer_notifications", :name => "receipts_on_notification_id", :column => "notification_id" - #Messages - add_foreign_key "mailboxer_notifications", "mailboxer_conversations", :name => "notifications_on_conversation_id", :column => "conversation_id" - end - - def self.down - #Tables - remove_foreign_key "mailboxer_receipts", :name => "receipts_on_notification_id" - remove_foreign_key "mailboxer_notifications", :name => "notifications_on_conversation_id" - - #Indexes - drop_table :mailboxer_receipts - drop_table :mailboxer_conversations - drop_table :mailboxer_notifications - end -end diff --git a/db/migrate/20161101031232_add_conversation_optout.mailboxer_engine.rb b/db/migrate/20161101031232_add_conversation_optout.mailboxer_engine.rb deleted file mode 100644 index c4f4555a..00000000 --- a/db/migrate/20161101031232_add_conversation_optout.mailboxer_engine.rb +++ /dev/null @@ -1,15 +0,0 @@ -# This migration comes from mailboxer_engine (originally 20131206080416) -class AddConversationOptout < ActiveRecord::Migration - def self.up - create_table :mailboxer_conversation_opt_outs do |t| - t.references :unsubscriber, :polymorphic => true - t.references :conversation - end - add_foreign_key "mailboxer_conversation_opt_outs", "mailboxer_conversations", :name => "mb_opt_outs_on_conversations_id", :column => "conversation_id" - end - - def self.down - remove_foreign_key "mailboxer_conversation_opt_outs", :name => "mb_opt_outs_on_conversations_id" - drop_table :mailboxer_conversation_opt_outs - end -end diff --git a/db/migrate/20161101031233_add_missing_indices.mailboxer_engine.rb b/db/migrate/20161101031233_add_missing_indices.mailboxer_engine.rb deleted file mode 100644 index fde96718..00000000 --- a/db/migrate/20161101031233_add_missing_indices.mailboxer_engine.rb +++ /dev/null @@ -1,20 +0,0 @@ -# This migration comes from mailboxer_engine (originally 20131206080417) -class AddMissingIndices < ActiveRecord::Migration - def change - # We'll explicitly specify its name, as the auto-generated name is too long and exceeds 63 - # characters limitation. - add_index :mailboxer_conversation_opt_outs, [:unsubscriber_id, :unsubscriber_type], - name: 'index_mailboxer_conversation_opt_outs_on_unsubscriber_id_type' - add_index :mailboxer_conversation_opt_outs, :conversation_id - - add_index :mailboxer_notifications, :type - add_index :mailboxer_notifications, [:sender_id, :sender_type] - - # We'll explicitly specify its name, as the auto-generated name is too long and exceeds 63 - # characters limitation. - add_index :mailboxer_notifications, [:notified_object_id, :notified_object_type], - name: 'index_mailboxer_notifications_on_notified_object_id_and_type' - - add_index :mailboxer_receipts, [:receiver_id, :receiver_type] - end -end diff --git a/db/migrate/20161101031234_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb b/db/migrate/20161101031234_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb deleted file mode 100644 index a820919e..00000000 --- a/db/migrate/20161101031234_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb +++ /dev/null @@ -1,8 +0,0 @@ -# This migration comes from mailboxer_engine (originally 20151103080417) -class AddDeliveryTrackingInfoToMailboxerReceipts < ActiveRecord::Migration - def change - add_column :mailboxer_receipts, :is_delivered, :boolean, default: false - add_column :mailboxer_receipts, :delivery_method, :string - add_column :mailboxer_receipts, :message_id, :string - end -end diff --git a/db/migrate/20161105160340_add_channel_to_webhook.rb b/db/migrate/20161105160340_add_channel_to_webhook.rb deleted file mode 100644 index 9faae036..00000000 --- a/db/migrate/20161105160340_add_channel_to_webhook.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddChannelToWebhook < ActiveRecord::Migration[5.0] - def change - add_column :webhooks, :channel, :string - end -end diff --git a/db/migrate/20161125175229_add_emails_allowed_to_users.rb b/db/migrate/20161125175229_add_emails_allowed_to_users.rb deleted file mode 100644 index 609e4309..00000000 --- a/db/migrate/20161125175229_add_emails_allowed_to_users.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddEmailsAllowedToUsers < ActiveRecord::Migration[5.0] - def change - add_column :users, :emails_allowed, :boolean, default: true - end -end diff --git a/db/migrate/20161214140124_add_meta_to_events.rb b/db/migrate/20161214140124_add_meta_to_events.rb deleted file mode 100644 index edbee3d6..00000000 --- a/db/migrate/20161214140124_add_meta_to_events.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddMetaToEvents < ActiveRecord::Migration[5.0] - def change - add_column :events, :meta, :json - end -end diff --git a/db/migrate/20161216174257_add_updated_by_to_mappings.rb b/db/migrate/20161216174257_add_updated_by_to_mappings.rb deleted file mode 100644 index e28b8281..00000000 --- a/db/migrate/20161216174257_add_updated_by_to_mappings.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddUpdatedByToMappings < ActiveRecord::Migration[5.0] - def change - add_reference :mappings, :updated_by, foreign_key: {to_table: :users} - end -end diff --git a/db/migrate/20161218183817_add_source_to_maps.rb b/db/migrate/20161218183817_add_source_to_maps.rb deleted file mode 100644 index d6ce5fbf..00000000 --- a/db/migrate/20161218183817_add_source_to_maps.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddSourceToMaps < ActiveRecord::Migration[5.0] - def change - add_reference :maps, :source, foreign_key: {to_table: :maps} - end -end diff --git a/db/migrate/20170122201451_create_attachments.rb b/db/migrate/20170122201451_create_attachments.rb deleted file mode 100644 index a798fcfd..00000000 --- a/db/migrate/20170122201451_create_attachments.rb +++ /dev/null @@ -1,12 +0,0 @@ -class CreateAttachments < ActiveRecord::Migration[5.0] - def change - create_table :attachments do |t| - t.references :attachable, polymorphic: true - t.attachment :file - t.timestamps - end - - remove_attachment :topics, :image - remove_attachment :topics, :audio - end -end diff --git a/db/migrate/20170208055458_add_access_request_to_user_map.rb b/db/migrate/20170208055458_add_access_request_to_user_map.rb deleted file mode 100644 index ac34f2dc..00000000 --- a/db/migrate/20170208055458_add_access_request_to_user_map.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddAccessRequestToUserMap < ActiveRecord::Migration[5.0] - def change - add_reference :user_maps, :access_request - end -end diff --git a/db/migrate/20170208161305_add_updated_by_to_topics_synapses_and_maps.rb b/db/migrate/20170208161305_add_updated_by_to_topics_synapses_and_maps.rb deleted file mode 100644 index dba21d53..00000000 --- a/db/migrate/20170208161305_add_updated_by_to_topics_synapses_and_maps.rb +++ /dev/null @@ -1,7 +0,0 @@ -class AddUpdatedByToTopicsSynapsesAndMaps < ActiveRecord::Migration[5.0] - def change - add_reference :topics, :updated_by, foreign_key: {to_table: :users} - add_reference :synapses, :updated_by, foreign_key: {to_table: :users} - add_reference :maps, :updated_by, foreign_key: {to_table: :users} - end -end diff --git a/db/migrate/20170209215819_create_follows.rb b/db/migrate/20170209215819_create_follows.rb deleted file mode 100644 index f1a41ca2..00000000 --- a/db/migrate/20170209215819_create_follows.rb +++ /dev/null @@ -1,9 +0,0 @@ -class CreateFollows < ActiveRecord::Migration[5.0] - def change - create_table :follows do |t| - t.references :user, index: true - t.references :followed, polymorphic: true, index: true - t.timestamps - end - end -end diff --git a/db/migrate/20170209215911_create_follow_reasons.rb b/db/migrate/20170209215911_create_follow_reasons.rb deleted file mode 100644 index 3f29af06..00000000 --- a/db/migrate/20170209215911_create_follow_reasons.rb +++ /dev/null @@ -1,14 +0,0 @@ -class CreateFollowReasons < ActiveRecord::Migration[5.0] - def change - create_table :follow_reasons do |t| - t.references :follow, index: true - t.boolean :created - t.boolean :contributed - t.boolean :commented - t.boolean :followed - t.boolean :shared_on - t.boolean :starred - t.timestamps - end - end -end diff --git a/db/migrate/20170903180840_add_muted_to_follows.rb b/db/migrate/20170903180840_add_muted_to_follows.rb deleted file mode 100644 index 31649639..00000000 --- a/db/migrate/20170903180840_add_muted_to_follows.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddMutedToFollows < ActiveRecord::Migration[5.0] - def change - add_column :follows, :muted, :boolean - end -end diff --git a/db/schema.rb b/db/schema.rb deleted file mode 100644 index 6a6d3097..00000000 --- a/db/schema.rb +++ /dev/null @@ -1,386 +0,0 @@ -# This file is auto-generated from the current state of the database. Instead -# of editing this file, please use the migrations feature of Active Record to -# incrementally modify your database, and then regenerate this schema definition. -# -# Note that this schema.rb definition is the authoritative source for your -# database schema. If you need to create the application database on another -# system, you should be using db:schema:load, not running all the migrations -# from scratch. The latter is a flawed and unsustainable approach (the more migrations -# you'll amass, the slower it'll run and the greater likelihood for issues). -# -# It's strongly recommended that you check this file into your version control system. - -ActiveRecord::Schema.define(version: 20170903180840) do - - # These are extensions that must be enabled in order to support this database - enable_extension "plpgsql" - - create_table "access_requests", force: :cascade do |t| - t.integer "user_id" - t.boolean "approved", default: false - t.boolean "answered", default: false - t.integer "map_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["map_id"], name: "index_access_requests_on_map_id", using: :btree - t.index ["user_id"], name: "index_access_requests_on_user_id", using: :btree - end - - create_table "attachments", force: :cascade do |t| - t.string "attachable_type" - t.integer "attachable_id" - t.string "file_file_name" - t.string "file_content_type" - t.integer "file_file_size" - t.datetime "file_updated_at" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["attachable_type", "attachable_id"], name: "index_attachments_on_attachable_type_and_attachable_id", using: :btree - end - - create_table "delayed_jobs", force: :cascade do |t| - t.integer "priority", default: 0, null: false - t.integer "attempts", default: 0, null: false - t.text "handler", null: false - t.text "last_error" - t.datetime "run_at" - t.datetime "locked_at" - t.datetime "failed_at" - t.string "locked_by" - t.string "queue" - t.datetime "created_at" - t.datetime "updated_at" - t.index ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree - end - - create_table "events", force: :cascade do |t| - t.string "kind", limit: 255 - t.integer "eventable_id" - t.string "eventable_type" - t.integer "user_id" - t.integer "map_id" - t.datetime "created_at" - t.datetime "updated_at" - t.json "meta" - t.index ["eventable_type", "eventable_id"], name: "index_events_on_eventable_type_and_eventable_id", using: :btree - t.index ["map_id"], name: "index_events_on_map_id", using: :btree - t.index ["user_id"], name: "index_events_on_user_id", using: :btree - end - - create_table "follow_reasons", force: :cascade do |t| - t.integer "follow_id" - t.boolean "created" - t.boolean "contributed" - t.boolean "commented" - t.boolean "followed" - t.boolean "shared_on" - t.boolean "starred" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["follow_id"], name: "index_follow_reasons_on_follow_id", using: :btree - end - - create_table "follows", force: :cascade do |t| - t.integer "user_id" - t.string "followed_type" - t.integer "followed_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.boolean "muted" - t.index ["followed_type", "followed_id"], name: "index_follows_on_followed_type_and_followed_id", using: :btree - t.index ["user_id"], name: "index_follows_on_user_id", using: :btree - end - - create_table "in_metacode_sets", force: :cascade do |t| - t.integer "metacode_id" - t.integer "metacode_set_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["metacode_id"], name: "index_in_metacode_sets_on_metacode_id", using: :btree - t.index ["metacode_set_id"], name: "index_in_metacode_sets_on_metacode_set_id", using: :btree - end - - create_table "mailboxer_conversation_opt_outs", force: :cascade do |t| - t.string "unsubscriber_type" - t.integer "unsubscriber_id" - t.integer "conversation_id" - t.index ["conversation_id"], name: "index_mailboxer_conversation_opt_outs_on_conversation_id", using: :btree - t.index ["unsubscriber_id", "unsubscriber_type"], name: "index_mailboxer_conversation_opt_outs_on_unsubscriber_id_type", using: :btree - end - - create_table "mailboxer_conversations", force: :cascade do |t| - t.string "subject", default: "" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - end - - create_table "mailboxer_notifications", force: :cascade do |t| - t.string "type" - t.text "body" - t.string "subject", default: "" - t.string "sender_type" - t.integer "sender_id" - t.integer "conversation_id" - t.boolean "draft", default: false - t.string "notification_code" - t.string "notified_object_type" - t.integer "notified_object_id" - t.string "attachment" - t.datetime "updated_at", null: false - t.datetime "created_at", null: false - t.boolean "global", default: false - t.datetime "expires" - t.index ["conversation_id"], name: "index_mailboxer_notifications_on_conversation_id", using: :btree - t.index ["notified_object_id", "notified_object_type"], name: "index_mailboxer_notifications_on_notified_object_id_and_type", using: :btree - t.index ["sender_id", "sender_type"], name: "index_mailboxer_notifications_on_sender_id_and_sender_type", using: :btree - t.index ["type"], name: "index_mailboxer_notifications_on_type", using: :btree - end - - create_table "mailboxer_receipts", force: :cascade do |t| - t.string "receiver_type" - t.integer "receiver_id" - t.integer "notification_id", null: false - t.boolean "is_read", default: false - t.boolean "trashed", default: false - t.boolean "deleted", default: false - t.string "mailbox_type", limit: 25 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.boolean "is_delivered", default: false - t.string "delivery_method" - t.string "message_id" - t.index ["notification_id"], name: "index_mailboxer_receipts_on_notification_id", using: :btree - t.index ["receiver_id", "receiver_type"], name: "index_mailboxer_receipts_on_receiver_id_and_receiver_type", using: :btree - end - - create_table "mappings", force: :cascade do |t| - t.text "category" - t.integer "xloc" - t.integer "yloc" - t.integer "topic_id" - t.integer "synapse_id" - t.integer "map_id" - t.integer "user_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "mappable_id" - t.string "mappable_type" - t.integer "updated_by_id" - t.index ["map_id", "synapse_id"], name: "index_mappings_on_map_id_and_synapse_id", using: :btree - t.index ["map_id", "topic_id"], name: "index_mappings_on_map_id_and_topic_id", using: :btree - t.index ["map_id"], name: "index_mappings_on_map_id", using: :btree - t.index ["mappable_id", "mappable_type"], name: "index_mappings_on_mappable_id_and_mappable_type", using: :btree - t.index ["updated_by_id"], name: "index_mappings_on_updated_by_id", using: :btree - t.index ["user_id"], name: "index_mappings_on_user_id", using: :btree - end - - create_table "maps", force: :cascade do |t| - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.text "name" - t.text "desc" - t.text "permission" - t.integer "user_id" - t.boolean "arranged" - t.boolean "featured" - t.string "screenshot_file_name", limit: 255 - t.string "screenshot_content_type", limit: 255 - t.integer "screenshot_file_size" - t.datetime "screenshot_updated_at" - t.integer "source_id" - t.integer "updated_by_id" - t.index ["source_id"], name: "index_maps_on_source_id", using: :btree - t.index ["updated_by_id"], name: "index_maps_on_updated_by_id", using: :btree - t.index ["user_id"], name: "index_maps_on_user_id", using: :btree - end - - create_table "messages", force: :cascade do |t| - t.text "message" - t.integer "user_id" - t.integer "resource_id" - t.string "resource_type" - t.datetime "created_at" - t.datetime "updated_at" - t.index ["resource_id"], name: "index_messages_on_resource_id", using: :btree - t.index ["resource_type"], name: "index_messages_on_resource_type", using: :btree - t.index ["user_id"], name: "index_messages_on_user_id", using: :btree - end - - create_table "metacode_sets", force: :cascade do |t| - t.string "name", limit: 255 - t.text "desc" - t.integer "user_id" - t.boolean "mapperContributed" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["user_id"], name: "index_metacode_sets_on_user_id", using: :btree - end - - create_table "metacodes", force: :cascade do |t| - t.text "name" - t.string "manual_icon", limit: 255 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "color", limit: 255 - t.string "aws_icon_file_name" - t.string "aws_icon_content_type" - t.integer "aws_icon_file_size" - t.datetime "aws_icon_updated_at" - end - - create_table "oauth_access_grants", force: :cascade do |t| - t.integer "resource_owner_id", null: false - t.integer "application_id", null: false - t.string "token", null: false - t.integer "expires_in", null: false - t.text "redirect_uri", null: false - t.datetime "created_at", null: false - t.datetime "revoked_at" - t.string "scopes" - t.index ["token"], name: "index_oauth_access_grants_on_token", unique: true, using: :btree - end - - create_table "oauth_access_tokens", force: :cascade do |t| - t.integer "resource_owner_id" - t.integer "application_id" - t.string "token", null: false - t.string "refresh_token" - t.integer "expires_in" - t.datetime "revoked_at" - t.datetime "created_at", null: false - t.string "scopes" - t.index ["refresh_token"], name: "index_oauth_access_tokens_on_refresh_token", unique: true, using: :btree - t.index ["resource_owner_id"], name: "index_oauth_access_tokens_on_resource_owner_id", using: :btree - t.index ["token"], name: "index_oauth_access_tokens_on_token", unique: true, using: :btree - end - - create_table "oauth_applications", force: :cascade do |t| - t.string "name", null: false - t.string "uid", null: false - t.string "secret", null: false - t.text "redirect_uri", null: false - t.string "scopes", default: "", null: false - t.datetime "created_at" - t.datetime "updated_at" - t.index ["uid"], name: "index_oauth_applications_on_uid", unique: true, using: :btree - end - - create_table "stars", force: :cascade do |t| - t.integer "user_id" - t.integer "map_id" - t.datetime "created_at" - t.datetime "updated_at" - t.index ["map_id"], name: "index_stars_on_map_id", using: :btree - t.index ["user_id"], name: "index_stars_on_user_id", using: :btree - end - - create_table "synapses", force: :cascade do |t| - t.text "desc" - t.text "category" - t.integer "topic1_id" - t.integer "topic2_id" - t.integer "user_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.text "permission" - t.text "weight" - t.integer "defer_to_map_id" - t.integer "updated_by_id" - t.index ["topic1_id"], name: "index_synapses_on_node1_id_and_node1_id", using: :btree - t.index ["topic1_id"], name: "index_synapses_on_topic1_id", using: :btree - t.index ["topic2_id"], name: "index_synapses_on_node2_id_and_node2_id", using: :btree - t.index ["topic2_id"], name: "index_synapses_on_topic2_id", using: :btree - t.index ["updated_by_id"], name: "index_synapses_on_updated_by_id", using: :btree - t.index ["user_id"], name: "index_synapses_on_user_id", using: :btree - end - - create_table "tokens", force: :cascade do |t| - t.string "token" - t.string "description" - t.integer "user_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.index ["user_id"], name: "index_tokens_on_user_id", using: :btree - end - - create_table "topics", force: :cascade do |t| - t.text "name" - t.text "desc" - t.text "link" - t.integer "user_id" - t.integer "metacode_id" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.text "permission" - t.integer "defer_to_map_id" - t.integer "updated_by_id" - t.index ["metacode_id"], name: "index_topics_on_metacode_id", using: :btree - t.index ["updated_by_id"], name: "index_topics_on_updated_by_id", using: :btree - t.index ["user_id"], name: "index_topics_on_user_id", using: :btree - end - - create_table "user_maps", force: :cascade do |t| - t.integer "user_id" - t.integer "map_id" - t.datetime "created_at" - t.datetime "updated_at" - t.integer "access_request_id" - t.index ["access_request_id"], name: "index_user_maps_on_access_request_id", using: :btree - t.index ["map_id"], name: "index_user_maps_on_map_id", using: :btree - t.index ["user_id"], name: "index_user_maps_on_user_id", using: :btree - end - - create_table "users", force: :cascade do |t| - t.string "name", limit: 255 - t.string "email", limit: 255 - t.string "crypted_password", limit: 255 - t.string "password_salt", limit: 255 - t.string "persistence_token", limit: 255 - t.string "perishable_token", limit: 255 - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.string "code", limit: 8 - t.string "joinedwithcode", limit: 8 - t.text "settings" - t.string "encrypted_password", limit: 128, default: "" - t.string "remember_token", limit: 255 - t.datetime "remember_created_at" - t.string "reset_password_token", limit: 255 - t.datetime "last_sign_in_at" - t.string "last_sign_in_ip", limit: 255 - t.integer "sign_in_count", default: 0 - t.datetime "current_sign_in_at" - t.string "current_sign_in_ip", limit: 255 - t.datetime "reset_password_sent_at" - t.boolean "admin" - t.string "image_file_name", limit: 255 - t.string "image_content_type", limit: 255 - t.integer "image_file_size" - t.datetime "image_updated_at" - t.integer "generation" - t.boolean "emails_allowed", default: true - t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree - end - - create_table "webhooks", force: :cascade do |t| - t.integer "hookable_id" - t.string "hookable_type" - t.string "kind", null: false - t.string "uri", null: false - t.text "event_types", default: [], array: true - t.string "channel" - t.index ["hookable_type", "hookable_id"], name: "index_webhooks_on_hookable_type_and_hookable_id", using: :btree - end - - add_foreign_key "access_requests", "maps" - add_foreign_key "access_requests", "users" - add_foreign_key "mailboxer_conversation_opt_outs", "mailboxer_conversations", column: "conversation_id", name: "mb_opt_outs_on_conversations_id" - add_foreign_key "mailboxer_notifications", "mailboxer_conversations", column: "conversation_id", name: "notifications_on_conversation_id" - add_foreign_key "mailboxer_receipts", "mailboxer_notifications", column: "notification_id", name: "receipts_on_notification_id" - add_foreign_key "mappings", "users", column: "updated_by_id" - add_foreign_key "maps", "maps", column: "source_id" - add_foreign_key "maps", "users", column: "updated_by_id" - add_foreign_key "synapses", "users", column: "updated_by_id" - add_foreign_key "tokens", "users" - add_foreign_key "topics", "users", column: "updated_by_id" -end diff --git a/db/seeds.rb b/db/seeds.rb deleted file mode 100644 index f919629f..00000000 --- a/db/seeds.rb +++ /dev/null @@ -1,212 +0,0 @@ -# This file should contain all the record creation needed to seed the database with its default values. -# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). - -## USERS -User.new(name: 'user', - email: 'user@user.com', - password: 'toolsplusconsciousness', - code: 'qwertyui', - joinedwithcode: 'qwertyui', - admin: 'false').save(validate: false) - -User.new(name: 'admin', - email: 'admin@admin.com', - password: 'toolsplusconsciousness', - code: 'iuytrewq', - joinedwithcode: 'iuytrewq', - admin: 'true').save(validate: false) -## END USERS - -## METACODES -Metacode.create(name: 'Action', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_action.png', - color: '#BD6C85') - -Metacode.create(name: 'Activity', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_activity.png', - color: '#6EBF65') - -Metacode.create(name: 'Catalyst', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_catalyst.png', - color: '#EF8964') - -Metacode.create(name: 'Closed', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_closedissue.png', - color: '#ABB49F') - -Metacode.create(name: 'Process', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_process.png', - color: '#BDB25E') - -Metacode.create(name: 'Future Dev', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_futuredev.png', - color: '#25A17F') - -Metacode.create(name: 'Group', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_group.png', - color: '#7076BC') - -Metacode.create(name: 'Implication', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_implication.png', - color: '#83DECA') - -Metacode.create(name: 'Insight', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_insight.png', - color: '#B074AD') - -Metacode.create(name: 'Intention', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_intention.png', - color: '#BAEAFF') - -Metacode.create(name: 'Knowledge', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_knowledge.png', - color: '#60ACF7') - -Metacode.create(name: 'Location', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_location.png', - color: '#ABD9A7') - -Metacode.create(name: 'Need', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_need.png', - color: '#D2A7D4') - -Metacode.create(name: 'Open Issue', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_openissue.png', - color: '#9BBF71') - -Metacode.create(name: 'Opportunity', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_opportunity.png', - color: '#889F64') - -Metacode.create(name: 'Person', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_person.png', - color: '#DE925F') - -Metacode.create(name: 'Platform', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_platform.png', - color: '#21C8FE') - -Metacode.create(name: 'Problem', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_problem.png', - color: '#99CFC4') - -Metacode.create(name: 'Resource', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_resource.png', - color: '#C98C63') - -Metacode.create(name: 'Role', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_role.png', - color: '#A8595D') - -Metacode.create(name: 'Task', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_task.png', - color: '#3397C4') - -Metacode.create(name: 'Trajectory', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_trajectory.png', - color: '#D3AA4C') - -Metacode.create(name: 'Argument', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_argument.png', - color: '#7FAEFD') - -Metacode.create(name: 'Con', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_con.png', - color: '#CF7C74') - -Metacode.create(name: 'Subject', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_subject.png', - color: '#8293D8') - -Metacode.create(name: 'Decision', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_decision.png', - color: '#CCA866') - -Metacode.create(name: 'Event', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_event.png', - color: '#F5854B') - -Metacode.create(name: 'Example', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_example.png', - color: '#618C61') - -Metacode.create(name: 'Experience', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_experience.png', - color: '#BE995F') - -Metacode.create(name: 'Feedback', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_feedback.png', - color: '#54A19D') - -Metacode.create(name: 'Aim', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_aim.png', - color: '#B0B0B0') - -Metacode.create(name: 'Good Practice', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_goodpractice.png', - color: '#BD9E86') - -Metacode.create(name: 'Idea', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_idea.png', - color: '#C4BC5E') - -Metacode.create(name: 'List', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_list.png', - color: '#B7A499') - -Metacode.create(name: 'Media', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_media.png', - color: '#6D94CC') - -Metacode.create(name: 'Metamap', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_metamap.png', - color: '#AEA9FD') - -Metacode.create(name: 'Model', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_model.png', - color: '#B385BA') - -Metacode.create(name: 'Note', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_note.png', - color: '#A389A1') - -Metacode.create(name: 'Perspective', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_perspective.png', - color: '#2EB6CC') - -Metacode.create(name: 'Pro', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_pro.png', - color: '#89B879') - -Metacode.create(name: 'Project', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_project.png', - color: '#85A050') - -Metacode.create(name: 'Question', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_question.png', - color: '#5CB3B3') - -Metacode.create(name: 'Reference', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_reference.png', - color: '#A7A7A7') - -Metacode.create(name: 'Research', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_research.png', - color: '#CD8E89') - -Metacode.create(name: 'Status', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_status.png', - color: '#EFA7C0') - -Metacode.create(name: 'Story', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_story.png', - color: '#A7A2DC') - -Metacode.create(name: 'Tool', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_tool.png', - color: '#828282') - -Metacode.create(name: 'Wildcard', - manual_icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_wildcard.png', - color: '#73C7DE') -## END METACODES diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md deleted file mode 100644 index c8168bb1..00000000 --- a/doc/CHANGELOG.md +++ /dev/null @@ -1,7 +0,0 @@ -## 2.6 -- Backbone.js in use for client side models -- Realtime depends entirely on sockets for transmitting changes, rather than server using redis to push - -## 2.5 - -- Initial release diff --git a/doc/CONTRIBUTING.md b/doc/CONTRIBUTING.md deleted file mode 100644 index 99453a83..00000000 --- a/doc/CONTRIBUTING.md +++ /dev/null @@ -1,96 +0,0 @@ -# Contributing to Metamaps - -Active involvement from the community is essential to help make Metamaps as -beneficial for communities as it can be. You can help by reporting bugs, fixing -bugs, adding features, contributing new modules and by providing feedback. - -## Reporting bugs and other issues - -If you think you've encountered a bug, do the following: - -1. Make sure you are working with the latest version of the Metamaps `develop` - branch. -2. Browse through the [issues][metamaps-issues] to check if anyone else has - already reported. If someone has, feel free to add more information to that - issue to help us solve it. -3. If no one has yet submitted the issue you are encountering, add it in! Please - be sure to include as much information as possible, include errors, warnings, - screenshots, links to a video showing the problem or code that can reproduce - the issue. - -## Contributing code - -Metamaps is made possible by open source contributors like you. We're very -interested in getting help from the greater community, but before you start it's -important that you become acquainted with our workflow. Following these -guidelines below will make collaboration much smoother and increase the chances -that we will accept your pull request without hiccups. - -### Development Process - -Our development process is very similar to the approach described in the -well-known article [A Successful Git Branching Model by Vincent Driessen -][git-branching-model]. Here's an overview: - -* The `master` branch is the current base for our deployed instances. This - branch *must* remain stable and always work. -* The `develop` branch is the current state of development. Metamaps - developers base their work on this branch. It is not guaranteed to be - stable. -* All code must be reviewed before being committed to develop or master. This - means all commits should take place on your own personal branch, and - submitted via a Github pull request when ready. -* Only maintainers can accept pull requests from forks into the core - Metamaps.cc repository. - -### Getting started - -1. Make sure you have a [GitHub account](https://github.com/signup/free) -2. [Fork metamaps][fork-metamaps] -3. Keep your fork up to date. Metamaps is a fast moving project, and things - are changing all the time. It's important that any changes you make are - based on the most recent version of metamaps, since it's possible that - something may have changed that breaks your pull request or invalidates it. -4. Make sure you have a [Contributor License Agreement](http://caa.metamaps.cc - ) on file. -5. Read on ... - - -### Contributor License Agreement - -Before we can accept any contributions to Metamaps, we first require that all -individuals or companies agree to our Contributor License Agreement (CLA). The -e-mail address used in the pull request will be used to check if a CLA has -already been filed, so be sure to list all email addresses that you might use to -submit your pull requests when filling it out. [Our CLA can be found here]( -http://caa.metamaps.cc). - -### Testing and Linting - -Please run `rspec` in the Metamaps root directory before submitting your pull -request. - -### Branch grouping tokens - -All pull requests submitted to Metamaps.cc should occur on a new branch. For -these branches, please use a short token indicating the nature of the branch in -question followed by a `/` and then a very concise string describing the branch. -This isn't a very important part of the workflow, but we are currently using the -following branch prefixes: - - fix // bug fixes - wip // work in progress (not suitable for a pull request) - instance // (internal) Tracks customizations made to metamaps instances - feature // All other new features - -### Bug fixes - -If you'd like to contribute a fix for a bug you've encountered, first read up on -[how to report a bug](#reporting-bugs-and-other-issues) and report it so we are -aware of the issue. By filing the issue first, we may be able to provide you -with some insight that guides you in the right direction. - -[metamaps-issues]: https://github.com/metamaps/metamaps/labels/bug -[git-branching-model]: http://nvie.com/posts/a-successful-git-branching-model/ -[fork-metamaps]: https://github.com/metamaps/metamaps/fork -[cla]: http://metamaps.cc/cla diff --git a/doc/MacInstallation.md b/doc/MacInstallation.md deleted file mode 100644 index d89d2153..00000000 --- a/doc/MacInstallation.md +++ /dev/null @@ -1,66 +0,0 @@ -# OSX Install - -Install rvm (ruby version manager) - - \curl -sSL https://get.rvm.io | bash -s stable --rails - -Use rvm to install Ruby version 2.3.0 - - rvm install 2.3.0 --with-gcc=clang - rvm use 2.3.0 - -Now install homebrew. (a package manager for mac) - - ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - -Then install nodejs (make sure its version 6.11.1 or greater) - - brew install nodejs - npm install - npm run build - -And postgresql: - - brew install postgresql - ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents - createuser metamaps -P -s -d - -Set a password, then start the service: - - brew services start postgresql - -Change directory to the metamaps git repository, and run: - - bundle install - -Copy the .example-env file and rename it to .env. Then modify the DB_USERNAME and DB_PASSWORD values to match the postgres username and password you set - -Now use rake to create and set up the database - - rake db:create - rake db:schema:load - rake db:seed - -To start the rails server: - - rails server - -To start the realtime server: - - node realtime/realtime-server.js - -NOTE: if you want to actively develop on the javascript in `/frontend` use - - npm run build:watch -to start a webpack build process that updates the build everytime you make code changes - -Now open a browser to http://localhost:3000! - -Sign in with the default account - - email: user@user.com - password: toolsplusconsciousness - -OR create a new account at /join, and use access code 'qwertyui' - -Start mapping and programming! diff --git a/doc/RailsIntroduction.md b/doc/RailsIntroduction.md deleted file mode 100644 index fd7b8d20..00000000 --- a/doc/RailsIntroduction.md +++ /dev/null @@ -1,38 +0,0 @@ -# How does Ruby on Rails work? - -Ruby on Rails is a pretty intimidating framework to get started with, since there are so many files. Here's a quick rundown on getting started: - -1. Where should I look for code? -2. How do I know what code generates what pages of metamaps.cc? - -## Where should I look for code? - -Here are the top level folders you should know about: - -- app: holds the ruby code + assets that make up the app. This is the only directory you really need to see how the app works. -- spec: tests describing how the code *should* work -- db: code for handling interaction with the underlying Postgresql database -- config: low-level, in-depth configuration variables. The most interesting file is `config/routes.rb`. -- Gemfile: listing of app dependencies from https://rubygems.org/ -- realtime: code for our Node.JS realtime server. This is a separate server written in Javascript that isn't served by ruby on rails. - -Within the app/ folder, you can find these important folders: - -- models: files describing the logic surrounding maps, topics, synapses and more in the framework -- views: HTML template files that allow you to generate HTML using ruby code -- helpers: globally accessible helper functions available to views; they help us take logic out of the view files -- controllers: functions that map a route (e.g. `GET https://metamaps.cc/maps/2`) to a controller action (e.g. maps_controller.rb's `show` function). -- services: files that encapsulate a certain feature or logic into one file that can be referenced. Usually services help us take logic out of models and controllers. -- assets/stylesheets: CSS stylesheets for look and feel -- assets/javascripts: This is a huge folder, containing all of our Javascript code. This folder itself is at least as important as the rest of the repository. - -## How do I know what code generates what pages of metamaps.cc? - -The lifecycle works something like this. - -1. run `rake routes` inside the metamaps directory on your computer, and it will generate a list with entries looking something like `GET /maps/:id maps#show`. This tells you which URL will end up at which *controller*. In this example, if you accessed `https://metamaps.cc/maps/2`, you are looking for the maps_controller's `show` function, and there will be a variable params["id"] that is equal to 2. -2. Now in `app/controllers/maps_controller.rb`, you can find the function. It should do some calculations, create an instance variable @map, and then do one of two things: - - If it doesn't call anything, ruby on rails will automatically load app/views/map/show.html.erb. (NB: If you loaded `/maps/2.json`, it would look for app/views/map/show.json.erb). Any instance variables assigned (e.g. @map) will be available to the view file (show.html.erb). - - You can also call the render function directly. See the codebase or http://guides.rubyonrails.org/layouts_and_rendering.html#using-render for details. -3. The map's show template (show.html.erb) will contain actual HTML, which gets us a lot closer to an HTML page. Ruby on rails will fill in a "layout" from app/views/layouts to wrap the content of the page. It will also let you include code with `<% %>` (for logical operations) or `<%= %>` (to print a ruby string directly to the HTML page). The view may refer to attributes on the @map object passed from the controller. For more details on how the @map object works, you can check its definition in app/models/map.rb. -4. The shortest possible rails model file would look like this: `class Map < ActiveRecord::Base; end`. In this case, rails would look for a database table called "maps" and allow access to the columns. For instance, a postgresql INTEGER column called "id" would be accessible as @map.id. However, you can also specify validations, shorthand queries called scopes, and helper functions that specify the logic of the model. It is generally preferable to put logic in the model rather than in a controller or view, so these files are excellent sources of information about how the app works. diff --git a/doc/RspecTesting.md b/doc/RspecTesting.md deleted file mode 100644 index d17dc0dd..00000000 --- a/doc/RspecTesting.md +++ /dev/null @@ -1,57 +0,0 @@ -## Testing Javascript - -Javascript tests are under construction, but you can read more in the README in `app/assets/javascripts`. - -## Testing with RSpec - -RSpec is a ruby gem that allows you to test your code base. This is great - -every time you make a change, you can do some basic sanity checks to make sure -you didn't break anything. - -To test Metamaps, run - - rspec - -in the top level directory. It will automatically search the `spec` directory -for files called `*_spec.rb`, and run them as tests. When it's done testing, it -will print a report telling you how many tests failed. With luck, the number -will be 0. - -Note that if your test database doesn't exist yet, you'll need to create it -first: - - RAILS_ENV=test rake db:create - -At the time of writing, there are four directories in the spec folder. One, -`support`, is for helper functions. `rails_helper.rb` and `spec_helper.rb` are -also for helper functions. - -`factories` is for a gem called [factory-girl][factory-girl]. This gem lets you -use the `create` and `build` functions to quickly create the simplest possible -valid version of a given model. For instance: - - let(:map1) { create :map } - let(:ronald) { create :user, name: "Ronald" } - let(:map2) { create :map, user: ronald } - -As you can see, you can also customize the factories. You can read the full -documentation at the link above or check the existing specs to see how it works. -It is worth reading through the factories to see how they are defined. If you -add a model to `app/models`, please also create a factory for it that defines -the minimum valid state for that model. - -Finally, `models` and `controllers` have the actual spec files. Writing specs is -usually fairly simple but you do need to understand the syntax. You can read -more at [rspec.info][rspec-docs]. - -If you modify the metamaps codebase, please consider adding tests verifying that -the added code works. This will help in a few ways: - - - Unrelated changes in the future that break your code will be spotted earlier - - Your changes will be more easily understood, since the *purpose* will be - described by the spec - -Happy testing! - -[factory-girl]: https://github.com/thoughtbot/factory_girl -[rspec-docs]: http://rspec.info diff --git a/doc/UbuntuInstallation.md b/doc/UbuntuInstallation.md deleted file mode 100644 index 03314074..00000000 --- a/doc/UbuntuInstallation.md +++ /dev/null @@ -1,108 +0,0 @@ -Firstly this walkthrough is done with a 14.04 32bit install of Ubuntu. -Let's check if all updates for the system are installed first. In a -terminal type: - - sudo apt-get update - -Now we need to install git: - - sudo apt-get install git - -Now let's get our RVM installed (Ruby Version Manager). Now this is fun -because the package you will get from apt-get is outdated. So we are going -to use CURL to get RVM - - sudo apt-get install curl - -Then lets install RVM with curl like this - - gpg --keyserver hkp://keys.gnupg.net \ - --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 - \curl -sSL https://get.rvm.io | bash -s stable - PATH=$PATH:$HOME/.rvm/bin - [[ -s "$HOME/.profile" ]] && source "$HOME/.profile" - [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" - source ~/.rvm/scripts/rvm - -Now we can actually install RVM - - rvm requirements - -Running this will check your system for requirements as well so you will need to put your system password in. - -All right now we can download metamaps from the master using git - - git clone https://github.com/metamaps/metamaps.git - -Now there is a couple other things we are going to need which is nodejs, postgresql, libpq-dev and redis-server - - sudo apt-get install nodejs npm - sudo ln -s /usr/bin/nodejs /usr/bin/node - sudo apt-get install postgresql - sudo apt-get install libpq-dev - sudo apt-get install redis-server - -Furthermore, if you want to be able to work on profile picture uploading, -or use it you'll need ImageMagick. On Ubuntu, you can just go find -ImageMagick in the Ubuntu Software Centre - -Install the specific version of ruby needed this will take some time - - rvm install $(cat metamaps/.ruby-version) - -While that is running, you can open another terminal and install the ES6 code - - npm install - npm run build - -Now we also need to copy .example-env to a new file named .env. Review the -configuration in here to see if you need any changes. - - cp .example-env .env - -Now run inside your metamaps folder: - - gem install bundle - bundle install - -in your top level directory for metamaps. This is a lengthy process so you might want to go and make a coffee or something :) - -All right now we need to make sure your postgres password is the same as -it is listed in the .env file so we are going to set it by - - sudo -u postgres psql - -Use these commands to set the password to 3112 and then quit: - - \password postgres - \q - -now we can use rake to create, load the schema into, and load db/seeds.rb -into the postgres database: - - rake db:create - rake db:schema:load - rake db:seed - -Open a new terminal, navigate to the metamaps directory, and execute the -server: - - rails s - -NOTE: if you want to actively develop on the javascript in /frontend use - - npm run build:watch - -and dont forget to run the other server for realtime... - - node realtime/realtime-server.js -to start a webpack build process that updates the build everytime you make code changes - -Now you're all set enjoy your personal server of metamaps :) Navigate your browser to localhost:3000 once you have the server running. Sign in with the default account - - email: user@user.com - password: toolsplusconsciousness - -OR create a new account at /join, and use access code 'qwertyui' - -Start mapping and programming! diff --git a/doc/VagrantInstallation.md b/doc/VagrantInstallation.md deleted file mode 100644 index ad4cfce2..00000000 --- a/doc/VagrantInstallation.md +++ /dev/null @@ -1,29 +0,0 @@ -Now ensure you have VirtualBox and Vagrant installed on your computer -``` -cd metamaps -./bin/configure.sh -``` - -This will do all the setup steps to make Metamaps work with a bit of behind the scenes ninja magick. - -To start servers which will run Metamaps you can then run: -``` -./bin/start -``` - -To stop them: -``` -./bin/stop -``` - -With your webservers running, open a web browser and go to `http://localhost:3000` - -You can sign in with the default account - -email: `user@user.com` - -password: `toolsplusconsciousness` - -OR create a new account at `/join`, and use access code `qwertyui` - -Start mapping and programming! diff --git a/doc/WindowsInstallation.md b/doc/WindowsInstallation.md deleted file mode 100644 index d2049f73..00000000 --- a/doc/WindowsInstallation.md +++ /dev/null @@ -1,61 +0,0 @@ -DISCLAIMER: This tutorial is liable to be out of date, and we don't necessarily support Windows development. If you are set on installing Metamaps on Windows, it may be worthwhile to look at the Mac and Ubuntu docs for up to date information on what Metamaps requires to run. - -Before you begin, you'll need to install stuff: - -Ruby, Git, and Rails: http://railsinstaller.org/en -PostgreSQL 9.2: http://www.enterprisedb.com/products-services-training/pgdownload -nodejs: http://nodejs.org/download - -During the installation of the PostgreSQL database, you'll need to choose a -database password. Anything is fine, just note down what you choose. - -Once you are ready, create a new folder to hold this and any other git -repositories. As an example, let's pretend you've chose C:\git, and made that -folder writable by your user account. - -Now you are ready to clone the Metamaps git repository: - - git clone https://github.com/metamaps/metamaps.git --branch develop - cd metamaps - bundle install - -The third `bundle install` command downloads and installs the rubygem -dependencies of Metamaps. - -You also need to install the ES6 code from the nodejs repositories: - - npm install - npm run build - -At this point you should be in C:\git\metamaps, or whatever equivalent -directory you've chosen. The next step is to set up your database -configuration. From the metamaps directory, run - - start config - -This command will open a Windows Explorer window of the "config" directory of -Metamaps. Copy `.example-env`, and rename the copy to `.env`. Edit the file and -set the DB_PASSWORD to be whatever you set up with postgres earlier. Once -you're done, then move back into the command prompt. The next few commands will -fail unless `.env` is correctly configured and Postgres is running. - - rake db:create - rake db:schema:load - rake db:seed - -And you're set up! At this point, you should be able to run the server at any -time with only one command; you don't need to repeat any of the previous steps -again. The command to run the server is: - - rails s - -Navigate your browser to localhost:3000 once you have the server running - -Sign in with the default account - - email: user@user.com - password: toolsplusconsciousness - -OR create a new account at /join, and use access code 'qwertyui' - -Start mapping and programming! diff --git a/doc/api/api.raml b/doc/api/api.raml deleted file mode 100644 index d051b099..00000000 --- a/doc/api/api.raml +++ /dev/null @@ -1,44 +0,0 @@ -#%RAML 1.0 ---- -title: Metamaps -version: 2.0 -baseUri: https://metamaps.cc/api/v2 -mediaType: application/json -protocols: [ HTTPS ] -documentation: - - title: Getting Started - content: !include pages/getting-started.md - -securitySchemes: - cookie: !include securitySchemes/cookie.raml - token: !include securitySchemes/token.raml - oauth_2_0: !include securitySchemes/oauth_2_0.raml -securedBy: [ token, oauth_2_0 ] - -traits: - pageable: !include traits/pageable.raml - embeddable: !include traits/embeddable.raml - orderable: !include traits/orderable.raml - searchable: !include traits/searchable.raml - -schemas: - map: !include schemas/_map.json - mapping: !include schemas/_mapping.json - metacode: !include schemas/_metacode.json - synapse: !include schemas/_synapse.json - token: !include schemas/_token.json - topic: !include schemas/_topic.json - user: !include schemas/_user.json - -#resourceTypes: -# base: !include resourceTypes/base.raml -# item: !include resourceTypes/item.raml -# collection: !include resourceTypes/collection.raml - -/maps: !include apis/maps.raml -/mappings: !include apis/mappings.raml -/metacodes: !include apis/metacodes.raml -/synapses: !include apis/synapses.raml -/tokens: !include apis/tokens.raml -/topics: !include apis/topics.raml -/users: !include apis/users.raml diff --git a/doc/api/apis/mappings.raml b/doc/api/apis/mappings.raml deleted file mode 100644 index 35d9353d..00000000 --- a/doc/api/apis/mappings.raml +++ /dev/null @@ -1,93 +0,0 @@ -#type: collection -get: - is: [ embeddable: { embedFields: "user,updated_by,map" }, orderable, pageable ] - securedBy: [ null, token, oauth_2_0 ] - responses: - 200: - body: - application/json: - example: !include ../examples/mappings.json -post: - body: - application/json: - properties: - mappable_id: - description: id of the topic/synapse to be mapped - mappable_type: - description: Topic or Synapse - map_id: - description: id of the map - xloc: - description: (only for Topic mappings) x location on the canvas - required: false - yloc: - description: (only for Topic mappings) y location on the canvas - required: false - responses: - 201: - body: - application/json: - example: !include ../examples/mapping.json -/{id}: - #type: item - get: - is: [ embeddable: { embedFields: "user,updated_by,map" } ] - securedBy: [ null, token, oauth_2_0 ] - responses: - 200: - body: - application/json: - example: !include ../examples/mapping.json - put: - body: - application/json: - properties: - mappable_id: - description: id of the topic/synapse to be mapped - required: false - mappable_type: - description: Topic or Synapse - required: false - map_id: - description: id of the map - required: false - xloc: - description: (only for Topic mappings) x location on the canvas - required: false - yloc: - description: (only for Topic mappings) y location on the canvas - required: false - - responses: - 200: - body: - application/json: - example: !include ../examples/mapping.json - patch: - body: - application/json: - properties: - mappable_id: - description: id of the topic/synapse to be mapped - required: false - mappable_type: - description: Topic or Synapse - required: false - map_id: - description: id of the map - required: false - xloc: - description: (only for Topic mappings) x location on the canvas - required: false - yloc: - description: (only for Topic mappings) y location on the canvas - required: false - responses: - 200: - body: - application/json: - example: !include ../examples/mapping.json - delete: - responses: - 204: - description: No content diff --git a/doc/api/apis/maps.raml b/doc/api/apis/maps.raml deleted file mode 100644 index b147bd80..00000000 --- a/doc/api/apis/maps.raml +++ /dev/null @@ -1,112 +0,0 @@ -#type: collection -get: - is: [ searchable: { searchFields: "name, desc" }, embeddable: { embedFields: "user,source,topics,synapses,mappings,contributors,collaborators" }, orderable, pageable ] - securedBy: [ null, token, oauth_2_0 ] - queryParameters: - user_id: - description: | - Pass a user_id to only return maps created by that user. For example, `/api/v2/maps?user_id=1` would return maps created by the Metamaps user with id 1. - required: false - type: number - responses: - 200: - body: - application/json: - example: !include ../examples/maps.json -post: - body: - application/json: - properties: - name: - description: name - desc: - description: description - permission: - description: commons, public, or private - source_id: - description: the id of the map this map is a fork of - screenshot: - description: url to a screenshot of the map - contributor_ids: - description: the ids of people who have contributed to the map - collaborator_ids: - description: the ids of people who have edit access to the map - responses: - 201: - body: - application/json: - example: !include ../examples/map.json -/{id}: - #type: item - get: - is: [ embeddable: { embedFields: "user,source,topics,synapses,mappings,contributors,collaborators" } ] - securedBy: [ null, token, oauth_2_0 ] - responses: - 200: - body: - application/json: - example: !include ../examples/map.json - put: - body: - application/json: - properties: - name: - description: name - required: false - desc: - description: description - required: false - permission: - description: commons, public, or private - required: false - screenshot: - description: url to a screenshot of the map - required: false - source_id: - description: the id of the map this map is a fork of - required: false - responses: - 200: - body: - application/json: - example: !include ../examples/map.json - patch: - body: - application/json: - properties: - name: - description: name - required: false - desc: - description: description - required: false - permission: - description: commons, public, or private - required: false - screenshot: - description: url to a screenshot of the map - required: false - source_id: - description: the id of the map this map is a fork of - required: false - responses: - 200: - body: - application/json: - example: !include ../examples/map.json - delete: - responses: - 204: - description: No content - /stars: - post: - responses: - 201: - description: Created - body: - application/json: - example: !include ../examples/map_starred.json - delete: - responses: - 204: - description: No content diff --git a/doc/api/apis/metacodes.raml b/doc/api/apis/metacodes.raml deleted file mode 100644 index 5e35d68f..00000000 --- a/doc/api/apis/metacodes.raml +++ /dev/null @@ -1,18 +0,0 @@ -#type: collection -get: - is: [ searchable: { searchFields: "name" }, orderable, pageable ] - securedBy: [ null, token, oauth_2_0 ] - responses: - 200: - body: - application/json: - example: !include ../examples/metacodes.json -/{id}: - #type: item - securedBy: [ null, token, oauth_2_0 ] - get: - responses: - 200: - body: - application/json: - example: !include ../examples/metacode.json diff --git a/doc/api/apis/synapses.raml b/doc/api/apis/synapses.raml deleted file mode 100644 index 181d60f9..00000000 --- a/doc/api/apis/synapses.raml +++ /dev/null @@ -1,102 +0,0 @@ -#type: collection -get: - is: [ searchable: { searchFields: "desc" }, embeddable: { embedFields: "topic1,topic2,user" }, orderable, pageable ] - securedBy: [ null, token, oauth_2_0 ] - responses: - 200: - body: - application/json: - example: !include ../examples/synapses.json -post: - body: - application/json: - properties: - desc: - description: text description of this synapse - required: false - category: - description: | - from-to or both - permission: - description: commons, public, or private - topic1_id: - description: the topic being linked from - topic2_id: - description: the topic being linked to - user_id: - description: the creator of the topic - responses: - 201: - body: - application/json: - example: !include ../examples/synapse.json -/{id}: - #type: item - get: - is: [ embeddable: { embedFields: "topic1,topic2,user" } ] - securedBy: [ null, token, oauth_2_0 ] - responses: - 200: - body: - application/json: - example: !include ../examples/synapse.json - put: - body: - application/json: - properties: - desc: - description: text description of this synapse - required: false - category: - description: | - from-to or both - required: false - permission: - description: commons, public, or private - required: false - topic1_id: - description: the topic being linked from - required: false - topic2_id: - description: the topic being linked to - required: false - user_id: - description: the creator of the topic - required: false - responses: - 200: - body: - application/json: - example: !include ../examples/synapse.json - patch: - body: - application/json: - properties: - desc: - description: text description of this synapse - required: false - category: - description: | - from-to or both - required: false - permission: - description: commons, public, or private - required: false - topic1_id: - description: the topic being linked from - required: false - topic2_id: - description: the topic being linked to - required: false - user_id: - description: the creator of the topic - required: false - responses: - 200: - body: - application/json: - example: !include ../examples/synapse.json - delete: - responses: - 204: - description: No content diff --git a/doc/api/apis/tokens.raml b/doc/api/apis/tokens.raml deleted file mode 100644 index b827acd3..00000000 --- a/doc/api/apis/tokens.raml +++ /dev/null @@ -1,31 +0,0 @@ -#type: collection -get: - description: | - A list of the current user's tokens. - is: [ searchable: { searchFields: description }, pageable, orderable ] - securedBy: [ token, oauth_2_0, cookie ] - responses: - 200: - body: - application/json: - example: !include ../examples/tokens.json -post: - securedBy: [ token, oauth_2_0, cookie ] - body: - application/json: - properties: - description: - description: short string describing this token - required: false - responses: - 201: - body: - application/json: - example: !include ../examples/token.json -/{id}: - #type: item - securedBy: [ token, oauth_2_0, cookie ] - delete: - responses: - 204: - description: No content diff --git a/doc/api/apis/topics.raml b/doc/api/apis/topics.raml deleted file mode 100644 index 704fce19..00000000 --- a/doc/api/apis/topics.raml +++ /dev/null @@ -1,91 +0,0 @@ -#type: collection -get: - is: [ searchable: { searchFields: "name, desc, link" }, embeddable: { embedFields: "user,metacode" }, orderable, pageable ] - securedBy: [ null, token, oauth_2_0 ] - responses: - 200: - body: - application/json: - example: !include ../examples/topics.json -post: - body: - application/json: - properties: - name: - description: Topic name; this will be visible on the map - desc: - description: Longer topic description visible when opening a map card - link: - description: embed a link to content on the web in the topic card - required: false - permission: - description: commons, public, or private - metacode_id: - description: Topic's metacode - responses: - 201: - body: - application/json: - example: !include ../examples/topic.json -/{id}: - #type: item - get: - is: [ embeddable: { embedFields: "user,metacode" } ] - securedBy: [ null, token, oauth_2_0 ] - responses: - 200: - body: - application/json: - example: !include ../examples/topic.json - put: - body: - application/json: - properties: - name: - description: Topic name; this will be visible on the map - required: false - desc: - description: Longer topic description visible when opening a map card - required: false - link: - description: embed a link to content on the web in the topic card - required: false - permission: - description: commons, public, or private - required: false - metacode_id: - description: Topic's metacode - required: false - responses: - 200: - body: - application/json: - example: !include ../examples/topic.json - patch: - body: - application/json: - properties: - name: - description: Topic name; this will be visible on the map - required: false - desc: - description: Longer topic description visible when opening a map card - required: false - link: - description: embed a link to content on the web in the topic card - required: false - permission: - description: commons, public, or private - required: false - metacode_id: - description: Topic's metacode - required: false - responses: - 200: - body: - application/json: - example: !include ../examples/topic.json - delete: - responses: - 204: - description: No content diff --git a/doc/api/apis/users.raml b/doc/api/apis/users.raml deleted file mode 100644 index ec2e7d17..00000000 --- a/doc/api/apis/users.raml +++ /dev/null @@ -1,26 +0,0 @@ -#type: collection -get: - is: [ searchable: { searchFields: "name" }, orderable, pageable ] - securedBy: [ null, token, oauth_2_0 ] - responses: - 200: - body: - application/json: - example: !include ../examples/users.json -/{id}: - #type: item - securedBy: [ null, token, oauth_2_0 ] - get: - responses: - 200: - body: - application/json: - example: !include ../examples/user.json -/current: - #type: item - get: - responses: - 200: - body: - application/json: - example: !include ../examples/current_user.json diff --git a/doc/api/examples/current_user.json b/doc/api/examples/current_user.json deleted file mode 100644 index 78018884..00000000 --- a/doc/api/examples/current_user.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "data": { - "id": 1, - "name": "user", - "avatar": "https://s3.amazonaws.com/metamaps-assets/site/user.png", - "generation": 0, - "is_admin": false, - "email": "user@example.com" - } -} diff --git a/doc/api/examples/map.json b/doc/api/examples/map.json deleted file mode 100644 index d50d36fd..00000000 --- a/doc/api/examples/map.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "data": { - "id": 2, - "name": "Emergent Network Phenomena", - "desc": "Example map for the API", - "permission": "commons", - "screenshot": "https://s3.amazonaws.com/metamaps-assets/site/missing-map.png", - "starred": false, - "created_at": "2016-03-26T08:02:05.379Z", - "updated_at": "2016-03-27T07:20:18.047Z", - "user_id": 1234, - "source_id": null, - "topic_ids": [ - 58, - 59 - ], - "synapse_ids": [ - 2 - ], - "mapping_ids": [ - 94, - 95, - 96 - ], - "collaborator_ids": [], - "contributor_ids": [ - 2 - ] - } -} diff --git a/doc/api/examples/map_starred.json b/doc/api/examples/map_starred.json deleted file mode 100644 index 1fde87d6..00000000 --- a/doc/api/examples/map_starred.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "data": { - "id": 2, - "name": "Emergent Network Phenomena", - "desc": "Example map for the API", - "permission": "commons", - "screenshot": "https://s3.amazonaws.com/metamaps-assets/site/missing-map.png", - "starred": true, - "created_at": "2016-03-26T08:02:05.379Z", - "updated_at": "2016-03-27T07:20:18.047Z", - "user_id": 1234, - "source_id": null, - "topic_ids": [ - 58, - 59 - ], - "synapse_ids": [ - 2 - ], - "mapping_ids": [ - 94, - 95, - 96 - ], - "collaborator_ids": [], - "contributor_ids": [ - 2 - ] - } -} diff --git a/doc/api/examples/mapping.json b/doc/api/examples/mapping.json deleted file mode 100644 index 93d38bdb..00000000 --- a/doc/api/examples/mapping.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "data": { - "id": 4, - "created_at": "2016-03-25T08:44:21.337Z", - "updated_at": "2016-03-25T08:44:21.337Z", - "mappable_id": 1, - "mappable_type": "Synapse", - "user_id": 1, - "updated_by_id": 1, - "map_id": 1 - } -} diff --git a/doc/api/examples/mappings.json b/doc/api/examples/mappings.json deleted file mode 100644 index 99f2e58d..00000000 --- a/doc/api/examples/mappings.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "data": [ - { - "created_at": "2016-03-25T08:44:07.152Z", - "id": 1, - "map_id": 1, - "mappable_id": 1, - "mappable_type": "Topic", - "updated_at": "2016-03-25T08:44:07.152Z", - "user_id": 1, - "updated_by_id": 1, - "xloc": -271, - "yloc": 22 - }, - { - "created_at": "2016-03-25T08:44:13.907Z", - "id": 2, - "map_id": 1, - "mappable_id": 2, - "mappable_type": "Topic", - "updated_at": "2016-03-25T08:44:13.907Z", - "user_id": 1, - "updated_by_id": 1, - "xloc": -12, - "yloc": 61 - }, - { - "created_at": "2016-03-25T08:44:19.333Z", - "id": 3, - "map_id": 1, - "mappable_id": 3, - "mappable_type": "Topic", - "updated_at": "2016-03-25T08:44:19.333Z", - "user_id": 1, - "updated_by_id": 1, - "xloc": -93, - "yloc": -90 - }, - { - "created_at": "2016-03-25T08:44:21.337Z", - "id": 4, - "map_id": 1, - "mappable_id": 1, - "mappable_type": "Synapse", - "updated_at": "2016-03-25T08:44:21.337Z", - "user_id": 1, - "updated_by_id": 1 - } - ], - "page": { - "current_page": 1, - "next_page": 2, - "per": 4, - "prev_page": 0, - "total_count": 303, - "total_pages": 76 - } -} diff --git a/doc/api/examples/maps.json b/doc/api/examples/maps.json deleted file mode 100644 index 687f8cc5..00000000 --- a/doc/api/examples/maps.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "data": [ - { - "id": 2, - "name": "Emergent Network Phenomena", - "desc": "Example map for the API", - "permission": "commons", - "screenshot": "https://s3.amazonaws.com/metamaps-assets/site/missing-map.png", - "starred": false, - "created_at": "2016-03-26T08:02:05.379Z", - "updated_at": "2016-03-27T07:20:18.047Z", - "user_id": 1234, - "source_id": 2, - "topic_ids": [ - 58, - 59 - ], - "synapse_ids": [ - 2 - ], - "mapping_ids": [ - 94, - 95, - 96 - ], - "collaborator_ids": [], - "contributor_ids": [ - 2 - ] - } - ], - "page": { - "current_page": 1, - "next_page": 2, - "prev_page": 0, - "total_pages": 5, - "total_count": 5, - "per": 1 - } -} diff --git a/doc/api/examples/metacode.json b/doc/api/examples/metacode.json deleted file mode 100644 index 506a10c0..00000000 --- a/doc/api/examples/metacode.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "data": { - "id": 1, - "name": "Action", - "color": "#BD6C85", - "icon": "https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_action.png" - } -} diff --git a/doc/api/examples/metacodes.json b/doc/api/examples/metacodes.json deleted file mode 100644 index 8e06f56c..00000000 --- a/doc/api/examples/metacodes.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "data": [ - { - "id": 1, - "name": "Action", - "color": "#BD6C85", - "icon": "https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_action.png" - }, - { - "id": 2, - "name": "Activity", - "color": "#6EBF65", - "icon": "https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_activity.png" - }, - { - "id": 3, - "name": "Catalyst", - "color": "#EF8964", - "icon": "https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_catalyst.png" - } - ], - "page": { - "current_page": 1, - "next_page": 2, - "prev_page": 0, - "total_pages": 16, - "total_count": 47, - "per": 3 - } -} diff --git a/doc/api/examples/synapse.json b/doc/api/examples/synapse.json deleted file mode 100644 index 0de4acb3..00000000 --- a/doc/api/examples/synapse.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "data": { - "id": 2, - "desc": "hello", - "category": "from-to", - "permission": "commons", - "created_at": "2016-03-26T08:02:17.994Z", - "updated_at": "2016-03-26T08:02:17.994Z", - "topic1_id": 5, - "topic2_id": 6, - "user_id": 2 - } -} diff --git a/doc/api/examples/synapses.json b/doc/api/examples/synapses.json deleted file mode 100644 index 1bcb00c2..00000000 --- a/doc/api/examples/synapses.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "data": [ - { - "id": 2, - "desc": "hello", - "category": "from-to", - "permission": "commons", - "created_at": "2016-03-26T08:02:17.994Z", - "updated_at": "2016-03-26T08:02:17.994Z", - "topic1_id": 1, - "topic2_id": 2, - "user_id": 2 - }, - { - "id": 6, - "desc": "nice", - "category": "both", - "permission": "public", - "created_at": "2016-03-26T08:05:31.563Z", - "updated_at": "2016-03-26T08:05:31.563Z", - "topic1_id": 2, - "topic2_id": 3, - "user_id": 2 - } - ], - "page": { - "current_page": 1, - "next_page": 2, - "prev_page": 0, - "total_pages": 71, - "total_count": 142, - "per": 2 - } -} diff --git a/doc/api/examples/token.json b/doc/api/examples/token.json deleted file mode 100644 index 14f559ea..00000000 --- a/doc/api/examples/token.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "data": { - "id": 1, - "token": "VeI0qAe2bf2ytnrTRxmywsH0VSwuyjK5", - "description": "Personal token for in-browser testing", - "created_at": "2016-09-06T03:47:56.553Z" - } -} diff --git a/doc/api/examples/tokens.json b/doc/api/examples/tokens.json deleted file mode 100644 index 6d05cffc..00000000 --- a/doc/api/examples/tokens.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "data": [ - { - "id": 1, - "token": "VeI0qAe2bf2ytnrTRxmywsH0VSwuyjK5", - "description": "Personal token for in-browser testing", - "created_at": "2016-09-06T03:47:56.553Z" - } - ], - "page": { - "current_page": 1, - "next_page": 0, - "prev_page": 0, - "total_pages": 1, - "total_count": 1, - "per": 25 - } -} diff --git a/doc/api/examples/topic.json b/doc/api/examples/topic.json deleted file mode 100644 index d65eced1..00000000 --- a/doc/api/examples/topic.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "data": { - "id": 670, - "name": "Metamaps.cc Website", - "desc": "Metamaps is a great website; check it out below!", - "link": "https://metamaps.cc", - "permission": "commons", - "created_at": "2016-07-02T09:23:30.397Z", - "updated_at": "2016-07-02T09:23:30.397Z", - "user_id": 2, - "metacode_id": 36 - } -} diff --git a/doc/api/examples/topics.json b/doc/api/examples/topics.json deleted file mode 100644 index 5553c9e5..00000000 --- a/doc/api/examples/topics.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "data": [ - { - "id": 670, - "name": "Metamaps.cc Website", - "desc": "Metamaps is a great website; check it out below!", - "link": "https://metamaps.cc", - "permission": "commons", - "created_at": "2016-07-02T09:23:30.397Z", - "updated_at": "2016-07-02T09:23:30.397Z", - "user_id": 2, - "metacode_id": 36 - }, - { - "id": 60, - "name": "View others on map in realtime", - "desc": "", - "link": "", - "permission": "commons", - "created_at": "2016-03-31T01:20:26.734Z", - "updated_at": "2016-03-31T01:20:26.734Z", - "user_id": 2, - "metacode_id": 8 - } - ], - "page": { - "current_page": 1, - "next_page": 2, - "prev_page": 0, - "total_pages": 249, - "total_count": 497, - "per": 2 - } -} diff --git a/doc/api/examples/user.json b/doc/api/examples/user.json deleted file mode 100644 index ca54233d..00000000 --- a/doc/api/examples/user.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "data": { - "id": 1, - "name": "user", - "avatar": "https://s3.amazonaws.com/metamaps-assets/site/user.png", - "generation": 0 - } -} diff --git a/doc/api/examples/users.json b/doc/api/examples/users.json deleted file mode 100644 index 944f631e..00000000 --- a/doc/api/examples/users.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "data": [ - { - "id": 1, - "name": "user", - "avatar": "https://s3.amazonaws.com/metamaps-assets/site/user.png", - "generation": 0 - }, - { - "id": 2, - "name": "admin", - "avatar": "https://s3.amazonaws.com/metamaps-assets/site/user.png", - "generation": 0 - } - ], - "page": { - "current_page": 1, - "next_page": 0, - "prev_page": 0, - "total_pages": 1, - "total_count": 2, - "per": 25 - } -} diff --git a/doc/api/pages/getting-started.md b/doc/api/pages/getting-started.md deleted file mode 100644 index 184ffce3..00000000 --- a/doc/api/pages/getting-started.md +++ /dev/null @@ -1,2 +0,0 @@ -There are two ways to log in: token-based authentication, or OAuth 2. If you're testing the API or making simple scripts, token-based is the best. If you're developing an app and want users to be able to log into Metamaps inside your app, you'll be able to use the OAuth 2 mechanism. Check the security tab of any of the endpoints above for instructions on logging in. - diff --git a/doc/api/pages/oauth_2_0_tutorial.md b/doc/api/pages/oauth_2_0_tutorial.md deleted file mode 100644 index e419a621..00000000 --- a/doc/api/pages/oauth_2_0_tutorial.md +++ /dev/null @@ -1,41 +0,0 @@ -We use a flow for Oauth 2 authentication called Authorization Code. It basically consists of an exchange of an `authorization` token for an `access token`. For more detailed info, check out the [RFC spec here](http://tools.ietf.org/html/rfc6749#section-4.1) - -The first step is to register your client app. - -#### Registering the client - -Set up a new client in `/oauth/applications/new`. For testing purposes, you should fill in the redirect URI field with `urn:ietf:wg:oauth:2.0:oob`. This will tell it to display the authorization code instead of redirecting to a client application (that you don't have now). - -#### Requesting authorization - -To request the authorization token, you should visit the `/oauth/authorize` endpoint. You can do that either by clicking in the link to the authorization page in the app details or by visiting manually the URL: - -``` -http://metamaps.cc/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code -``` - -Once you are there, you should sign in and click on `Authorize`. -You will then see a response that contains your "authorization code", which you need to exchange for an access token. - -#### Requesting the access token - -To request the access token, you should use the returned code and exchange it for an access token. To do that you can use any HTTP client. Here's an example with `fetch` - -```javascript -fetch('https://metamaps.cc/oauth/token?client_id=THE_ID&client_secret=THE_SECRET&code=RETURNED_CODE&grant_type=authorization_code&redirect_uri=urn:ietf:wg:oauth:2.0:oob', { - method: 'POST', - credentials: 'same-origin' -}).then(response => { - return response.json() -}).then(console.log).catch(console.error) - -# The response will be like -{ - "access_token": "de6780bc506a0446309bd9362820ba8aed28aa506c71eedbe1c5c4f9dd350e54", - "token_type": "bearer", - "expires_in": 7200, - "refresh_token": "8257e65c97202ed1726cf9571600918f3bffb2544b26e00a61df9897668c33a1" -} -``` - -You can now make requests to the API with the access token returned. diff --git a/doc/api/pages/token_tutorial.md b/doc/api/pages/token_tutorial.md deleted file mode 100644 index 7278073b..00000000 --- a/doc/api/pages/token_tutorial.md +++ /dev/null @@ -1,26 +0,0 @@ -You can create a token by using the API, or you can get your first token at https://metamaps.cc/tokens/new. Once you have this token, you can append it to a request. For example, opening a private window in your browser and browsing to `https://metamaps.cc/api/v2/users/current?token=...token here...` would show you your current user, even without logging in by another means. - -To get a list of your current tokens (while logged in to the main site), you can run the following fetch request in your browser console (assuming the current tab is on some page within the `metamaps.cc` website. The token you need to append to the url will look something like `T1ZI012rseqF1XZWFBVj4JSXR5g3OpYC`, but this example token won't work for you. You need your own. - -``` -fetch('/api/v2/tokens', { - method: 'GET', - credentials: 'same-origin', // needed so the API knows which account you're logged in to -}).then(response => { - return response.json() -}).then(console.log).catch(console.error) -``` - -If this is your first time accessing the API, this list wil be empty. You can create a token over the API using a similar method: - -``` -fetch('/api/v2/tokens?token=T1ZI012rseqF1XZWFBVj4JSXR5g3OpYC', { - method: 'POST' -}).then(response => { - return response.json() -}).then(payload => { - console.log(payload) -}).catch(console.error) -``` - -`payload.data.token` will contain a string which you can use to append to requests to access the API from anywhere. diff --git a/doc/api/resourceTypes/base.raml b/doc/api/resourceTypes/base.raml deleted file mode 100644 index 47ca56e3..00000000 --- a/doc/api/resourceTypes/base.raml +++ /dev/null @@ -1,35 +0,0 @@ -get?: - responses: - 400: - description: Invalid request or params - body: - application/json: - schema: error -put?: - responses: - 400: - description: Invalid request or params - body: - application/json: - schema: error -patch?: - responses: - 400: - description: Invalid request or params - body: - application/json: - schema: error -post?: - responses: - 400: - description: Invalid request or params - body: - application/json: - schema: error -delete?: - responses: - 400: - description: Invalid request or params - body: - application/json: - schema: error diff --git a/doc/api/resourceTypes/collection.raml b/doc/api/resourceTypes/collection.raml deleted file mode 100644 index e2710dae..00000000 --- a/doc/api/resourceTypes/collection.raml +++ /dev/null @@ -1,22 +0,0 @@ -type: base -get?: - description: Get all <> - queryParameters: - page: - description: The page number - type: integer - per: - description: Number of records per page - type: integer - responses: - 200: - body: - application/json: - schema: <> -post?: - description: Create a new <> - responses: - 201: - body: - application/json: - schema: <> diff --git a/doc/api/resourceTypes/item.raml b/doc/api/resourceTypes/item.raml deleted file mode 100644 index 5c227d61..00000000 --- a/doc/api/resourceTypes/item.raml +++ /dev/null @@ -1,29 +0,0 @@ -type: base -get?: - description: Get a <> - responses: - 200: - body: - application/json: - schema: <> -put?: - description: Update a <> - responses: - 201: - description: Update success - body: - application/json: - schema: <> -patch?: - description: Update a <> - responses: - 201: - description: Update success - body: - application/json: - schema: <> -delete?: - description: Delete a <> - responses: - 204: - description: Removed diff --git a/doc/api/schemas/_current_user.json b/doc/api/schemas/_current_user.json deleted file mode 100644 index 94464ba8..00000000 --- a/doc/api/schemas/_current_user.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "User", - "type": "object", - "properties": { - "id": { - "$ref": "_id.json" - }, - "name": { - "type": "string" - }, - "avatar": { - "format": "uri", - "type": "string" - }, - "generation": { - "type": "integer", - "minimum": 0 - }, - "is_admin": { - "type": "boolean" - }, - "email": { - "type": "string" - } - }, - "required": [ - "id", - "name", - "avatar", - "generation", - "is_admin", - "email" - ] -} diff --git a/doc/api/schemas/_datetimestamp.json b/doc/api/schemas/_datetimestamp.json deleted file mode 100644 index fd9a76a4..00000000 --- a/doc/api/schemas/_datetimestamp.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "string", - "format": "date-time" -} diff --git a/doc/api/schemas/_id.json b/doc/api/schemas/_id.json deleted file mode 100644 index d94ff818..00000000 --- a/doc/api/schemas/_id.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "integer", - "minimum": 1 -} diff --git a/doc/api/schemas/_map.json b/doc/api/schemas/_map.json deleted file mode 100644 index 7e2381f8..00000000 --- a/doc/api/schemas/_map.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "name": "Map", - "type": "object", - "properties": { - "id": { - "$ref": "_id.json" - }, - "name": { - "type": "string" - }, - "desc": { - "type": "string" - }, - "permission": { - "$ref": "_permission.json" - }, - "screenshot": { - "format": "uri", - "type": "string" - }, - "starred": { - "type": "boolean" - }, - "created_at": { - "$ref": "_datetimestamp.json" - }, - "updated_at": { - "$ref": "_datetimestamp.json" - }, - "user_id": { - "$ref": "_id.json" - }, - "user": { - "$ref": "_user.json" - }, - "source_id": { - "$ref": "_optid.json" - }, - "source": { - "$ref": "_map.json" - }, - "topic_ids": { - "type": "array", - "items": { - "$ref": "_id.json" - } - }, - "topics": { - "type": "array", - "items": { - "$ref": "_topic.json" - } - }, - "synapse_ids": { - "type": "array", - "items": { - "$ref": "_id.json" - } - }, - "synapses": { - "type": "array", - "items": { - "$ref": "_synapse.json" - } - }, - "mapping_ids": { - "type": "array", - "items": { - "$ref": "_id.json" - } - }, - "mappings": { - "type": "array", - "items": { - "$ref": "_mapping.json" - } - }, - "contributor_ids": { - "type": "array", - "items": { - "$ref": "_id.json" - } - }, - "contributors": { - "type": "array", - "items": { - "$ref": "_user.json" - } - }, - "collaborator_ids": { - "type": "array", - "items": { - "$ref": "_id.json" - } - }, - "collaborators": { - "type": "array", - "items": { - "$ref": "_user.json" - } - } - }, - "required": [ - "id", - "name", - "desc", - "permission", - "screenshot", - "starred", - "created_at", - "updated_at" - ], - "allOf": [ - { - "oneOf": [ - { "required": [ "user_id" ] }, - { "required": [ "user" ] } - ] - }, - { - "oneOf": [ - { "required": [ "source_id" ] }, - { "required": [ "source" ] } - ] - }, - { - "oneOf": [ - { "required": [ "topic_ids" ] }, - { "required": [ "topics" ] } - ] - }, - { - "oneOf": [ - { "required": [ "synapse_ids" ] }, - { "required": [ "synapses" ] } - ] - }, - { - "oneOf": [ - { "required": [ "mapping_ids" ] }, - { "required": [ "mappings" ] } - ] - }, - { - "oneOf": [ - { "required": [ "contributor_ids" ] }, - { "required": [ "contributors" ] } - ] - }, - { - "oneOf": [ - { "required": [ "collaborator_ids" ] }, - { "required": [ "collaborators" ] } - ] - } - ] -} diff --git a/doc/api/schemas/_mapping.json b/doc/api/schemas/_mapping.json deleted file mode 100644 index efd12c92..00000000 --- a/doc/api/schemas/_mapping.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "name": "Mapping", - "type": "object", - "properties": { - "id": { - "$ref": "_id.json" - }, - "mappable_id": { - "$ref": "_id.json" - }, - "mappable_type": { - "type": "string", - "pattern": "(Topic|Synapse)" - }, - "xloc": { - "type": "integer" - }, - "yloc": { - "type": "integer" - }, - "created_at": { - "$ref": "_datetimestamp.json" - }, - "updated_at": { - "$ref": "_datetimestamp.json" - }, - "map_id": { - "$ref": "_id.json" - }, - "map": { - "$ref": "_map.json" - }, - "user_id": { - "$ref": "_id.json" - }, - "user": { - "$ref": "_user.json" - }, - "updated_by_id": { - "$ref": "_id.json" - }, - "updated_by": { - "$ref": "_user.json" - } - }, - "required": [ - "id", - "mappable_id", - "mappable_type", - "created_at", - "updated_at" - ], - "allOf": [ - { - "oneOf": [ - { "required": [ "map_id" ] }, - { "required": [ "map" ] } - ] - }, - { - "oneOf": [ - { "required": [ "user_id" ] }, - { "required": [ "user" ] } - ] - }, - { - "oneOf": [ - { "required": [ "updated_by_id" ] }, - { "required": [ "updated_by" ] } - ] - } - ] -} diff --git a/doc/api/schemas/_metacode.json b/doc/api/schemas/_metacode.json deleted file mode 100644 index 2001be8e..00000000 --- a/doc/api/schemas/_metacode.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "Metacode", - "type": "object", - "properties": { - "id": { - "$ref": "_id.json" - }, - "name": { - "type": "string" - }, - "color": { - "type": "string" - }, - "icon": { - "format": "uri", - "type": "string" - } - }, - "required": [ - "id", - "name", - "color", - "icon" - ] -} diff --git a/doc/api/schemas/_optid.json b/doc/api/schemas/_optid.json deleted file mode 100644 index c34df067..00000000 --- a/doc/api/schemas/_optid.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "integer|nil" -} diff --git a/doc/api/schemas/_page.json b/doc/api/schemas/_page.json deleted file mode 100644 index 47f69d95..00000000 --- a/doc/api/schemas/_page.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "object", - "properties": { - "current_page": { - "type": "integer", - "minimum": 1 - }, - "next_page": { - "type": "integer", - "minimum": 0 - }, - "prev_page": { - "type": "integer", - "minimum": 0 - }, - "total_pages": { - "type": "integer", - "minimum": 0 - }, - "total_count": { - "type": "integer", - "minimum": 0 - }, - "per": { - "type": "integer", - "minimum": 0 - } - }, - "required": [ - "current_page", - "next_page", - "prev_page", - "total_pages", - "total_count", - "per" - ] -} diff --git a/doc/api/schemas/_permission.json b/doc/api/schemas/_permission.json deleted file mode 100644 index 5c94fc81..00000000 --- a/doc/api/schemas/_permission.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "string", - "pattern": "(commons|private|public)" -} diff --git a/doc/api/schemas/_synapse.json b/doc/api/schemas/_synapse.json deleted file mode 100644 index 6c323225..00000000 --- a/doc/api/schemas/_synapse.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "Synapse", - "type": "object", - "properties": { - "id": { - "$ref": "_id.json" - }, - "desc": { - "type": "string" - }, - "category": { - "type": "string", - "pattern": "(from-to|both)" - }, - "permission": { - "$ref": "_permission.json" - }, - "created_at": { - "$ref": "_datetimestamp.json" - }, - "updated_at": { - "$ref": "_datetimestamp.json" - }, - "topic1_id": { - "$ref": "_id.json" - }, - "topic1": { - "$ref": "_topic.json" - }, - "topic2_id": { - "$ref": "_id.json" - }, - "topic2": { - "$ref": "_topic.json" - }, - "user_id": { - "$ref": "_id.json" - }, - "user": { - "$ref": "_user.json" - } - }, - "required": [ - "id", - "desc", - "category", - "permission", - "created_at", - "updated_at" - ], - "allOf": [ - { - "oneOf": [ - { "required": [ "topic1_id" ] }, - { "required": [ "topic1" ] } - ] - }, - { - "oneOf": [ - { "required": [ "topic2_id" ] }, - { "required": [ "topic2" ] } - ] - }, - { - "oneOf": [ - { "required": [ "user_id" ] }, - { "required": [ "user" ] } - ] - } - ] -} diff --git a/doc/api/schemas/_token.json b/doc/api/schemas/_token.json deleted file mode 100644 index 62a44b3c..00000000 --- a/doc/api/schemas/_token.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Token", - "type": "object", - "properties": { - "id": { - "$ref": "_id.json" - }, - "token": { - "type": "string" - }, - "description": { - "type": "string" - }, - "created_at": { - "$ref": "_datetimestamp.json" - } - }, - "required": [ - "id", - "token", - "description", - "created_at" - ] -} diff --git a/doc/api/schemas/_topic.json b/doc/api/schemas/_topic.json deleted file mode 100644 index 8f47fcc4..00000000 --- a/doc/api/schemas/_topic.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "Topic", - "type": "object", - "properties": { - "id": { - "$ref": "_id.json" - }, - "name": { - "type": "string" - }, - "desc": { - "type": "string" - }, - "link": { - "format": "uri", - "type": "string" - }, - "permission": { - "$ref": "_permission.json" - }, - "created_at": { - "$ref": "_datetimestamp.json" - }, - "updated_at": { - "$ref": "_datetimestamp.json" - }, - "user_id": { - "$ref": "_id.json" - }, - "user": { - "$ref": "_user.json" - }, - "metacode_id": { - "$ref": "_id.json" - }, - "metacode": { - "$ref": "_metacode.json" - } - }, - "required": [ - "id", - "name", - "desc", - "link", - "permission", - "created_at", - "updated_at" - ], - "allOf": [ - { - "oneOf": [ - { "required": [ "user_id" ] }, - { "required": [ "user" ] } - ] - }, - { - "oneOf": [ - { "required": [ "metacode_id" ] }, - { "required": [ "metacode" ] } - ] - } - ] -} diff --git a/doc/api/schemas/_user.json b/doc/api/schemas/_user.json deleted file mode 100644 index f66d5508..00000000 --- a/doc/api/schemas/_user.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "User", - "type": "object", - "properties": { - "id": { - "$ref": "_id.json" - }, - "name": { - "type": "string" - }, - "avatar": { - "format": "uri", - "type": "string" - }, - "generation": { - "type": "integer", - "minimum": 0 - } - }, - "required": [ - "id", - "name", - "avatar", - "generation" - ] -} diff --git a/doc/api/schemas/current_user.json b/doc/api/schemas/current_user.json deleted file mode 100644 index e8260bcb..00000000 --- a/doc/api/schemas/current_user.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Current User Envelope", - "type": "object", - "properties": { - "data": { - "$ref": "_current_user.json" - } - }, - "required": [ - "data" - ] -} diff --git a/doc/api/schemas/error.json b/doc/api/schemas/error.json deleted file mode 100644 index 0967ef42..00000000 --- a/doc/api/schemas/error.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/doc/api/schemas/map.json b/doc/api/schemas/map.json deleted file mode 100644 index 0a7ece7e..00000000 --- a/doc/api/schemas/map.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Map Envelope", - "type": "object", - "properties": { - "data": { - "$ref": "_map.json" - } - }, - "required": [ - "data" - ] -} diff --git a/doc/api/schemas/mapping.json b/doc/api/schemas/mapping.json deleted file mode 100644 index f0e91ace..00000000 --- a/doc/api/schemas/mapping.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Mapping Envelope", - "type": "object", - "properties": { - "data": { - "$ref": "_mapping.json" - } - }, - "required": [ - "data" - ] -} diff --git a/doc/api/schemas/mappings.json b/doc/api/schemas/mappings.json deleted file mode 100644 index 37976a70..00000000 --- a/doc/api/schemas/mappings.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Mappings", - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "_mapping.json" - } - }, - "page": { - "$ref": "_page.json" - } - }, - "required": [ - "data", - "page" - ] -} diff --git a/doc/api/schemas/maps.json b/doc/api/schemas/maps.json deleted file mode 100644 index 39698b96..00000000 --- a/doc/api/schemas/maps.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Maps", - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "_map.json" - } - }, - "page": { - "$ref": "_page.json" - } - }, - "required": [ - "data", - "page" - ] -} diff --git a/doc/api/schemas/metacode.json b/doc/api/schemas/metacode.json deleted file mode 100644 index c5fa7106..00000000 --- a/doc/api/schemas/metacode.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Metacode Envelope", - "type": "object", - "properties": { - "data": { - "$ref": "_metacode.json" - } - }, - "required": [ - "data" - ] -} diff --git a/doc/api/schemas/metacodes.json b/doc/api/schemas/metacodes.json deleted file mode 100644 index c3869366..00000000 --- a/doc/api/schemas/metacodes.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Metacodes", - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "_metacode.json" - } - }, - "page": { - "$ref": "_page.json" - } - }, - "required": [ - "data", - "page" - ] -} diff --git a/doc/api/schemas/synapse.json b/doc/api/schemas/synapse.json deleted file mode 100644 index 5f916976..00000000 --- a/doc/api/schemas/synapse.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Synapse Envelope", - "type": "object", - "properties": { - "data": { - "$ref": "_synapse.json" - } - }, - "required": [ - "data" - ] -} diff --git a/doc/api/schemas/synapses.json b/doc/api/schemas/synapses.json deleted file mode 100644 index dd41cc53..00000000 --- a/doc/api/schemas/synapses.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Synapses", - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "_synapse.json" - } - }, - "page": { - "$ref": "_page.json" - } - }, - "required": [ - "data", - "page" - ] -} diff --git a/doc/api/schemas/token.json b/doc/api/schemas/token.json deleted file mode 100644 index 85be81a5..00000000 --- a/doc/api/schemas/token.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Token Envelope", - "type": "object", - "properties": { - "data": { - "$ref": "_token.json" - } - }, - "required": [ - "data" - ] -} diff --git a/doc/api/schemas/tokens.json b/doc/api/schemas/tokens.json deleted file mode 100644 index 5ea5bdce..00000000 --- a/doc/api/schemas/tokens.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Tokens", - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "_token.json" - } - }, - "page": { - "$ref": "_page.json" - } - }, - "required": [ - "data", - "page" - ] -} diff --git a/doc/api/schemas/topic.json b/doc/api/schemas/topic.json deleted file mode 100644 index 170670b1..00000000 --- a/doc/api/schemas/topic.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "Topic Envelope", - "type": "object", - "properties": { - "data": { - "$ref": "_topic.json" - } - }, - "required": [ - "data" - ] -} diff --git a/doc/api/schemas/topics.json b/doc/api/schemas/topics.json deleted file mode 100644 index 643e7607..00000000 --- a/doc/api/schemas/topics.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Topics", - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "_topic.json" - } - }, - "page": { - "$ref": "_page.json" - } - }, - "required": [ - "data", - "page" - ] -} diff --git a/doc/api/schemas/user.json b/doc/api/schemas/user.json deleted file mode 100644 index a5c9d490..00000000 --- a/doc/api/schemas/user.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "User Envelope", - "type": "object", - "properties": { - "data": { - "$ref": "_user.json" - } - }, - "required": [ - "data" - ] -} diff --git a/doc/api/schemas/users.json b/doc/api/schemas/users.json deleted file mode 100644 index 6cae2b80..00000000 --- a/doc/api/schemas/users.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Users", - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "_user.json" - } - }, - "page": { - "$ref": "_page.json" - } - }, - "required": [ - "data", - "page" - ] -} diff --git a/doc/api/securitySchemes/cookie.raml b/doc/api/securitySchemes/cookie.raml deleted file mode 100644 index 19c80ea8..00000000 --- a/doc/api/securitySchemes/cookie.raml +++ /dev/null @@ -1,2 +0,0 @@ -type: x-cookie -displayName: Accessible using cookie-based authentication diff --git a/doc/api/securitySchemes/oauth_2_0.raml b/doc/api/securitySchemes/oauth_2_0.raml deleted file mode 100644 index 3a84e293..00000000 --- a/doc/api/securitySchemes/oauth_2_0.raml +++ /dev/null @@ -1,6 +0,0 @@ -description: !include ../pages/oauth_2_0_tutorial.md -type: OAuth 2.0 -settings: - authorizationUri: https://metamaps.cc/api/v2/oauth/authorize - accessTokenUri: https://metamaps.cc/api/v2/oauth/token - authorizationGrants: [ authorization_code, client_credentials ] diff --git a/doc/api/securitySchemes/token.raml b/doc/api/securitySchemes/token.raml deleted file mode 100644 index f83e1177..00000000 --- a/doc/api/securitySchemes/token.raml +++ /dev/null @@ -1,3 +0,0 @@ -description: !include ../pages/token_tutorial.md -type: x-token -displayName: Secured by token-based authentication diff --git a/doc/api/templates/item.nunjucks b/doc/api/templates/item.nunjucks deleted file mode 100644 index 044c24d9..00000000 --- a/doc/api/templates/item.nunjucks +++ /dev/null @@ -1,61 +0,0 @@ -
  • - {% if item.displayName %} - {{ item.displayName }}: - {% else %} - {{ item.key }}: - {% endif %} - - {% if not item.structuredValue %} - - {%- if item.required -%}required {% endif -%} - ( - {%- if item.enum -%} - {%- if item.enum.length === 1 -%} - {{ item.enum.join(', ') }} - {%- else -%} - one of {{ item.enum.join(', ') }} - {%- endif -%} - {%- else -%} - {{ item.type }} - {%- endif -%} - - {%- if item.default or item.default == 0 or item.default == false %} - default: {{ item.default }}{%- endif -%} - {%- if item.repeat %} - repeat: {{ item.repeat }}{%- endif -%} - {%- if item.type == 'string' -%} - {%- if item.minLength or item.minLength == 0 %} - minLength: {{ item.minLength }}{%- endif -%} - {%- if item.maxLength or item.maxLength == 0 %} - maxLength: {{ item.maxLength }}{%- endif -%} - {%- else -%} - {%- if item.minimum or item.minimum == 0 %} - minimum: {{ item.minimum }}{%- endif -%} - {%- if item.maximum or item.maximum == 0 %} - maximum: {{ item.maximum }}{%- endif -%} - {%- endif -%} - {%- if item.pattern %} - pattern: {{ item.pattern }}{%- endif -%} - ) - - {% endif %} - -{% markdown %} -{{ item.description }} -{% endmarkdown %} - -{# - {% if item.type %} -

    Type:

    -
    {{ item.type | escape }}
    - {% endif %} -#} - - {% if item.examples.length %} -

    Examples:

    - {% for example in item.examples %} - {% if item.type == 'string' %} -
    {{ example | escape }}
    - {% else %} -
    {{ example | escape }}
    - {% endif %} - {% endfor %} - {% endif %} - - {% if item.structuredValue %} -
    {{ item.structuredValue | dump }}
    - {% endif %} -
  • diff --git a/doc/api/templates/resource.nunjucks b/doc/api/templates/resource.nunjucks deleted file mode 100644 index 6bdaf2a6..00000000 --- a/doc/api/templates/resource.nunjucks +++ /dev/null @@ -1,314 +0,0 @@ -{% if (resource.methods or (resource.description and resource.parentUrl)) %} -
    - - -
    -
    - {% if resource.parentUrl %} - {% if resource.description %} -
    -{% markdown %} -{{ resource.description }} -{% endmarkdown %} -
    - {% endif %} - {% endif %} - -
    - {% for method in resource.methods %} -
    - - {{ method.method }} - {% if method.securedBy.length %} - {% if method.securedBy | first == null %} - - {% endif %} - - {% endif %} - -
    -{% markdown %} -{{ method.description}} -{% endmarkdown %} -
    -
    -
    - {% endfor %} -
    -
    -
    - - {% for method in resource.methods %} - - {% endfor %} -
    -{% endif %} - -{% for resource in resource.resources %} - {% include "./resource.nunjucks" %} -{% endfor %} diff --git a/doc/api/templates/template.nunjucks b/doc/api/templates/template.nunjucks deleted file mode 100644 index 6911f44e..00000000 --- a/doc/api/templates/template.nunjucks +++ /dev/null @@ -1,232 +0,0 @@ - - - - {{ title }} API documentation - - - - - - - - - - - - - - - - -
    -
    -
    - - - {% for resource in resources %} -
    -
    -

    {% if resource.displayName %}{{ resource.displayName}}{% else %}{{ resource.relativeUri }}{% endif %}

    -
    - -
    - {% if resource.description %} -
    -{% markdown %} -{{ resource.description }} -{% endmarkdown %} -
    - {% endif %} - -
    - {% include "./resource.nunjucks" %} -
    -
    -
    - {% endfor %} - - {% for chapter in documentation %} -

    {{ chapter.title }}

    -{% markdown %} -{{ chapter.content }} -{% endmarkdown %} - {% endfor %} -
    - - -
    -
    - - diff --git a/doc/api/traits/embeddable.raml b/doc/api/traits/embeddable.raml deleted file mode 100644 index e9eb61db..00000000 --- a/doc/api/traits/embeddable.raml +++ /dev/null @@ -1,8 +0,0 @@ -queryParameters: - embed: - description: | - Comma-separated list of columns to embed. Each embedded column will be returned instead of the corresponding field_id or field_ids column. For instance, ?embed=user would remove the user_id integer field from a response and replace it with a user object field. - - Possible embeddable fields are:
    << embedFields >>
    - required: false - type: string diff --git a/doc/api/traits/orderable.raml b/doc/api/traits/orderable.raml deleted file mode 100644 index 25baa756..00000000 --- a/doc/api/traits/orderable.raml +++ /dev/null @@ -1,5 +0,0 @@ -queryParameters: - sort: - description: The name of the comma-separated fields to sort by, prefixed by "-" to sort descending - required: false - type: string diff --git a/doc/api/traits/pageable.raml b/doc/api/traits/pageable.raml deleted file mode 100644 index cfb6810d..00000000 --- a/doc/api/traits/pageable.raml +++ /dev/null @@ -1,11 +0,0 @@ -queryParameters: - page: - description: The page number - type: integer - required: false - default: 1 - per: - description: Number of records per page - type: integer - required: false - default: 25 diff --git a/doc/api/traits/searchable.raml b/doc/api/traits/searchable.raml deleted file mode 100644 index 83cfbfb4..00000000 --- a/doc/api/traits/searchable.raml +++ /dev/null @@ -1,11 +0,0 @@ -queryParameters: - q: - description: | - Search text columns for this string. A query of "example" will be passed to SQL as LIKE %example%. The searchable columns are:
    << searchFields >>
    - required: false - type: string - searchfields: - description: | - A comma-seperated list of columns to search. For instance, to search a topic's name and description (but not link field) for the string "cognition", you could use `?q=cognition&searchfields=name,desc`. - required: false - type: string diff --git a/doc/metamaps-qa-steps.md b/doc/metamaps-qa-steps.md deleted file mode 100644 index 7c5c8480..00000000 --- a/doc/metamaps-qa-steps.md +++ /dev/null @@ -1,46 +0,0 @@ -# Metamaps Tests - -Run these tests to be reasonably sure that your code changes haven't broken anything. - -### Users & Accounts - - - Create an account using your join code - - Log in to the interface - - Check your user's "generation" - - Edit your profile picture, email, name, and password - - Remove your profile picture - -### Maps, Topics, Synapses, and Permissions - - - Create three maps: private, public, and another public - - Change the last map's permissions to commons - - Change a map's name - - Create a topic on map #1 - - Verify (in a private window or another browser) that the second user can't acccess map #1 - - Create a topic on map #2 - - Verify that the second user **can't** edit map #2 - - Create a topic on map #3 - - Verify that the second user **can** edit map #3 - - Pull a topic from map #1 to map #3 - - Create a private topic on map #1 - - Verify that the private topic can be pulled from map #1 by the same user - - Verify that the private topic can't be pulled from map #1 by another user - -### Mappings - - - Add a number of topics to one of your maps. Reload to see if they are still there. - - Add a number of synapses to one of your maps. Reload to see if they are still there. - - Rearrange one of your maps and save the layout. Reload to see if the layout is preserved. - -### Unsubscribing from Notifications - - - Log out - - Visit /notifications/unsubscribe. It should redirect you to the login page. - - Log in. - - It should redirect you to the user edit page, and you should be unsubscribed. - -### Misc - - - Login as admin. Change metacode sets. - - Set the screenshot for one of your maps, and verify the index of maps is updated. - - Open two browsers on map #3 and verify that realtime editing works (you'll need to be running the realtime server for this to work). diff --git a/doc/production/first-deploy.md b/doc/production/first-deploy.md deleted file mode 100644 index b588299d..00000000 --- a/doc/production/first-deploy.md +++ /dev/null @@ -1,186 +0,0 @@ -#### Install passenger (e.g. Ubuntu Trusty like this:) - - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 \ - --recv-keys 561F9B9CAC40B2F7 - sudo apt-get install -y apt-transport-https ca-certificates - - # Add APT repository - sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main > /etc/apt/sources.list.d/passenger.list' - sudo apt-get update - - # Install Passenger + Nginx (try apache if you would rather not change - # nginx) - sudo apt-get install -y nginx-extras passenger - -#### Setup Postgres - - sudo apt-get install postgresql-9.4 - # make sure you have development headers for postgres. The package name might be different on your distribution. - sudo apt-get install libpq-dev - sudo -u postgres psql - postgres=# CREATE USER metamaps WITH PASSWORD 'mycoolpassword' CREATEDB; - postgres=# CREATE DATABASE metamaps_production OWNER metamaps; - postgres=# \q - -On some deploys, we have had problems with unicode encoding when trying to run `db:setup`. Running the commands in this Github gist resolved the issue: https://gist.github.com/amolkhanorkar/8706915. Try this link if you have problems - -#### Install Node for javascript building - - # this first line lets us use up-to-date versions of node.js - # instead of the old versions in the Ubuntu repositories - curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash - - sudo apt-get install nodejs - sudo ln -s /usr/bin/nodejs /usr/bin/node - -### Install redis server for action cable - - sudo apt-get install redis-server - -#### Install system-wide rvm: - - sudo gpg --keyserver hkp://keys.gnupg.net \ - --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 - \curl -sSL https://get.rvm.io | sudo bash -s stable - echo "gem: --no-ri --no-rdoc" | sudo tee -a /etc/gemrc - -#### Create user and setup gemsets for that user - - sudo adduser --disabled-password metamaps - sudo adduser metamaps rvm - -#### Clone github repo and install gems - - sudo su - metamaps - rvm user gemsets - git clone https://github.com/metamaps/metamaps \ - --branch instance/mycoolinstance - cat metamaps/.ruby-version - -The last line tells you what version of ruby you need to install. For example, at the time of writing the version is 2.3.0. As your normal sudo-enabled user, run - - sudo rvm install 2.3.0 - -Now switch back to the metamaps user and continue - - cd /home/metamaps/metamaps - gem install bundler - RAILS_ENV=production bundle install - -#### Connect rails database - -Run this in the metamaps directory, still as metamaps: - - # fill in DB_* values, and realtime server at least. Change the - # SECRET_KEY_BASE to something new. Ctrl+X to save/exit from nano. - cp .example-env .env - nano .env - - # Set up environment variables in your current session - source .env - export RAILS_ENV=production - export NODE_ENV=production - - # create, load schema, seed - bundle exec rails db:setup - -#### Precompile assets - -Note that `rails assets:precompile` will normally call `npm install` and `bin/build-apidocs.sh` as part of its process. Both of these latter commands require `npm install` to be run first. We suggest you run all five commands separately this time (like below) to better catch any errors. In the future, you won't need to run the second and third commands separately. - - npm install - npm run build - bin/build-apidocs.sh - bundle exec rails assets:precompile - bundle exec rails perms:fix - -#### Nginx and SSL - -We recommand using Passenger + Nginx to serve your website. You can contact us for our nginx configuration. - -Get an SSL certificate and encrypt it for the realtime video. - -#### And finally - - passenger-config restart-app /home/metamaps/metamaps - -If this command fails, it may be helpful for debugging to run a test -server to see what problems show up: - - RAILS_ENV=production rails server - -#### Realtime server: - - sudo npm install -g forever - (sudo crontab -u metamaps -l 2>/dev/null; echo "@reboot NODE_REALTIME_PORT=5000 /usr/bin/forever --minUptime 1000 --spinSleepTime 1000 --append -l /home/metamaps/logs/forever.realtime.log -c /home/metamaps/metamaps/node_modules/.bin/babel-node --workingDir /home/metamaps/metamaps start /home/metamaps/metamaps/realtime/realtime-server.js") | sudo crontab -u metamaps - - mkdir -p /home/metamaps/logs - /usr/bin/forever --minUptime 1000 --spinSleepTime 1000 \ - --append -l /home/metamaps/logs/forever.realtime.log \ - -c /home/metamaps/metamaps/node_modules/.bin/babel-node \ - --workingDir /home/metamaps/metamaps \ - start /home/metamaps/metamaps/realtime/realtime-server.js - -#### Upstart service for delayed_worker: - -If your system uses upstart for init scripts, put the following code into `/etc/init/metamaps_delayed_job.conf`: - - description "Delayed Jobs Worker for Metamaps" - - start on runlevel [2345] - stop on runlevel [!2345] - - setuid metamaps - setgid metamaps - chdir /home/metamaps/metamaps - - env HOME=/home/metamaps - env PATH="/usr/local/rvm/gems/ruby-2.3.0@metamaps/bin:/usr/local/rvm/gems/ruby-2.3.0@global/bin:/usr/local/rvm/rubies/ruby-2.3.0/bin:/usr/local/rvm/bin:/usr/local/bin:/usr/bin:/bin" - env GEM_PATH="/usr/local/rvm/gems/ruby-2.3.0@metamaps:/usr/local/rvm/gems/ruby-2.3.0@global" - env RAILS_ENV="production" - - respawn - respawn limit 3 30 - - exec bundle exec rails jobs:work - -Then start the service and check the last ten lines of the log file to make sure it's running OK: - - sudo service metamaps_delayed_job start - tail /var/log/upstart/metamaps_delayed_job.log - -#### Systemd service for delayed_worker: - -If your system uses systemd for init scripts, ptu the following code into `/etc/systemd/system/metamaps_delayed_job.service`: - - [Unit] - Description=metamaps delayed job service - After=network-online.target - - [Service] - ExecStart=/usr/local/rvm/gems/ruby-2.3.0@metamaps/bin/bundle exec rails jobs:work - WorkingDirectory=/home/metamaps/metamaps - Restart=always - User=metamaps - Group=metamaps - Environment=HOME=/home/metamaps - Environment=PATH=/usr/local/rvm/gems/ruby-2.3.0@metamaps/bin:/usr/local/rvm/gems/ruby-2.3.0@global/bin:/usr/local/rvm/rubies/ruby-2.3.0/bin:/usr/local/rvm/bin:/usr/local/bin:/usr/bin:/bin - Environment=GEM_PATH=/usr/local/rvm/gems/ruby-2.3.0@metamaps:/usr/local/rvm/gems/ruby-2.3.0@global - Environment=RAILS_ENV=production - - [Install] - WantedBy=multi-user.target - -Then start the service and check the last ten lines of the log file to make sure it's running OK: - - sudo systemctl start metamaps_delayed_job - # ??? how the heck do you check systemd logs?? - -##### initial service startup - sudo systemctl enable metamaps_delayed_job - sudo systemctl start metamaps_delayed_job - sudo systemctl status metamaps_delayed_job - -##### after changing - sudo systemctl daemon-reload - sudo systemctl restart metamaps_delayed_job - sudo systemctl status metamaps_delayed_job diff --git a/doc/production/pull-changes.md b/doc/production/pull-changes.md deleted file mode 100644 index 1881c259..00000000 --- a/doc/production/pull-changes.md +++ /dev/null @@ -1,34 +0,0 @@ -## How to pull changes from github to an instance: - -These are the steps we use to pull production code to our server. Feel free to adapt them to your own use. We are using an Ubuntu 14.04 server. - -First, run one of these two code blocks. The first is if you've merged the code into the instance/mycoolinstance already. The second is if you'd like to make the merge on the server. - -EITHER THIS - - git checkout instance/mycoolinstance - git fetch origin instance/mycoolinstance - git reset --hard origin/instance/mycoolinstance - -OR - - git checkout instance/mycoolinstance - git fetch origin master - git merge origin/master - -Now that you have the code, run these commands: - - export RAILS_ENV=production - export NODE_ENV=production - source .env - - bundle install - bundle exec rails db:migrate - # the following includes `npm install`, `npm run build`, `bin/build-apidocs.sh`, `rails perms:fix` - bundle exec rails assets:precompile - passenger-config restart-app . - - forever list #find the uid of the realtime server, e.g. xQKv - forever restart xQKv - - sudo service metamaps_delayed_job restart diff --git a/frontend/README-frontend.md b/frontend/README-frontend.md deleted file mode 100644 index 5d086600..00000000 --- a/frontend/README-frontend.md +++ /dev/null @@ -1,19 +0,0 @@ -To setup javascript dev, first run - - npm install - -to set up your testing environment. Then use - - npm run test - -to see the results of testing the current javascript files. - -To build the javascript files, run - - npm run build - -If you are actively developing and would like any changes to trigger a rebuild, you can use - - npm run build:watch - -instead. diff --git a/frontend/src/Metamaps/Account.js b/frontend/src/Metamaps/Account.js deleted file mode 100644 index 19785797..00000000 --- a/frontend/src/Metamaps/Account.js +++ /dev/null @@ -1,112 +0,0 @@ -/* global $, CanvasLoader */ - -const Account = { - init: function(serverData) { - Account.userIconUrl = serverData['user.png'] - }, - listenersInitialized: false, - userIconUrl: null, - initListeners: function() { - var self = Account - - $('#user_image').change(self.showImagePreview) - self.listenersInitialized = true - }, - toggleChangePicture: function() { - var self = Account - - $('.userImageMenu').toggle() - if (!self.listenersInitialized) self.initListeners() - }, - openChangePicture: function() { - var self = Account - - $('.userImageMenu').show() - if (!self.listenersInitialized) self.initListeners() - }, - closeChangePicture: function() { - $('.userImageMenu').hide() - }, - showLoading: function() { - var loader = new CanvasLoader('accountPageLoading') - loader.setColor('#4FC059') // default is '#000000' - loader.setDiameter(28) // default is 40 - loader.setDensity(41) // default is 40 - loader.setRange(0.9) // default is 1.3 - loader.show() // Hidden by default - $('#accountPageLoading').show() - }, - showImagePreview: function() { - var file = $('#user_image')[0].files[0] - - var reader = new window.FileReader() - - reader.onload = function(e) { - var $canvas = $('').attr({ - width: 84, - height: 84 - }) - var context = $canvas[0].getContext('2d') - var imageObj = new window.Image() - - imageObj.onload = function() { - $('.userImageDiv canvas').remove() - $('.userImageDiv img').hide() - - var imgWidth = imageObj.width - var imgHeight = imageObj.height - - var dimensionToMatch = imgWidth > imgHeight ? imgHeight : imgWidth - // draw cropped image - var nonZero = Math.abs(imgHeight - imgWidth) / 2 - var sourceX = dimensionToMatch === imgWidth ? 0 : nonZero - var sourceY = dimensionToMatch === imgHeight ? 0 : nonZero - var sourceWidth = dimensionToMatch - var sourceHeight = dimensionToMatch - var destX = 0 - var destY = 0 - var destWidth = 84 - var destHeight = 84 - - context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight) - $('.userImageDiv').prepend($canvas) - } - imageObj.src = reader.result - } - - if (file) { - reader.readAsDataURL(file) - $('.userImageMenu').hide() - $('#remove_image').val('0') - } - }, - removePicture: function() { - var self = Account - - $('.userImageDiv canvas').remove() - $('.userImageDiv img').attr('src', self.userIconUrl).show() - $('.userImageMenu').hide() - - var input = $('#user_image') - input.replaceWith(input.val('').clone(true)) - $('#remove_image').val('1') - }, - changeName: function() { - $('.accountName').hide() - $('.changeName').show() - }, - showPass: function() { - $('.toHide').show() - $('.changePass').hide() - }, - hidePass: function() { - $('.toHide').hide() - $('.changePass').show() - - $('#current_password').val('') - $('#user_password').val('') - $('#user_password_confirmation').val('') - } -} - -export default Account diff --git a/frontend/src/Metamaps/Admin.js b/frontend/src/Metamaps/Admin.js deleted file mode 100644 index 9cb80750..00000000 --- a/frontend/src/Metamaps/Admin.js +++ /dev/null @@ -1,49 +0,0 @@ -/* global $ */ - -const Admin = { - selectMetacodes: [], - allMetacodes: [], - init: function() { - var self = Admin - - $('#metacodes_value').val(self.selectMetacodes.toString()) - }, - selectAll: function() { - var self = Admin - - $('.editMetacodes li').removeClass('toggledOff') - self.selectMetacodes = self.allMetacodes.slice(0) - $('#metacodes_value').val(self.selectMetacodes.toString()) - }, - deselectAll: function() { - var self = Admin - - $('.editMetacodes li').addClass('toggledOff') - self.selectMetacodes = [] - $('#metacodes_value').val(0) - }, - liClickHandler: function() { - var self = Admin - - if ($(this).attr('class') !== 'toggledOff') { - $(this).addClass('toggledOff') - const valueToRemove = $(this).attr('id') - self.selectMetacodes.splice(self.selectMetacodes.indexOf(valueToRemove), 1) - $('#metacodes_value').val(self.selectMetacodes.toString()) - } else if ($(this).attr('class') === 'toggledOff') { - $(this).removeClass('toggledOff') - self.selectMetacodes.push($(this).attr('id')) - $('#metacodes_value').val(self.selectMetacodes.toString()) - } - }, - validate: function() { - var self = Admin - - if (self.selectMetacodes.length === 0) { - window.alert('Would you pretty please select at least one metacode for the set?') - return false - } - } -} - -export default Admin diff --git a/frontend/src/Metamaps/GlobalUI/ImportDialog.js b/frontend/src/Metamaps/GlobalUI/ImportDialog.js deleted file mode 100644 index c253512d..00000000 --- a/frontend/src/Metamaps/GlobalUI/ImportDialog.js +++ /dev/null @@ -1,47 +0,0 @@ -/* global $ */ - -import React from 'react' -import ReactDOM from 'react-dom' -import outdent from 'outdent' - -import ImportDialogBox from '../../routes/MapView/ImportDialogBox' - -import PasteInput from '../PasteInput' -import Map from '../Map' - -const ImportDialog = { - openLightbox: null, - closeLightbox: null, - - init: function(serverData, openLightbox, closeLightbox) { - const self = ImportDialog - self.openLightbox = openLightbox - self.closeLightbox = closeLightbox - - $('#lightbox_content').append($(outdent` -
    -
    -
    - `)) - ReactDOM.render(React.createElement(ImportDialogBox, { - onFileAdded: PasteInput.handleFile, - exampleImageUrl: serverData['import-example.png'], - downloadScreenshot: ImportDialog.downloadScreenshot, - onExport: format => () => { - window.open(`${window.location.pathname}/export.${format}`, '_blank') - } - }), $('.importDialogWrapper').get(0)) - }, - show: function() { - ImportDialog.openLightbox('import-dialog') - }, - hide: function() { - ImportDialog.closeLightbox() - }, - downloadScreenshot: function() { - ImportDialog.hide() - Map.offerScreenshotDownload() - } -} - -export default ImportDialog diff --git a/frontend/src/Metamaps/Map/CheatSheet.js b/frontend/src/Metamaps/Map/CheatSheet.js deleted file mode 100644 index 0d968b63..00000000 --- a/frontend/src/Metamaps/Map/CheatSheet.js +++ /dev/null @@ -1,12 +0,0 @@ -/* global $ */ - -const CheatSheet = { - init: function() { - // tab the cheatsheet - $('#cheatSheet').tabs() - $('#quickReference').tabs().addClass('ui-tabs-vertical ui-helper-clearfix') - $('#quickReference .ui-tabs-nav li').removeClass('ui-corner-top').addClass('ui-corner-left') - } -} - -export default CheatSheet diff --git a/frontend/src/components/Notification.js b/frontend/src/components/Notification.js deleted file mode 100644 index 22237aaa..00000000 --- a/frontend/src/components/Notification.js +++ /dev/null @@ -1,127 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import outdent from 'outdent' - -class Notification extends Component { - static propTypes = { - markAsRead: PropTypes.func, - markAsUnread: PropTypes.func, - notification: PropTypes.shape({ - id: PropTypes.number.isRequired, - type: PropTypes.string.isRequired, - subject: PropTypes.string.isRequired, - is_read: PropTypes.bool.isRequired, - created_at: PropTypes.string.isRequired, - actor: PropTypes.shape({ - id: PropTypes.number, - name: PropTypes.string, - image: PropTypes.string, - admin: PropTypes.boolean - }), - object: PropTypes.object, - map: PropTypes.object, - topic: PropTypes.object, - topic1: PropTypes.object, - topic2: PropTypes.object - }) - } - - notificationTextHtml = () => { - const { notification } = this.props - let map, topic, topic1, topic2 - let result = `
    ${notification.actor.name}
    ` - - switch (notification.type) { - case 'ACCESS_APPROVED': - map = notification.data.map - result += outdent`granted your request to edit map - ${map.name}` - break - case 'ACCESS_REQUEST': - map = notification.data.map - result += outdent`wants permission to map with you on - ${map.name}` - if (!notification.data.object.answered) { - result += '
    Offer a response
    ' - } - break - case 'INVITE_TO_EDIT': - map = notification.data.map - result += outdent`gave you edit access to map - ${map.name}` - break - case 'TOPIC_ADDED_TO_MAP': - map = notification.data.map - topic = notification.data.topic - result += outdent`added topic ${topic.name} - to map ${map.name}` - break - case 'TOPIC_CONNECTED_1': - topic1 = notification.data.topic1 - topic2 = notification.data.topic2 - result += outdent`connected ${topic1.name} - to ${topic2.name}` - break - case 'TOPIC_CONNECTED_2': - topic1 = notification.data.topic1 - topic2 = notification.data.topic2 - result += outdent`connected ${topic2.name} - to ${topic1.name}` - break - case 'MESSAGE_FROM_DEVS': - result += notification.subject - } - return {__html: result} - } - - getDate = () => { - const { notification: {created_at} } = this.props - const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - const created = new Date(created_at) - return `${months[created.getMonth()]} ${created.getDate()}` - } - - markAsRead = () => { - const { notification, markAsRead } = this.props - markAsRead(notification.id) - } - - markAsUnread = () => { - const { notification, markAsUnread } = this.props - markAsUnread(notification.id) - } - - render = () => { - const { notification } = this.props - const classes = `notification ${notification.is_read ? 'read' : 'unread'}` - - if (!notification.data.object) { - return null - } - - return
  • - -
    - -
    -
    - -
    - {!notification.is_read &&
    - mark read -
    } - {notification.is_read &&
    - mark unread -
    } -
    -
    - {this.getDate()} -
    -
    -
  • - } -} - -export default Notification diff --git a/frontend/src/routes/Admin.js b/frontend/src/routes/Admin.js deleted file mode 100644 index d48664ef..00000000 --- a/frontend/src/routes/Admin.js +++ /dev/null @@ -1,18 +0,0 @@ -import React, { Component } from 'react' -import NavBar from '../components/NavBar' -import NavBarLink from '../components/NavBarLink' - -class Admin extends Component { - render = () => { - return ( - - - - - - - ) - } -} - -export default Admin diff --git a/frontend/src/routes/MapView/ImportDialogBox.js b/frontend/src/routes/MapView/ImportDialogBox.js deleted file mode 100644 index e9e0539e..00000000 --- a/frontend/src/routes/MapView/ImportDialogBox.js +++ /dev/null @@ -1,43 +0,0 @@ -import React, { Component } from 'react' -import PropTypes from 'prop-types' -import Dropzone from 'react-dropzone' - -class ImportDialogBox extends Component { - handleFile = (files, e) => { - e.preventDefault() // prevent it from triggering the default drag-drop handler - this.props.onFileAdded(files[0]) - } - - render = () => { - return ( -
    -

    EXPORT

    -
    - Export as CSV -
    -
    - Export as JSON -
    -
    - Download screenshot -
    -

    IMPORT

    -

    To upload a file, drop it here:

    - - Drop files here! - -

    See docs.metamaps.cc for instructions.

    -
    - ) - } -} - -ImportDialogBox.propTypes = { - onFileAdded: PropTypes.func, - downloadScreenshot: PropTypes.func, - onExport: PropTypes.func -} - -export default ImportDialogBox diff --git a/frontend/src/routes/makeRoutes.js b/frontend/src/routes/makeRoutes.js deleted file mode 100644 index 06a85259..00000000 --- a/frontend/src/routes/makeRoutes.js +++ /dev/null @@ -1,74 +0,0 @@ -import React from 'react' -import { Route, IndexRoute } from 'react-router' -import Admin from './Admin' -import App from './App' -import Apps from './Apps' -import Maps from './Maps' -import MapView from './MapView' -import Notifications from './Notifications' -import TopicView from './TopicView' - -function nullComponent(props) { - return null -} - -export default function makeRoutes (currentUser) { - const homeComponent = currentUser && currentUser.id ? Maps : nullComponent - return - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} diff --git a/lib/assets/.gitkeep b/lib/assets/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/tasks/.gitkeep b/lib/tasks/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/tasks/emails.rake b/lib/tasks/emails.rake deleted file mode 100644 index a14c840a..00000000 --- a/lib/tasks/emails.rake +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -namespace :metamaps do - desc 'delivers recent map activity digest emails to users' - task deliver_map_activity_emails: :environment do - summarize_map_activity - end - - def summarize_map_activity - Follow.active.where(followed_type: 'Map').find_each do |follow| - map = follow.followed - user = follow.user - # add logging and rescue-ing - # and a notification of failure - next unless MapPolicy.new(user, map).show? # just in case the permission changed - next unless user.emails_allowed - summary_data = MapActivityService.summarize_data(map, user) - next if summary_data[:stats].blank? - MapActivityMailer.daily_summary(user, map, summary_data).deliver_later - end - end -end diff --git a/lib/tasks/extensions.rake b/lib/tasks/extensions.rake deleted file mode 100644 index c60e0058..00000000 --- a/lib/tasks/extensions.rake +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -namespace :assets do - task :js_compile do - system 'npm install' - system 'npm run build' - end - - task :production_ready do - system 'bin/build-apidocs.sh' if Rails.env.production? - Rake::Task['perms:fix'].invoke if Rails.env.production? - end -end - -Rake::Task[:'assets:precompile'].enhance([:'assets:js_compile']) -Rake::Task[:'assets:precompile'].enhance([:'assets:production_ready']) diff --git a/lib/tasks/heroku.rake b/lib/tasks/heroku.rake deleted file mode 100644 index 47829fcf..00000000 --- a/lib/tasks/heroku.rake +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -require 'dotenv/tasks' - -namespace :heroku do - desc 'Generate the Heroku gems manifest from gem dependencies' - task gems: :dotenv do - RAILS_ENV = 'production' - Rake::Task[:environment].invoke - list = Rails.configuration.gems.collect do |g| - _command, *options = g.send(:install_command) - options.join(' ') + "\n" - end - - File.open(File.join(RAILS_ROOT, '.gems'), 'w') do |f| - f.write(list) - end - end -end diff --git a/lib/tasks/perms.rake b/lib/tasks/perms.rake deleted file mode 100644 index 06f76afd..00000000 --- a/lib/tasks/perms.rake +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -require 'dotenv/tasks' - -namespace :perms do - desc 'Update the Unix permissions on the public directory' - task fix: :environment do - # e.g. rake perms:fix user=mmstaging group=mmstaging - # e.g. rake perms:fix group=www-data #probably don't need this one - # e.g. rake perms:fix - user = ENV['user'] || 'metamaps' - group = ENV['group'] || 'metamaps' - public_dir = Rails.root.join('public').to_s - system "chown -R #{user}:#{group} #{public_dir}" - system "find #{public_dir} -type d -exec chmod 755 '{}' \\;" - system "find #{public_dir} -type f -exec chmod 644 '{}' \\;" - end -end diff --git a/log/.gitkeep b/log/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..dbf2d987 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,11845 @@ +{ + "name": "metamaps", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abab": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "dev": true, + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", + "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==" + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, + "acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", + "dev": true, + "requires": { + "acorn": "5.4.1" + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "action-cable-node": { + "version": "github:Connoropolous/action-cable-node#346d691343251b4148ccc0607f87728d4d97f2cd" + }, + "after": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", + "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=" + }, + "ajaxq": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ajaxq/-/ajaxq-0.0.7.tgz", + "integrity": "sha1-lEROXDzvY4NvgP1pPajTcaqVTao=" + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=" + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.0.8.tgz", + "integrity": "sha1-NNyMmB5qyzvhhTvvjw7JSjnVW6A=", + "optional": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "requires": { + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "argh": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/argh/-/argh-0.1.4.tgz", + "integrity": "sha1-PrTWEpc/xrbcbvM49W91nyrFw6Y=", + "optional": true + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.10.0" + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "requires": { + "lodash": "4.17.4" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", + "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=" + }, + "attachmediastream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/attachmediastream/-/attachmediastream-2.0.0.tgz", + "integrity": "sha512-cSwYzcnFoDj+UWl4eRNn8CdQhHIHGGz2Y1bt/Igv0+QRELRLLVAHe6RDjuabEJGSiN5R6bJMDPQDXOSpktqLJQ==" + }, + "attr-accept": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-1.1.0.tgz", + "integrity": "sha1-tc01In8WOTWo8d4Q7T66FpQfa+Y=" + }, + "autolinker": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-1.4.3.tgz", + "integrity": "sha1-LmFQV8jjcTmabXeUmppq8k/kbfw=" + }, + "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.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "requires": { + "babel-core": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.14.1", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.4", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-eslint": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-builder-react-jsx": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", + "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "esutils": "2.0.2" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", + "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-lodash": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.2.11.tgz", + "integrity": "sha1-Icj97J/hg176pzeHPjkCvdZtVwE=", + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4" + } + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=" + }, + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=" + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "requires": { + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "requires": { + "babel-helper-builder-react-jsx": "6.26.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx-self": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", + "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + } + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "requires": { + "babel-plugin-transform-flow-strip-types": "6.22.0" + } + }, + "babel-preset-react": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", + "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "requires": { + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-self": "6.22.0", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-preset-flow": "6.23.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "backbone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.3.3.tgz", + "integrity": "sha1-TMgOp8sWMaxHSInOQPL4vGg7KZk=", + "requires": { + "underscore": "1.8.3" + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "base64-arraybuffer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz", + "integrity": "sha1-R030qfLaJOBd8xWMOx2zw81GoVQ=" + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==" + }, + "base64id": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", + "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=" + }, + "base64url": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-1.0.6.tgz", + "integrity": "sha1-1k03XWinxkDZEuI1jRcNylu1RoE=", + "optional": true, + "requires": { + "concat-stream": "1.4.10", + "meow": "2.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.10.tgz", + "integrity": "sha1-rMO79WAsuMyYDGrIQPp9hgPj7zY=", + "optional": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "1.1.14", + "typedarray": "0.0.6" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "optional": true + } + } + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "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.5" + } + }, + "benchmark": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz", + "integrity": "sha1-Lx4vpMNZ8REiqhgwgiGOlX45DHM=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" + }, + "bindings": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", + "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", + "optional": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "2.1.1", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "requires": { + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.3.2", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "1.9.1" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "requires": { + "color-name": "1.1.3" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "1.0.6" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "bufferutil": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-1.2.1.tgz", + "integrity": "sha1-N75dNuHgZJIiHmjUdLGsWOUQy9c=", + "optional": true, + "requires": { + "bindings": "1.2.1", + "nan": "2.8.0" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camel-case": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-1.2.2.tgz", + "integrity": "sha1-Gsp8TRlTWaLOmVV5NDPG5VQlEfI=", + "requires": { + "sentence-case": "1.1.3", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "camelcase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-1.0.0.tgz", + "integrity": "sha1-vRoRv5sxoc5JNJOpMN4aC69K1+w=", + "optional": true, + "requires": { + "camelcase": "1.2.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "optional": true + } + } + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "change-case": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-2.3.1.tgz", + "integrity": "sha1-LE/ePwY7tB0AzWjg1aCdthy+iU8=", + "optional": true, + "requires": { + "camel-case": "1.2.2", + "constant-case": "1.1.2", + "dot-case": "1.1.2", + "is-lower-case": "1.1.3", + "is-upper-case": "1.1.2", + "lower-case": "1.1.4", + "lower-case-first": "1.0.2", + "param-case": "1.1.2", + "pascal-case": "1.1.2", + "path-case": "1.1.2", + "sentence-case": "1.1.3", + "snake-case": "1.1.2", + "swap-case": "1.1.2", + "title-case": "1.1.2", + "upper-case": "1.1.3", + "upper-case-first": "1.1.2" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash.assignin": "4.2.0", + "lodash.bind": "4.2.1", + "lodash.defaults": "4.2.0", + "lodash.filter": "4.6.0", + "lodash.flatten": "4.4.0", + "lodash.foreach": "4.5.0", + "lodash.map": "4.6.0", + "lodash.merge": "4.6.1", + "lodash.pick": "4.4.0", + "lodash.reduce": "4.6.0", + "lodash.reject": "4.6.0", + "lodash.some": "4.6.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "circular-dependency-plugin": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz", + "integrity": "sha512-yEFtUNUYT4jBykEX5ZOHw+5goA3glGZr9wAXIQqoyakjz5H5TeUmScnWRc52douAhb9eYzK3s7V6bXfNnjFdzg==", + "dev": true + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "classnames": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", + "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=" + }, + "cli-color": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.1.0.tgz", + "integrity": "sha1-3hiM3Ekp2DtnrqBBEPvtQP2/Z3U=", + "optional": true, + "requires": { + "ansi-regex": "2.1.1", + "d": "0.1.1", + "es5-ext": "0.10.38", + "es6-iterator": "2.0.3", + "memoizee": "0.3.10", + "timers-ext": "0.1.2" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "clipboard-js": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/clipboard-js/-/clipboard-js-0.3.5.tgz", + "integrity": "sha1-3z+MZ/RbMQnUNSRnIysN4DkYsiE=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "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=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/color/-/color-0.8.0.tgz", + "integrity": "sha1-iQwHw/1OZJU3Y4kRz2keVFi2/KU=", + "optional": true, + "requires": { + "color-convert": "0.5.3", + "color-string": "0.3.0" + } + }, + "color-convert": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", + "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=", + "optional": true + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "optional": true, + "requires": { + "color-name": "1.1.3" + } + }, + "colornames": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-0.0.2.tgz", + "integrity": "sha1-2BH9bIT1kClJmorEQ2ICk1uSvjE=", + "optional": true + }, + "colorspace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.0.1.tgz", + "integrity": "sha1-yZx5btMRKLmHalLh7l7gOkpxl0k=", + "optional": true, + "requires": { + "color": "0.8.0", + "text-hex": "0.0.0" + } + }, + "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.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "commonmark": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/commonmark/-/commonmark-0.28.1.tgz", + "integrity": "sha1-Buq41SM4uDn6Gi11rwCF7tGxvq4=", + "requires": { + "entities": "1.1.1", + "mdurl": "1.0.1", + "minimist": "1.2.0", + "string.prototype.repeat": "0.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "compressible": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", + "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "compression": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", + "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", + "dev": true, + "requires": { + "accepts": "1.3.4", + "bytes": "3.0.0", + "compressible": "2.0.12", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + } + }, + "configstore": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", + "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", + "requires": { + "dot-prop": "4.2.0", + "graceful-fs": "4.1.11", + "make-dir": "1.1.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.3.0", + "xdg-basedir": "3.0.0" + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "requires": { + "date-now": "0.1.4" + } + }, + "constant-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-1.1.2.tgz", + "integrity": "sha1-jsLKW6ND4Aqjjb9OIA/VrJB+/WM=", + "optional": true, + "requires": { + "snake-case": "1.1.2", + "upper-case": "1.1.3" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "content-type-parser": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", + "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + }, + "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=" + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.10" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" + } + }, + "create-react-class": { + "version": "15.6.3", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", + "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.3" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=" + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + }, + "dependencies": { + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + } + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssom": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", + "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "dev": true + }, + "cssstyle": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", + "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "dev": true, + "requires": { + "cssom": "0.3.2" + } + }, + "csv-parse": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-1.2.1.tgz", + "integrity": "sha1-kZnCPySQ2YxNmrKgFnsGknSYyd8=" + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "d": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", + "requires": { + "es5-ext": "0.10.38" + } + }, + "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" + } + }, + "datatype-expansion": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/datatype-expansion/-/datatype-expansion-0.0.15.tgz", + "integrity": "sha1-2ATEexWs9OgP8ZiNLcTCAYzJfws=", + "optional": true + }, + "date-and-time": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/date-and-time/-/date-and-time-0.3.0.tgz", + "integrity": "sha1-V2pvpgBhEmSk0F5Bpq6E1qUVKiQ=", + "optional": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + }, + "dependencies": { + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + } + } + }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "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 + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "2.0.1" + } + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "diagnostics": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.0.1.tgz", + "integrity": "sha1-rM2wgMgrsl0N1zQwqeaof7tDFUE=", + "optional": true, + "requires": { + "colorspace": "1.0.1", + "enabled": "1.0.2", + "kuler": "0.0.0" + } + }, + "diff": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", + "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "4.0.2" + } + }, + "domhandler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dot-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-1.1.2.tgz", + "integrity": "sha1-HnOCaQDeKNbeVIC8HeMdCEKwa+w=", + "optional": true, + "requires": { + "sentence-case": "1.1.3" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "requires": { + "is-obj": "1.0.1" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "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.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emits": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emits/-/emits-3.0.0.tgz", + "integrity": "sha1-MnUrupXhcHshlWI4Srm7ix/WL3A=", + "optional": true + }, + "emoji-mart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/emoji-mart/-/emoji-mart-1.0.1.tgz", + "integrity": "sha1-DvL9K/S2diqrdIbCbFdDh/A045I=", + "requires": { + "measure-scrollbar": "0.1.0" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "optional": true, + "requires": { + "env-variable": "0.0.3" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "requires": { + "iconv-lite": "0.4.19" + } + }, + "engine.io": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.5.4.tgz", + "integrity": "sha1-xhQQEpEcNQYxwbOQ9TJOtCAuKfI=", + "requires": { + "base64id": "0.1.0", + "debug": "1.0.3", + "engine.io-parser": "1.2.2", + "ws": "0.8.0" + }, + "dependencies": { + "debug": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.3.tgz", + "integrity": "sha1-/IxrLWACgEtAgcAgjg9kYLofo+Q=", + "requires": { + "ms": "0.6.2" + } + }, + "ms": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", + "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=" + } + } + }, + "engine.io-client": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.5.4.tgz", + "integrity": "sha1-xq1lpldSopy5MMaRHledKyjREGw=", + "requires": { + "component-emitter": "1.1.2", + "component-inherit": "0.0.3", + "debug": "1.0.4", + "engine.io-parser": "1.2.2", + "has-cors": "1.0.3", + "indexof": "0.0.1", + "parsejson": "0.0.1", + "parseqs": "0.0.2", + "parseuri": "0.0.4", + "ws": "0.8.0", + "xmlhttprequest": "https://github.com/rase-/node-XMLHttpRequest/archive/a6b6f2.tar.gz" + }, + "dependencies": { + "debug": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.4.tgz", + "integrity": "sha1-W5wla9VLbsAigxdvqKDt5tFUy/g=", + "requires": { + "ms": "0.6.2" + } + }, + "ms": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", + "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=" + }, + "parseuri": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.4.tgz", + "integrity": "sha1-gGWCo5iH4eoY3V4v4OAZAiaOk1A=", + "requires": { + "better-assert": "1.0.2" + } + }, + "xmlhttprequest": { + "version": "https://github.com/rase-/node-XMLHttpRequest/archive/a6b6f2.tar.gz", + "integrity": "sha512-GO6pmHif8rvZ9YddEoem4hQo0OvcTZJnPGyKxBNsFwgEwNYxbpfewye2ulTDAanWXTcfl2+XKE6/DK7SAoKqMw==" + } + } + }, + "engine.io-parser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.2.2.tgz", + "integrity": "sha1-zQgQQf7qOcZDI/95uCqQpyr8zN0=", + "requires": { + "after": "0.8.1", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.2", + "blob": "0.0.4", + "has-binary": "0.1.6", + "utf8": "2.1.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "env-variable": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.3.tgz", + "integrity": "sha1-uGwWQb5WECZ9UG8YBx6nbXBwl8s=", + "optional": true + }, + "enzyme": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-2.9.1.tgz", + "integrity": "sha1-B9XOaRJBJA+4F78sSxjW5TAkDfY=", + "dev": true, + "requires": { + "cheerio": "0.22.0", + "function.prototype.name": "1.1.0", + "is-subset": "0.1.1", + "lodash": "4.17.4", + "object-is": "1.0.1", + "object.assign": "4.1.0", + "object.entries": "1.0.4", + "object.values": "1.0.4", + "prop-types": "15.5.10", + "uuid": "3.2.1" + }, + "dependencies": { + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + } + } + }, + "errno": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", + "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", + "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "es5-ext": { + "version": "0.10.38", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", + "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38", + "es6-symbol": "3.1.1" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.38" + } + } + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.38" + } + } + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.38" + } + } + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.38" + } + } + } + }, + "es6-weak-map": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-0.1.4.tgz", + "integrity": "sha1-cGzvnpmqI2undmwjnIueKG6n0ig=", + "optional": true, + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.38", + "es6-iterator": "0.1.3", + "es6-symbol": "2.0.1" + }, + "dependencies": { + "es6-iterator": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-0.1.3.tgz", + "integrity": "sha1-1vWLjE/EE8JJtLqhl2j45NfIlE4=", + "optional": true, + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.38", + "es6-symbol": "2.0.1" + } + }, + "es6-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-2.0.1.tgz", + "integrity": "sha1-dhtcZ8/U8dGK+yNPaR1nhoLLO/M=", + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.38" + } + } + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", + "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "dev": true, + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.5.7" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.38" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + } + } + }, + "eslint": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz", + "integrity": "sha512-AyxBUCANU/o/xC0ijGMKavo5Ls3oK6xykiOITlMdjFjrKOsqLrA7Nf5cnrDgcKrHzBirclAZt63XO7YZlVUPwA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.3.1", + "concat-stream": "1.6.0", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.3", + "esquery": "1.0.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.3.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.10.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "require-uncached": "1.0.3", + "semver": "5.5.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", + "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", + "dev": true + }, + "eslint-plugin-promise": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz", + "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.6.1.tgz", + "integrity": "sha512-30aMOHWX/DOaaLJVBHz6RMvYM2qy5GH63+y2PLFdIrYe4YLtODFmT3N1YA7ZqUnaBweVbedr4K4cqxOlWAPjIw==", + "dev": true, + "requires": { + "doctrine": "2.1.0", + "has": "1.0.1", + "jsx-ast-utils": "2.0.1", + "prop-types": "15.6.0" + }, + "dependencies": { + "prop-types": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", + "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "dev": true, + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + } + } + }, + "eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", + "dev": true + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz", + "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==", + "dev": true, + "requires": { + "acorn": "5.4.1", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + }, + "esquery": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", + "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "requires": { + "estraverse": "4.2.0", + "object-assign": "4.1.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.38" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.38" + } + } + } + }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "requires": { + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.1.0", + "pause-stream": "0.0.11", + "split": "0.3.3", + "stream-combiner": "0.0.4", + "through": "2.3.8" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "2.2.3" + } + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "dev": true, + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.2", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "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.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + }, + "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=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "fbjs": { + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.17" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "filetransfer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/filetransfer/-/filetransfer-2.0.5.tgz", + "integrity": "sha1-iHyARv5UbsiugVwzAaXDE1+js10=", + "requires": { + "async": "0.9.2", + "iana-hashes": "1.0.3", + "wildemitter": "1.2.0" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + } + } + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "requires": { + "commondir": "1.0.1", + "make-dir": "1.1.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "2.0.0" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "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.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.17" + } + }, + "formatio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", + "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", + "dev": true, + "requires": { + "samsam": "1.3.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.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.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", + "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "is-callable": "1.1.3" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "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=" + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "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" + } + }, + "getscreenmedia": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/getscreenmedia/-/getscreenmedia-4.0.1.tgz", + "integrity": "sha512-HohrC5vRHnWqY2pekte3gknfgpi2V6j9cv+f2wYnXX5r+gBUrMQfqxox41poEcf+iZ88y5D9W1WLw5SJQ5glKA==" + }, + "getusermedia": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/getusermedia/-/getusermedia-1.3.7.tgz", + "integrity": "sha1-RyVzS6t6YDt2tbJiZWcnPMbalaA=", + "requires": { + "webrtc-adapter": "1.4.0" + }, + "dependencies": { + "webrtc-adapter": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-1.4.0.tgz", + "integrity": "sha1-WCiaY9BUxls2+w7zieovbQx/XZg=", + "requires": { + "sdp": "1.5.4" + } + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "global": { + "version": "https://github.com/component/global/archive/v2.0.1.tar.gz", + "integrity": "sha512-O91OcV/NbdmQJPHaRu2ekSP7bqFRLWgqSwaJvqHPZHUwmHBagQYTOra29+LnzzG3lZkXH1ANzHzfCxtAPM9HMA==" + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "requires": { + "ini": "1.3.5" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "safe-buffer": "5.1.1", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "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.5.2", + "har-schema": "2.0.0" + } + }, + "hark": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hark/-/hark-1.1.5.tgz", + "integrity": "sha1-KCTy7Ho/w6wbrnB+W6sUy16jTF0=", + "requires": { + "wildemitter": "1.2.0" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", + "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "has-binary-data": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/has-binary-data/-/has-binary-data-0.1.3.tgz", + "integrity": "sha1-jrsYOItX8ZpSMSdaFvwY1R83mq4=", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "has-cors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.0.3.tgz", + "integrity": "sha1-UCrLmzEE2sM90mMOry+IiwuvTLM=", + "requires": { + "global": "https://github.com/component/global/archive/v2.0.1.tar.gz" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "requires": { + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "dev": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "history": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-3.3.0.tgz", + "integrity": "sha1-/O3M6PEpdTcVRdc1RhAzV5ptrpw=", + "requires": { + "invariant": "2.2.2", + "loose-envify": "1.3.1", + "query-string": "4.3.4", + "warning": "3.0.0" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "dev": true + }, + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + }, + "howler": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/howler/-/howler-2.0.4.tgz", + "integrity": "sha1-y9Xbh1+YM+GqYIRWiVHXiPxof5I=" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.1", + "readable-stream": "2.3.4", + "wbuf": "1.7.2" + } + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "1.0.3" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.7.0", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "http-basic": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-2.5.1.tgz", + "integrity": "sha1-jORHvbW2xXf4pj4/p4BW7Eu02/s=", + "optional": true, + "requires": { + "caseless": "0.11.0", + "concat-stream": "1.6.0", + "http-response-object": "1.1.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.4", + "micromatch": "2.3.11" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "http-response-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-1.1.0.tgz", + "integrity": "sha1-p8TnWq6C87tJBOT0P2FWc7TVGMM=" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "iana-hashes": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/iana-hashes/-/iana-hashes-1.0.3.tgz", + "integrity": "sha1-vqpvIOpIPw8631/+b1lLtQySjKo=", + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6" + } + }, + "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==" + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-1.2.2.tgz", + "integrity": "sha1-25m8xYPrarux5I3LsZmamGBBy2s=", + "optional": true, + "requires": { + "get-stdin": "4.0.1", + "minimist": "1.2.0", + "repeating": "1.1.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "optional": true + }, + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "optional": true, + "requires": { + "is-finite": "1.0.2" + } + } + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.0.0", + "chalk": "2.3.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.1.0", + "figures": "2.0.0", + "lodash": "4.17.4", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "3.7.0" + }, + "dependencies": { + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "requires": { + "loose-envify": "1.3.1" + } + }, + "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=" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + } + } + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "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=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "requires": { + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" + } + }, + "is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", + "optional": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=" + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-odd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", + "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", + "dev": true, + "requires": { + "is-number": "3.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "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-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", + "optional": true, + "requires": { + "upper-case": "1.1.3" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "1.7.3", + "whatwg-fetch": "2.0.3" + } + }, + "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 + }, + "jquery": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", + "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" + }, + "jquery-ujs": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jquery-ujs/-/jquery-ujs-1.2.2.tgz", + "integrity": "sha1-ao7xAg5rbdo4W5CkvdwSjCHFY5c=", + "requires": { + "jquery": "3.2.1" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsdom": { + "version": "11.6.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.6.2.tgz", + "integrity": "sha512-pAeZhpbSlUp5yQcS6cBQJwkbzmv4tWFaYxHbFVSxzXefqjvtRA851Z5N2P+TguVG9YeUDcgb8pdeVQRJh0XR3Q==", + "dev": true, + "requires": { + "abab": "1.0.4", + "acorn": "5.4.1", + "acorn-globals": "4.1.0", + "array-equal": "1.0.0", + "browser-process-hrtime": "0.1.2", + "content-type-parser": "1.0.2", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "domexception": "1.0.1", + "escodegen": "1.9.0", + "html-encoding-sniffer": "1.0.2", + "left-pad": "1.2.0", + "nwmatcher": "1.4.3", + "parse5": "4.0.0", + "pn": "1.1.0", + "request": "2.83.0", + "request-promise-native": "1.0.5", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.3", + "w3c-hr-time": "1.0.1", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.3", + "whatwg-url": "6.4.0", + "ws": "4.0.0", + "xml-name-validator": "3.0.0" + }, + "dependencies": { + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "ws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", + "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + } + } + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + }, + "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-compatibility": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/json-schema-compatibility/-/json-schema-compatibility-1.1.0.tgz", + "integrity": "sha1-GomBd4zaDDgYcpjZmdCJ5Rrygt8=" + }, + "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=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "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 + }, + "json3": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.2.6.tgz", + "integrity": "sha1-9u/JPAagTemuxTBT3yVZuxniA4s=" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "optional": 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" + } + }, + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", + "dev": true, + "requires": { + "array-includes": "3.0.3" + } + }, + "killable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "know-your-http-well": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/know-your-http-well/-/know-your-http-well-0.2.0.tgz", + "integrity": "sha1-E5IhCQtfl2JE6Xyq4RYUOYOdr+8=", + "optional": true, + "requires": { + "amdefine": "0.0.8" + } + }, + "kuler": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-0.0.0.tgz", + "integrity": "sha1-tmu0a5NOVQ9Z2BiEjgq7pPf1VTw=", + "optional": true, + "requires": { + "colornames": "0.0.2" + } + }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "requires": { + "package-json": "4.0.1" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "1.0.0" + } + }, + "left-pad": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz", + "integrity": "sha1-0wpzxrggHY99jnlWupYWCHpo4O4=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=" + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "localmedia": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/localmedia/-/localmedia-2.2.1.tgz", + "integrity": "sha1-P9WU66gOceeRYfvVtibXL6UG58Q=", + "requires": { + "getscreenmedia": "1.5.6", + "getusermedia": "1.3.7", + "hark": "1.1.5", + "mediastream-gain": "1.0.1", + "mockconsole": "0.0.1", + "webrtcsupport": "2.2.0", + "wildemitter": "1.2.0" + }, + "dependencies": { + "getscreenmedia": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/getscreenmedia/-/getscreenmedia-1.5.6.tgz", + "integrity": "sha1-pbJEsuOLOXhEtDg5piuPrzsTPK0=", + "requires": { + "getusermedia": "2.0.1" + }, + "dependencies": { + "getusermedia": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/getusermedia/-/getusermedia-2.0.1.tgz", + "integrity": "sha1-+Br5eVvFk0ZJgT99CS3WUDCzRlU=", + "requires": { + "webrtc-adapter": "2.1.0" + } + } + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash-es": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.5.tgz", + "integrity": "sha512-Ez3ONp3TK9gX1HYKp6IhetcVybD+2F+Yp6GS9dfH8ue6EOCEzQtQEh4K0FYWBP9qLv+lzeQAYXw+3ySfxyZqkw==" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basecreate": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", + "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "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.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "dev": true + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "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=" + }, + "lodash.create": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", + "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "optional": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "optional": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", + "dev": true + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", + "dev": true + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "2.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "loglevelnext": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.3.tgz", + "integrity": "sha512-OCxd/b78TijTB4b6zVqLbMrxhebyvdZKwqpL0VHUZ0pYhavXaPD4l6Xrr4n5xqTYWiqtb0i7ikSoJY/myQ/Org==", + "dev": true + }, + "lolex": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", + "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "loophole": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loophole/-/loophole-1.1.0.tgz", + "integrity": "sha1-N5Sf6kU7YlasxyXDIM4MWn9wor0=", + "optional": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", + "optional": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "optional": true, + "requires": { + "es5-ext": "0.10.38" + } + }, + "lrucache": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/lrucache/-/lrucache-0.2.0.tgz", + "integrity": "sha1-Htx9yEVFSlx7a9DPMC8TuFs/Bto=", + "optional": true + }, + "make-dir": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", + "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "requires": { + "pify": "3.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "1.0.1" + } + }, + "marked": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.12.tgz", + "integrity": "sha512-k4NaW+vS7ytQn6MgJn3fYpQt20/mOgYM5Ft9BYMfQJDz2QT6yEeS9XJ8k2Nw8JTeWK/znPPW2n3UJGzyYEiMoA==" + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "measure-scrollbar": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/measure-scrollbar/-/measure-scrollbar-0.1.0.tgz", + "integrity": "sha512-8n7yR0PVrp/YmvWoRuiumlA0l6+joJg6PA5/uFb8frsd7ZV2It1tnNjqCrLNuMtU7yOPqJiYmm7+VwcWQwvqRQ==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "mediastream-gain": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mediastream-gain/-/mediastream-gain-1.0.1.tgz", + "integrity": "sha1-SrrVeL2uviXLZViYkx2IFe5uY2A=", + "requires": { + "webrtcsupport": "1.3.2" + }, + "dependencies": { + "webrtcsupport": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/webrtcsupport/-/webrtcsupport-1.3.2.tgz", + "integrity": "sha1-Thd3RxqtpI9fSo6Jnpdde4HSjwA=" + } + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "1.2.0" + } + }, + "memoizee": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.3.10.tgz", + "integrity": "sha1-TsoNiu057J0Bf0xcLy9kMvQuXI8=", + "optional": true, + "requires": { + "d": "0.1.1", + "es5-ext": "0.10.38", + "es6-weak-map": "0.1.4", + "event-emitter": "0.3.5", + "lru-queue": "0.1.0", + "next-tick": "0.2.2", + "timers-ext": "0.1.2" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "0.1.6", + "readable-stream": "2.3.4" + } + }, + "meow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-2.0.0.tgz", + "integrity": "sha1-j1MKjs9dQNP0tN+Tw0cpAPuiqPE=", + "optional": true, + "requires": { + "camelcase-keys": "1.0.0", + "indent-string": "1.2.2", + "minimist": "1.2.0", + "object-assign": "1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "optional": true + }, + "object-assign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-1.0.0.tgz", + "integrity": "sha1-5l3Idm07R7S4MHRlyDEdoDCwcKY=", + "optional": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minimize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/minimize/-/minimize-2.0.0.tgz", + "integrity": "sha1-emssOzrVlkidDUTX/QpvPi3krT8=", + "optional": true, + "requires": { + "argh": "0.1.4", + "async": "2.0.1", + "cli-color": "1.1.0", + "diagnostics": "1.0.1", + "emits": "3.0.0", + "htmlparser2": "3.9.2", + "node-uuid": "1.4.8" + }, + "dependencies": { + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "optional": true, + "requires": { + "lodash": "4.17.4" + } + } + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.8", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "he": "1.1.1", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "supports-color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "mocha-webpack": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/mocha-webpack/-/mocha-webpack-0.7.0.tgz", + "integrity": "sha1-065ax93PKc+UfosO7Xc/pCKODM4=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "fs-extra": "0.30.0", + "glob-parent": "2.0.0", + "interpret": "1.1.0", + "invariant": "2.2.2", + "is-glob": "2.0.1", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "normalize-path": "2.1.1", + "object-hash": "1.2.0", + "webpack-info-plugin": "0.1.0", + "webpack-sources": "0.1.5", + "yargs": "4.8.1" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.5.7" + } + }, + "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 + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "lodash.assign": "4.2.0", + "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", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.2.0" + } + } + } + }, + "mockconsole": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/mockconsole/-/mockconsole-0.0.1.tgz", + "integrity": "sha1-1ip+2FUwlkq80k7bnzD6WLvOVsY=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "1.3.1", + "thunky": "1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "optional": true + }, + "nanomatch": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz", + "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "is-odd": "1.0.0", + "kind-of": "5.1.0", + "object.pick": "1.3.0", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "next-tick": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz", + "integrity": "sha1-ddpKkn7liH45BliABltzNkE7MQ0=", + "optional": true + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "0.1.12", + "is-stream": "1.1.0" + } + }, + "node-forge": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", + "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", + "dev": true + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.4", + "stream-browserify": "2.0.1", + "stream-http": "2.8.0", + "string_decoder": "1.0.3", + "timers-browserify": "2.0.6", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" + }, + "nodemon": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.17.1.tgz", + "integrity": "sha512-p6+IG/eJyprjRd95na0efIWl3ONITHydCdl7btEIZttvnmXX4aqxIE45Aj+zeT0llJIUfJnZNyAX14XIdjJtmw==", + "requires": { + "chokidar": "2.0.2", + "debug": "3.1.0", + "ignore-by-default": "1.0.1", + "minimatch": "3.0.4", + "pstree.remy": "1.1.0", + "semver": "5.5.0", + "supports-color": "5.3.0", + "touch": "3.1.0", + "undefsafe": "2.0.2", + "update-notifier": "2.3.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "3.1.9", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "chokidar": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", + "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.1", + "fsevents": "1.1.3", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + } + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "2.0.1" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nunjucks": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-2.5.2.tgz", + "integrity": "sha1-6n00bnhbikh0Zmw8yp4YxXf7oiw=", + "optional": true, + "requires": { + "asap": "2.0.6", + "chokidar": "1.7.0", + "yargs": "3.32.0" + } + }, + "nunjucks-markdown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nunjucks-markdown/-/nunjucks-markdown-2.0.1.tgz", + "integrity": "sha1-1V51Qzo1hQ4sNFZR/j+THtmxVqI=", + "optional": true + }, + "nwmatcher": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", + "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==", + "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", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + } + } + }, + "object-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz", + "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, + "object-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.1.tgz", + "integrity": "sha1-VYAuhYQsJru167wVer874wJWm6g=" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.11" + }, + "dependencies": { + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + } + } + }, + "object.entries": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", + "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.10.0", + "function-bind": "1.1.1", + "has": "1.0.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "object.values": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.10.0", + "function-bind": "1.1.1", + "has": "1.0.1" + } + }, + "obuf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "opn": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz", + "integrity": "sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "original": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "1.0.5" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "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=" + }, + "outdent": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.3.0.tgz", + "integrity": "sha1-+tGKnAYaCTjzjoBx0WxAJEI/QyM=" + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "1.2.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "requires": { + "got": "6.7.1", + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0", + "semver": "5.5.0" + } + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + }, + "param-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-1.1.2.tgz", + "integrity": "sha1-3LCRpDwlm5Io8cNB57akTqC/l0M=", + "optional": true, + "requires": { + "sentence-case": "1.1.3" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "requires": { + "asn1.js": "4.9.2", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "1.3.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "parsejson": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.1.tgz", + "integrity": "sha1-mxDGwNglq1ieaFFTgm3go7oni8w=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.2.tgz", + "integrity": "sha1-nf5wss3aw4i95PNbHyQPpYrb5sc=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.2.tgz", + "integrity": "sha1-20GHjy1pZHGL6HCzFAlz2Ak74VY=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascal-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-1.1.2.tgz", + "integrity": "sha1-Pl1kogBDgwp8STRMLXS0G+DJyZs=", + "optional": true, + "requires": { + "camel-case": "1.2.2", + "upper-case-first": "1.1.2" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=" + }, + "path-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-1.1.2.tgz", + "integrity": "sha1-UM5roNO+090LXCqcRVNpdDRAlRQ=", + "optional": true, + "requires": { + "sentence-case": "1.1.3" + } + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "requires": { + "through": "2.3.8" + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" + } + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "2.1.0" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", + "optional": true + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "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==" + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "2.0.6" + } + }, + "promise-polyfill": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-5.2.1.tgz", + "integrity": "sha1-u61wTnbJgMGW2vJhytRk/L1NdaQ=", + "optional": true + }, + "prop-types": { + "version": "15.5.10", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", + "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1" + } + }, + "proxy-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", + "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.5.2" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "ps-tree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "requires": { + "event-stream": "3.3.4" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "pstree.remy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.0.tgz", + "integrity": "sha512-q5I5vLRMVtdWa8n/3UEzZX7Lfghzrg9eG2IKk2ENLSofKRCXVqMvMUHxCKgXNaqH/8ebhBxrqftHWnyTFweJ5Q==", + "requires": { + "ps-tree": "1.1.0" + } + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.6" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "optional": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "querystringify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "raml-1-parser": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/raml-1-parser/-/raml-1-parser-1.1.9.tgz", + "integrity": "sha1-cXGx0iUS8EPIP6NilyBNNfHroAI=", + "optional": true, + "requires": { + "base64url": "1.0.6", + "change-case": "2.3.1", + "concat-stream": "1.6.0", + "http-response-object": "1.1.0", + "invariant": "2.2.2", + "json-schema-compatibility": "1.1.0", + "json-stable-stringify": "1.0.1", + "loophole": "1.1.0", + "lrucache": "0.2.0", + "marked": "0.3.12", + "media-typer": "0.3.0", + "mkdirp": "0.5.1", + "pluralize": "1.2.1", + "promise-polyfill": "5.2.1", + "q": "1.5.1", + "raml-definition-system": "0.0.52", + "then-request": "2.2.0", + "ts-model": "0.0.12", + "ts-structure-parser": "0.0.12", + "typescript-compiler": "1.4.1-2", + "underscore": "1.8.3", + "wrench": "1.5.9", + "xhr2": "0.1.4", + "xmldom": "0.1.27", + "xmlhttprequest": "1.8.0", + "yaml-ast-parser": "0.0.30", + "z-schema": "3.19.1" + } + }, + "raml-definition-system": { + "version": "0.0.52", + "resolved": "https://registry.npmjs.org/raml-definition-system/-/raml-definition-system-0.0.52.tgz", + "integrity": "sha1-iMG5uVbu3CKsRDVzL7Az4onaaZU=", + "optional": true, + "requires": { + "know-your-http-well": "0.2.0", + "raml-typesystem": "0.0.58", + "ts-structure-parser": "0.0.12", + "underscore": "1.8.3" + } + }, + "raml-json-validation": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/raml-json-validation/-/raml-json-validation-0.0.6.tgz", + "integrity": "sha1-U9K5+b7lj4iDH7mc9mMxkZ6XSJw=", + "optional": true, + "requires": { + "z-schema": "3.19.1" + } + }, + "raml-typesystem": { + "version": "0.0.58", + "resolved": "https://registry.npmjs.org/raml-typesystem/-/raml-typesystem-0.0.58.tgz", + "integrity": "sha1-FJCiL0eIUIpqAHTc0ppL3UvZ9Hk=", + "optional": true, + "requires": { + "date-and-time": "0.3.0", + "json-schema-compatibility": "1.1.0", + "lrucache": "1.0.3", + "raml-json-validation": "0.0.6", + "raml-xml-validation": "0.0.5", + "underscore": "1.8.3", + "xml2js": "0.4.19", + "xmldom": "0.1.27" + }, + "dependencies": { + "lrucache": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/lrucache/-/lrucache-1.0.3.tgz", + "integrity": "sha1-Ox3tDRuoLhiLm9q6nu5khvhkpDQ=", + "optional": true + } + } + }, + "raml-xml-validation": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/raml-xml-validation/-/raml-xml-validation-0.0.5.tgz", + "integrity": "sha1-bkOfKtaQbBgHg6LyuS0kzlAfOdw=", + "optional": true, + "requires": { + "xmllint-jsparser": "0.0.3" + } + }, + "raml2html": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/raml2html/-/raml2html-4.0.5.tgz", + "integrity": "sha1-X+8qpBRnbT9Rwbzx8mJQO1+WK7E=", + "optional": true, + "requires": { + "commander": "2.9.0", + "marked": "0.3.12", + "minimize": "2.0.0", + "nunjucks": "2.5.2", + "nunjucks-markdown": "2.0.1", + "raml2obj": "4.0.4" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "optional": true, + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "raml2obj": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/raml2obj/-/raml2obj-4.0.4.tgz", + "integrity": "sha1-RLEE4dbSuhBLkB3ldOEeoiI69Ys=", + "optional": true, + "requires": { + "datatype-expansion": "0.0.15", + "raml-1-parser": "1.1.9" + } + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz", + "integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=", + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "react": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/react/-/react-15.6.1.tgz", + "integrity": "sha1-uqhDTsZ4C96ZfNw4C3nNM7ljk98=", + "requires": { + "create-react-class": "15.6.3", + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.5.10" + } + }, + "react-addons-test-utils": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz", + "integrity": "sha1-wStu/cIkfBDae4dw0YUICnsEcVY=", + "dev": true + }, + "react-dom": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.1.tgz", + "integrity": "sha1-LLDtQZEDjlPCCes6eaI+Kkz5lHA=", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "prop-types": "15.5.10" + } + }, + "react-draggable": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.0.3.tgz", + "integrity": "sha512-ekb3dKvZFC6QaBNBpAWwGk9aoaDPkSVkrZl/LEU92THoX72Pv6uQ2ZpfYjmBrbrTQcAYmuUAkp9pHJ7j8FUYJA==", + "requires": { + "classnames": "2.2.5", + "prop-types": "15.5.10" + } + }, + "react-dropzone": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-4.1.2.tgz", + "integrity": "sha512-W7SpZcxbyb9uc5XrFL5TlvpjcV+5TR9anoalxTDBJtdJ/pi0U9RO8oVlSw/NjNEgAzbYSFdd6s426PxQpSRhEw==", + "requires": { + "attr-accept": "1.1.0", + "prop-types": "15.5.10" + } + }, + "react-onclickoutside": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.5.0.tgz", + "integrity": "sha512-ZFOU8otUeGn0VPdRVurAmRhyXIgejoconCUJ1g9TB/aorbkNiY8PBEKKwZqI1/SffrH/VFDSNH5L5xA4RKz66g==" + }, + "react-router": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-3.0.5.tgz", + "integrity": "sha1-w7eHN1gEWou8lWKu9P9LyMznwTY=", + "requires": { + "create-react-class": "15.6.3", + "history": "3.3.0", + "hoist-non-react-statics": "1.2.0", + "invariant": "2.2.2", + "loose-envify": "1.3.1", + "prop-types": "15.5.10", + "warning": "3.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "readable-stream": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", + "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.4", + "set-immediate-shim": "1.0.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + }, + "dependencies": { + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + } + } + }, + "redux": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", + "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", + "requires": { + "lodash": "4.17.4", + "lodash-es": "4.17.5", + "loose-envify": "1.3.1", + "symbol-observable": "1.2.0" + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", + "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "requires": { + "extend-shallow": "2.0.1" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "requires": { + "rc": "1.2.5", + "safe-buffer": "5.1.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "requires": { + "rc": "1.2.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "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", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + }, + "dependencies": { + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "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 + } + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "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=" + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "riek": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/riek/-/riek-1.1.0.tgz", + "integrity": "sha1-6oVNtKTtCWIw/wQ4JQjW374pWZQ=", + "requires": { + "debug": "2.6.9", + "prop-types": "15.5.10" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "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.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "rtcpeerconnection": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/rtcpeerconnection/-/rtcpeerconnection-5.2.1.tgz", + "integrity": "sha1-VGVaguBdzY4y+9RQJsztrtaN7GQ=", + "requires": { + "lodash.clonedeep": "4.5.0", + "sdp-jingle-json": "3.0.2", + "traceablepeerconnection": "1.2.0", + "webrtc-adapter": "2.1.0", + "wildemitter": "1.2.0" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "samsam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", + "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "sdp": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-1.5.4.tgz", + "integrity": "sha1-jgOPbdsUvXZa4fS1IW4SCUUR4NA=" + }, + "sdp-jingle-json": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sdp-jingle-json/-/sdp-jingle-json-3.0.2.tgz", + "integrity": "sha512-6Iz5ZRRnpbfdqrV/dF1/LXKicIpCT/cnu/XcZK3VzGuTeA6m7+fymFN4vGVPD9oJks20gyUUCZvhflKMPOv3dQ==" + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.2.tgz", + "integrity": "sha1-tESVgNmZKbZbEKSDiTAaZZIIh1g=", + "dev": true, + "requires": { + "node-forge": "0.7.1" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "requires": { + "semver": "5.5.0" + } + }, + "send": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + } + }, + "sentence-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-1.1.3.tgz", + "integrity": "sha1-gDSq/CFFdy06vhUJqkLJ4QQtwTk=", + "requires": { + "lower-case": "1.1.4" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.2", + "mime-types": "2.1.17", + "parseurl": "1.3.2" + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-getter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "requires": { + "to-object-path": "0.3.0" + } + }, + "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=" + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", + "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simplewebrtc": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/simplewebrtc/-/simplewebrtc-2.2.2.tgz", + "integrity": "sha1-+CbxRWxD+g5nJjHfudcH+2Iv36A=", + "requires": { + "attachmediastream": "1.4.2", + "filetransfer": "2.0.5", + "localmedia": "2.2.1", + "mockconsole": "0.0.1", + "rtcpeerconnection": "5.2.1", + "socket.io-client": "1.3.7", + "webrtcsupport": "2.2.0", + "wildemitter": "1.2.0" + }, + "dependencies": { + "attachmediastream": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/attachmediastream/-/attachmediastream-1.4.2.tgz", + "integrity": "sha1-t3VkxzNIlhCm602QlvCYgY5DfR4=", + "requires": { + "webrtc-adapter": "2.1.0" + } + } + } + }, + "sinon": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.2.0.tgz", + "integrity": "sha1-OxtC/13vy/UaUqYqym1hFxuf0mI=", + "dev": true, + "requires": { + "diff": "3.2.0", + "formatio": "1.2.0", + "lolex": "1.6.0", + "native-promise-only": "0.8.1", + "path-to-regexp": "1.7.0", + "samsam": "1.3.0", + "text-encoding": "0.6.4", + "type-detect": "4.0.8" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "snake-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-1.1.2.tgz", + "integrity": "sha1-DC8l4wUVjZoY09l3BmGH/vilpmo=", + "requires": { + "sentence-case": "1.1.3" + } + }, + "snapdragon": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", + "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.1", + "use": "2.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "3.2.2" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "socket.io": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.3.7.tgz", + "integrity": "sha1-k3R6KbyrYmbw++GREsyl4TiM960=", + "requires": { + "debug": "2.1.0", + "engine.io": "1.5.4", + "has-binary-data": "0.1.3", + "socket.io-adapter": "0.3.1", + "socket.io-client": "1.3.7", + "socket.io-parser": "2.2.4" + }, + "dependencies": { + "debug": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.0.tgz", + "integrity": "sha1-M6uRVlnYwsyKQUQ9lNbr03aX7SE=", + "requires": { + "ms": "0.6.2" + } + }, + "ms": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", + "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=" + } + } + }, + "socket.io-adapter": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.3.1.tgz", + "integrity": "sha1-34H5cLTfZJOQLZPlGce3J1XDqVg=", + "requires": { + "debug": "1.0.2", + "object-keys": "1.0.1", + "socket.io-parser": "2.2.2" + }, + "dependencies": { + "debug": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-1.0.2.tgz", + "integrity": "sha1-OElZHBDM5khHbDx8Li40FttZY8Q=", + "requires": { + "ms": "0.6.2" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "ms": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", + "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=" + }, + "socket.io-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.2.tgz", + "integrity": "sha1-PXr2tkSX6Va32f53X5mXFgJ/lBc=", + "requires": { + "benchmark": "1.0.0", + "component-emitter": "1.1.2", + "debug": "0.7.4", + "isarray": "0.0.1", + "json3": "3.2.6" + }, + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" + } + } + } + } + }, + "socket.io-client": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.3.7.tgz", + "integrity": "sha1-erfAabjVBCXrJl8DH4Spfm6+cZw=", + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.1.2", + "debug": "0.7.4", + "engine.io-client": "1.5.4", + "has-binary": "0.1.6", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.2", + "socket.io-parser": "2.2.4", + "to-array": "0.1.3" + }, + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" + } + } + }, + "socket.io-parser": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.4.tgz", + "integrity": "sha1-+c4ZvxkJYIzrFdl3IeI7/dHnz2U=", + "requires": { + "benchmark": "1.0.0", + "component-emitter": "1.1.2", + "debug": "0.7.4", + "isarray": "0.0.1", + "json3": "3.2.6" + }, + "dependencies": { + "debug": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.2.1" + }, + "dependencies": { + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + } + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.2.0" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "requires": { + "atob": "2.0.3", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "0.5.7" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.1", + "select-hose": "2.0.0", + "spdy-transport": "2.0.20" + } + }, + "spdy-transport": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.1", + "readable-stream": "2.3.4", + "safe-buffer": "5.1.1", + "wbuf": "1.7.2" + } + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "requires": { + "through": "2.3.8" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "requires": { + "duplexer": "0.1.1" + } + }, + "stream-http": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", + "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string.prototype.repeat": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-0.2.0.tgz", + "integrity": "sha1-q6Nt4I3O5qWjN9SbLqHaGyj8Ds8=" + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "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=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", + "optional": true, + "requires": { + "lower-case": "1.1.4", + "upper-case": "1.1.3" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "symbol-tree": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", + "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", + "dev": true + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.1", + "lodash": "4.17.4", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "requires": { + "execa": "0.7.0" + } + }, + "text-encoding": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", + "dev": true + }, + "text-hex": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-0.0.0.tgz", + "integrity": "sha1-V4+8haapJjbkLdF7QdAhjM6esrM=", + "optional": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "then-request": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-2.2.0.tgz", + "integrity": "sha1-ZnizL6DKIY/laZgbvYhxtZQGDYE=", + "optional": true, + "requires": { + "caseless": "0.11.0", + "concat-stream": "1.6.0", + "http-basic": "2.5.1", + "http-response-object": "1.1.0", + "promise": "7.3.1", + "qs": "6.5.1" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "thunky": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", + "dev": true + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "timers-browserify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", + "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "requires": { + "setimmediate": "1.0.5" + } + }, + "timers-ext": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", + "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", + "requires": { + "es5-ext": "0.10.38", + "next-tick": "1.0.0" + }, + "dependencies": { + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + } + } + }, + "title-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-1.1.2.tgz", + "integrity": "sha1-+uSmrlRr+iLQg6DuqRCkDRLtT1o=", + "optional": true, + "requires": { + "sentence-case": "1.1.3", + "upper-case": "1.1.3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-array": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.3.tgz", + "integrity": "sha1-1F2txjY0F/YPKEdP6lDs3btPSZE=" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "3.2.2" + } + }, + "to-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", + "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", + "requires": { + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "regex-not": "1.0.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + } + } + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "1.0.10" + } + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, + "traceablepeerconnection": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/traceablepeerconnection/-/traceablepeerconnection-1.2.0.tgz", + "integrity": "sha1-wSaKzOqLfZ5c11GXiMjvz8Pa7ys=", + "requires": { + "webrtc-adapter": "1.4.0", + "wildemitter": "1.2.0" + }, + "dependencies": { + "webrtc-adapter": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-1.4.0.tgz", + "integrity": "sha1-WCiaY9BUxls2+w7zieovbQx/XZg=", + "requires": { + "sdp": "1.5.4" + } + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "ts-model": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/ts-model/-/ts-model-0.0.12.tgz", + "integrity": "sha1-5Tp8Jt4GRUJ677YhFnaCy5flboE=", + "optional": true, + "requires": { + "underscore": "1.8.3" + } + }, + "ts-structure-parser": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/ts-structure-parser/-/ts-structure-parser-0.0.12.tgz", + "integrity": "sha1-+V9fJ7DzfZe8CG4Ud6ClWol5VNo=", + "requires": { + "typescript": "1.8.7", + "underscore": "1.8.3" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "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.1.1" + } + }, + "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 + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.7.tgz", + "integrity": "sha1-NeODjeMckc/h2MIODleF04aTikk=" + }, + "typescript-compiler": { + "version": "1.4.1-2", + "resolved": "https://registry.npmjs.org/typescript-compiler/-/typescript-compiler-1.4.1-2.tgz", + "integrity": "sha1-uk99si2RU0oZKdkACdzhYety/T8=", + "optional": true + }, + "ua-parser-js": { + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", + "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==" + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.0" + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" + }, + "undefsafe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "requires": { + "debug": "2.6.9" + } + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=" + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "requires": { + "crypto-random-string": "1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "upath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.0.tgz", + "integrity": "sha1-tHBrlGHKhHOt+JEz0jVonKF/NlY=", + "requires": { + "lodash": "3.10.1", + "underscore.string": "2.3.3" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } + } + }, + "update-notifier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", + "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", + "requires": { + "boxen": "1.3.0", + "chalk": "2.3.2", + "configstore": "3.1.1", + "import-lazy": "2.1.0", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "requires": { + "color-name": "1.1.3" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", + "requires": { + "upper-case": "1.1.3" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + } + } + }, + "url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "dev": true + }, + "url-parse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", + "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "1.0.4" + } + }, + "use": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", + "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", + "requires": { + "define-property": "0.2.5", + "isobject": "3.0.1", + "lazy-cache": "2.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "requires": { + "set-getter": "0.1.0" + } + } + } + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=" + }, + "utf-8-validate": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-1.2.2.tgz", + "integrity": "sha1-i7hxpHQeCFxwSHynrNvX1tNgKes=", + "optional": true, + "requires": { + "bindings": "1.2.1", + "nan": "2.4.0" + }, + "dependencies": { + "nan": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", + "optional": true + } + } + }, + "utf8": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.0.tgz", + "integrity": "sha1-DP7FyAUtRKI+OqqQgQToB1+V39U=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "requires": { + "user-home": "1.1.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "validator": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.0.tgz", + "integrity": "sha512-ftkCYp/7HrGdybVCuwSje07POAd93ksZJpb5GVDBzm8SLKIm3QMJcZugb5dOJsONBoWhIXl0jtoGHTyou3DAgA==", + "optional": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "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.3.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "requires": { + "indexof": "0.0.1" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "0.1.2" + } + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "1.3.1" + } + }, + "watchpack": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "requires": { + "async": "2.5.0", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + } + }, + "wbuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.0" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "3.5.6", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.5.6.tgz", + "integrity": "sha512-sXnxfx6KoZVrFAGLjdhCCwDtDwkYMfwm8mJjkQv3thr5pjTlbxopVlr/kJwc9Bz317gL+gNjvz++ir9TgG1MDg==", + "requires": { + "acorn": "5.4.1", + "acorn-dynamic-import": "2.0.2", + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "async": "2.5.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.4.0", + "webpack-sources": "1.1.0", + "yargs": "8.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "2.0.0" + } + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.5.tgz", + "integrity": "sha512-EPXudTrpQLksLt9klR0spnb7mt4dHtk3amGnohZNeQ+Y2QSqBbnWA7uNZ9+rqyfhEcYw18pUwcGIXuPFvIIELQ==", + "dev": true, + "requires": { + "loud-rejection": "1.6.0", + "memory-fs": "0.4.1", + "mime": "2.2.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "url-join": "2.0.5", + "webpack-log": "1.1.2" + }, + "dependencies": { + "mime": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz", + "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.1.tgz", + "integrity": "sha512-ombhu5KsO/85sVshIDTyQ5HF3xjZR3N0sf5Ao6h3vFwpNyzInEzA1GV3QPVjTMLTNckp8PjfG1PFGznzBwS5lg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "3.0.3", + "bonjour": "3.5.0", + "chokidar": "2.0.1", + "compression": "1.7.1", + "connect-history-api-fallback": "1.5.0", + "debug": "3.1.0", + "del": "3.0.0", + "express": "4.16.2", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.17.4", + "import-local": "1.0.0", + "internal-ip": "1.2.0", + "ip": "1.1.5", + "killable": "1.0.0", + "loglevel": "1.6.1", + "opn": "5.2.0", + "portfinder": "1.0.13", + "selfsigned": "1.10.2", + "serve-index": "1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.1.4", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "5.2.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.5", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", + "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.1" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "chokidar": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.1.tgz", + "integrity": "sha512-rv5iP8ENhpqvDWr677rAXcB+SMoPQ1urd4ch79+PhM4lQwbATdJUQK69t0lJIKNB+VXpqxt5V1gvqs59XEPKnw==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.0", + "fsevents": "1.1.3", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.2" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "micromatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz", + "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.0", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.7", + "object.pick": "1.3.0", + "regex-not": "1.0.0", + "snapdragon": "0.8.1", + "to-regex": "3.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "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 + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "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": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "webpack-info-plugin": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/webpack-info-plugin/-/webpack-info-plugin-0.1.0.tgz", + "integrity": "sha1-3/56qI/LlsWcxFCXZCHq+YzbeQE=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "webpack-log": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.1.2.tgz", + "integrity": "sha512-B53SD4N4BHpZdUwZcj4st2QT7gVfqZtqHDruC1N+K2sciq0Rt/3F1Dx6RlylVkcrToMLTaiaeT48k9Lq4iDVDA==", + "dev": true, + "requires": { + "chalk": "2.3.1", + "log-symbols": "2.2.0", + "loglevelnext": "1.0.3", + "uuid": "3.2.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + } + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "webrtc-adapter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-2.1.0.tgz", + "integrity": "sha1-YStbxs6Oc8nQZgA4oh+SVahnvz4=", + "requires": { + "sdp": "1.5.4" + } + }, + "webrtcsupport": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webrtcsupport/-/webrtcsupport-2.2.0.tgz", + "integrity": "sha1-MtjJYIclraNSrwq2q/IayrUYKqY=" + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "0.4.10", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", + "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.19" + } + }, + "whatwg-fetch": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", + "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + }, + "whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==", + "dev": true, + "requires": { + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "widest-line": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", + "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", + "requires": { + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "wildemitter": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/wildemitter/-/wildemitter-1.2.0.tgz", + "integrity": "sha1-Kd06ctaZw+J53QIcPNIVC4LJohE=" + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "optional": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "wrench": { + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.5.9.tgz", + "integrity": "sha1-QRaRxjqbJTGxcAJnJ5veyiOyFCo=", + "optional": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" + } + }, + "ws": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-0.8.0.tgz", + "integrity": "sha1-rGDrrTEhIdAeFswzg9fsZ60PDx8=", + "requires": { + "bufferutil": "1.2.1", + "options": "0.0.6", + "ultron": "1.0.2", + "utf-8-validate": "1.2.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" + }, + "xhr2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", + "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=", + "optional": true + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "optional": true, + "requires": { + "sax": "1.2.4", + "xmlbuilder": "9.0.7" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "optional": true + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "optional": true + }, + "xmllint-jsparser": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/xmllint-jsparser/-/xmllint-jsparser-0.0.3.tgz", + "integrity": "sha1-aLBRNDkX2pX3e3oMeg+7QAF142Y=", + "optional": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yaml-ast-parser": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.30.tgz", + "integrity": "sha1-lXnF0IAKmNvYJkTqhdlOILpWYrw=", + "optional": true + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "optional": true, + "requires": { + "camelcase": "2.1.1", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "os-locale": "1.4.0", + "string-width": "1.0.2", + "window-size": "0.1.4", + "y18n": "3.2.1" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "requires": { + "camelcase": "4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + } + } + }, + "z-schema": { + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.19.1.tgz", + "integrity": "sha512-jPNzqmOu3+AGbb4krDODqo4QBzwUGDVzyfGyy1HtWaUnafltQotatSpxxWd6Mp0iSZOUwHU5sqKYi+U8HsHMkg==", + "optional": true, + "requires": { + "commander": "2.14.1", + "lodash.get": "4.4.2", + "lodash.isequal": "4.5.0", + "validator": "9.4.0" + } + } + } +} diff --git a/package.json b/package.json index 5cece282..5f87ace8 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,13 @@ "version": "1.0.0", "description": "Metamaps webpacked javascript code", "scripts": { + "start": "webpack-dev-server --open", + "server": "node server.js", "build": "webpack", "build:watch": "webpack --watch", - "test": "mocha-webpack --webpack-config webpack.test.config.js --require frontend/test_support/dom.js --recursive frontend/test", - "eslint": "eslint frontend", - "eslint:fix": "eslint --fix frontend" + "test": "mocha-webpack --webpack-config webpack.test.config.js --require test_support/dom.js --recursive test", + "eslint": "eslint src", + "eslint:fix": "eslint --fix src" }, "repository": { "type": "git", @@ -20,6 +22,7 @@ }, "homepage": "https://github.com/metamaps/metamaps#readme", "dependencies": { + "action-cable-node": "Connoropolous/action-cable-node", "ajaxq": "0.0.7", "async": "2.5.0", "attachmediastream": "2.0.0", @@ -33,15 +36,18 @@ "backbone": "1.3.3", "clipboard-js": "0.3.5", "commonmark": "0.28.1", + "cookie-parser": "^1.4.3", "csv-parse": "1.2.1", "emoji-mart": "1.0.1", "getscreenmedia": "4.0.1", "hark": "1.1.5", "howler": "2.0.4", "jquery": "3.2.1", + "jquery-ujs": "^1.2.2", "json-loader": "0.5.7", "lodash": "4.17.4", "node-uuid": "1.4.8", + "nodemon": "^1.17.1", "outdent": "0.3.0", "prop-types": "15.5.10", "react": "15.6.1", @@ -66,11 +72,14 @@ "eslint-plugin-promise": "^3.5.0", "eslint-plugin-react": "^7.3.0", "eslint-plugin-standard": "^3.0.1", + "express": "^4.16.2", "jsdom": "^11.2.0", "mocha": "^3.5.0", "mocha-webpack": "^0.7.0", "react-addons-test-utils": "^15.6.0", - "sinon": "2.2.0" + "sinon": "2.2.0", + "webpack-dev-middleware": "^2.0.5", + "webpack-dev-server": "^2.11.1" }, "optionalDependencies": { "raml2html": "4.0.5" diff --git a/public/404.html b/public/404.html deleted file mode 100644 index 5c9ec093..00000000 --- a/public/404.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - The page you were looking for doesn't exist (404) - - - - - -
    -
    -

    404 - You've Found Nothing

    -

    Nothing is here!

    -

    There are nothings that inspire and nothings that motivate, but there are no nothings that cannot stir your experience of nothing.

    -

    Therefore there is nothing to see here, nothing to behold here, nothing to be here, maybe there is but definitely not here.

    -

    Therefore, move along! Nothing is ending here...

    - EXPLORE FEATURED MAPS - -
    -
    -
    -
    - - diff --git a/public/422.html b/public/422.html deleted file mode 100644 index 83660ab1..00000000 --- a/public/422.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - The change you wanted was rejected (422) - - - - - -
    -

    The change you wanted was rejected.

    -

    Maybe you tried to change something you didn't have access to.

    -
    - - diff --git a/public/500.html b/public/500.html deleted file mode 100644 index f3648a0d..00000000 --- a/public/500.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - We're sorry, but something went wrong (500) - - - - - -
    -

    We're sorry, but something went wrong.

    -
    - - diff --git a/public/503.html b/public/503.html deleted file mode 100644 index 604d1487..00000000 --- a/public/503.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - Down for maintenance (503) - - - - - -
    -
    -

    503 - Down for Maintenance

    -

    Metamaps is offline!

    -

    Don't worry, this is intentional. We're probably just turning on some great new features.

    -

    In the meantime, you can visit our Twitter, or aimlessly search YouTube until we're back online.

    - GO TO OUR TWITTER FEED - -
    -
    -
    -
    - - diff --git a/public/50x.html b/public/50x.html deleted file mode 100644 index c7dae1d5..00000000 --- a/public/50x.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - We're really sorry, but something went wrong (500) - - - - - -
    -

    We're really sorry, but something went wrong.

    -
    - - diff --git a/public/api/.keep b/public/api/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 4c7fd17b..00000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/app/assets/stylesheets/Fonts/din-reg.eot b/public/fonts/din-reg.eot similarity index 100% rename from app/assets/stylesheets/Fonts/din-reg.eot rename to public/fonts/din-reg.eot diff --git a/app/assets/stylesheets/Fonts/din-reg.svg b/public/fonts/din-reg.svg similarity index 100% rename from app/assets/stylesheets/Fonts/din-reg.svg rename to public/fonts/din-reg.svg diff --git a/app/assets/stylesheets/Fonts/din-reg.ttf b/public/fonts/din-reg.ttf similarity index 100% rename from app/assets/stylesheets/Fonts/din-reg.ttf rename to public/fonts/din-reg.ttf diff --git a/app/assets/stylesheets/Fonts/din-reg.woff b/public/fonts/din-reg.woff similarity index 100% rename from app/assets/stylesheets/Fonts/din-reg.woff rename to public/fonts/din-reg.woff diff --git a/app/assets/stylesheets/Fonts/din.eot b/public/fonts/din.eot similarity index 100% rename from app/assets/stylesheets/Fonts/din.eot rename to public/fonts/din.eot diff --git a/app/assets/stylesheets/Fonts/din.svg b/public/fonts/din.svg similarity index 100% rename from app/assets/stylesheets/Fonts/din.svg rename to public/fonts/din.svg diff --git a/app/assets/stylesheets/Fonts/din.ttf b/public/fonts/din.ttf similarity index 100% rename from app/assets/stylesheets/Fonts/din.ttf rename to public/fonts/din.ttf diff --git a/app/assets/stylesheets/Fonts/din.woff b/public/fonts/din.woff similarity index 100% rename from app/assets/stylesheets/Fonts/din.woff rename to public/fonts/din.woff diff --git a/app/assets/images/RibbonDonateBitcoin.png b/public/images/RibbonDonateBitcoin.png similarity index 100% rename from app/assets/images/RibbonDonateBitcoin.png rename to public/images/RibbonDonateBitcoin.png diff --git a/app/assets/images/about_sprite.png b/public/images/about_sprite.png similarity index 100% rename from app/assets/images/about_sprite.png rename to public/images/about_sprite.png diff --git a/app/assets/images/addcollab_sprite.png b/public/images/addcollab_sprite.png similarity index 100% rename from app/assets/images/addcollab_sprite.png rename to public/images/addcollab_sprite.png diff --git a/app/assets/images/addtopic_sprite.png b/public/images/addtopic_sprite.png similarity index 100% rename from app/assets/images/addtopic_sprite.png rename to public/images/addtopic_sprite.png diff --git a/app/assets/images/arrow_sprite-alt.png b/public/images/arrow_sprite-alt.png similarity index 100% rename from app/assets/images/arrow_sprite-alt.png rename to public/images/arrow_sprite-alt.png diff --git a/app/assets/images/arrow_sprite.png b/public/images/arrow_sprite.png similarity index 100% rename from app/assets/images/arrow_sprite.png rename to public/images/arrow_sprite.png diff --git a/app/assets/images/arrowdown_sprite.png b/public/images/arrowdown_sprite.png similarity index 100% rename from app/assets/images/arrowdown_sprite.png rename to public/images/arrowdown_sprite.png diff --git a/app/assets/images/arrowpermswhite_sprite.png b/public/images/arrowpermswhite_sprite.png similarity index 100% rename from app/assets/images/arrowpermswhite_sprite.png rename to public/images/arrowpermswhite_sprite.png diff --git a/app/assets/images/arrowright_sprite.png b/public/images/arrowright_sprite.png similarity index 100% rename from app/assets/images/arrowright_sprite.png rename to public/images/arrowright_sprite.png diff --git a/app/assets/images/audio_sprite.png b/public/images/audio_sprite.png similarity index 100% rename from app/assets/images/audio_sprite.png rename to public/images/audio_sprite.png diff --git a/app/assets/images/browser_icons.png b/public/images/browser_icons.png similarity index 100% rename from app/assets/images/browser_icons.png rename to public/images/browser_icons.png diff --git a/app/assets/images/camera_sprite.png b/public/images/camera_sprite.png similarity index 100% rename from app/assets/images/camera_sprite.png rename to public/images/camera_sprite.png diff --git a/app/assets/images/chat32.png b/public/images/chat32.png similarity index 100% rename from app/assets/images/chat32.png rename to public/images/chat32.png diff --git a/app/assets/images/compass_arrow.png b/public/images/compass_arrow.png similarity index 100% rename from app/assets/images/compass_arrow.png rename to public/images/compass_arrow.png diff --git a/app/assets/images/context_sprite.png b/public/images/context_sprite.png similarity index 100% rename from app/assets/images/context_sprite.png rename to public/images/context_sprite.png diff --git a/app/assets/images/context_topicview_sprite.png b/public/images/context_topicview_sprite.png similarity index 100% rename from app/assets/images/context_topicview_sprite.png rename to public/images/context_topicview_sprite.png diff --git a/app/assets/images/cursor_sprite.png b/public/images/cursor_sprite.png similarity index 100% rename from app/assets/images/cursor_sprite.png rename to public/images/cursor_sprite.png diff --git a/app/assets/images/default_profile.png b/public/images/default_profile.png similarity index 100% rename from app/assets/images/default_profile.png rename to public/images/default_profile.png diff --git a/app/assets/images/edit.png b/public/images/edit.png similarity index 100% rename from app/assets/images/edit.png rename to public/images/edit.png diff --git a/app/assets/images/ellipsis.gif b/public/images/ellipsis.gif similarity index 100% rename from app/assets/images/ellipsis.gif rename to public/images/ellipsis.gif diff --git a/app/assets/images/exploremaps_sprite.png b/public/images/exploremaps_sprite.png similarity index 100% rename from app/assets/images/exploremaps_sprite.png rename to public/images/exploremaps_sprite.png diff --git a/app/assets/images/extents_sprite.png b/public/images/extents_sprite.png similarity index 100% rename from app/assets/images/extents_sprite.png rename to public/images/extents_sprite.png diff --git a/app/assets/images/feedback_sprite.png b/public/images/feedback_sprite.png similarity index 100% rename from app/assets/images/feedback_sprite.png rename to public/images/feedback_sprite.png diff --git a/app/assets/images/help_sprite.png b/public/images/help_sprite.png similarity index 100% rename from app/assets/images/help_sprite.png rename to public/images/help_sprite.png diff --git a/app/assets/images/home_dark.png b/public/images/home_dark.png similarity index 100% rename from app/assets/images/home_dark.png rename to public/images/home_dark.png diff --git a/app/assets/images/home_light.png b/public/images/home_light.png similarity index 100% rename from app/assets/images/home_light.png rename to public/images/home_light.png diff --git a/app/assets/images/homepage_bg_fade.png b/public/images/homepage_bg_fade.png similarity index 100% rename from app/assets/images/homepage_bg_fade.png rename to public/images/homepage_bg_fade.png diff --git a/app/assets/images/icons/action.png b/public/images/icons/action.png similarity index 100% rename from app/assets/images/icons/action.png rename to public/images/icons/action.png diff --git a/app/assets/images/icons/activity.png b/public/images/icons/activity.png similarity index 100% rename from app/assets/images/icons/activity.png rename to public/images/icons/activity.png diff --git a/app/assets/images/icons/argument.png b/public/images/icons/argument.png similarity index 100% rename from app/assets/images/icons/argument.png rename to public/images/icons/argument.png diff --git a/app/assets/images/icons/bizarre.png b/public/images/icons/bizarre.png similarity index 100% rename from app/assets/images/icons/bizarre.png rename to public/images/icons/bizarre.png diff --git a/app/assets/images/icons/blueprint_96px/bp_action.png b/public/images/icons/blueprint_96px/bp_action.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_action.png rename to public/images/icons/blueprint_96px/bp_action.png diff --git a/app/assets/images/icons/blueprint_96px/bp_activity.png b/public/images/icons/blueprint_96px/bp_activity.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_activity.png rename to public/images/icons/blueprint_96px/bp_activity.png diff --git a/app/assets/images/icons/blueprint_96px/bp_catalyst.png b/public/images/icons/blueprint_96px/bp_catalyst.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_catalyst.png rename to public/images/icons/blueprint_96px/bp_catalyst.png diff --git a/app/assets/images/icons/blueprint_96px/bp_closedissue.png b/public/images/icons/blueprint_96px/bp_closedissue.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_closedissue.png rename to public/images/icons/blueprint_96px/bp_closedissue.png diff --git a/app/assets/images/icons/blueprint_96px/bp_futuredev.png b/public/images/icons/blueprint_96px/bp_futuredev.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_futuredev.png rename to public/images/icons/blueprint_96px/bp_futuredev.png diff --git a/app/assets/images/icons/blueprint_96px/bp_group.png b/public/images/icons/blueprint_96px/bp_group.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_group.png rename to public/images/icons/blueprint_96px/bp_group.png diff --git a/app/assets/images/icons/blueprint_96px/bp_implication.png b/public/images/icons/blueprint_96px/bp_implication.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_implication.png rename to public/images/icons/blueprint_96px/bp_implication.png diff --git a/app/assets/images/icons/blueprint_96px/bp_insight.png b/public/images/icons/blueprint_96px/bp_insight.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_insight.png rename to public/images/icons/blueprint_96px/bp_insight.png diff --git a/app/assets/images/icons/blueprint_96px/bp_intention.png b/public/images/icons/blueprint_96px/bp_intention.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_intention.png rename to public/images/icons/blueprint_96px/bp_intention.png diff --git a/app/assets/images/icons/blueprint_96px/bp_knowledge.png b/public/images/icons/blueprint_96px/bp_knowledge.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_knowledge.png rename to public/images/icons/blueprint_96px/bp_knowledge.png diff --git a/app/assets/images/icons/blueprint_96px/bp_location.png b/public/images/icons/blueprint_96px/bp_location.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_location.png rename to public/images/icons/blueprint_96px/bp_location.png diff --git a/app/assets/images/icons/blueprint_96px/bp_need.png b/public/images/icons/blueprint_96px/bp_need.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_need.png rename to public/images/icons/blueprint_96px/bp_need.png diff --git a/app/assets/images/icons/blueprint_96px/bp_openissue.png b/public/images/icons/blueprint_96px/bp_openissue.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_openissue.png rename to public/images/icons/blueprint_96px/bp_openissue.png diff --git a/app/assets/images/icons/blueprint_96px/bp_opportunity.png b/public/images/icons/blueprint_96px/bp_opportunity.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_opportunity.png rename to public/images/icons/blueprint_96px/bp_opportunity.png diff --git a/app/assets/images/icons/blueprint_96px/bp_person.png b/public/images/icons/blueprint_96px/bp_person.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_person.png rename to public/images/icons/blueprint_96px/bp_person.png diff --git a/app/assets/images/icons/blueprint_96px/bp_platform.png b/public/images/icons/blueprint_96px/bp_platform.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_platform.png rename to public/images/icons/blueprint_96px/bp_platform.png diff --git a/app/assets/images/icons/blueprint_96px/bp_problem.png b/public/images/icons/blueprint_96px/bp_problem.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_problem.png rename to public/images/icons/blueprint_96px/bp_problem.png diff --git a/app/assets/images/icons/blueprint_96px/bp_process.png b/public/images/icons/blueprint_96px/bp_process.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_process.png rename to public/images/icons/blueprint_96px/bp_process.png diff --git a/app/assets/images/icons/blueprint_96px/bp_resource.png b/public/images/icons/blueprint_96px/bp_resource.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_resource.png rename to public/images/icons/blueprint_96px/bp_resource.png diff --git a/app/assets/images/icons/blueprint_96px/bp_role.png b/public/images/icons/blueprint_96px/bp_role.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_role.png rename to public/images/icons/blueprint_96px/bp_role.png diff --git a/app/assets/images/icons/blueprint_96px/bp_task.png b/public/images/icons/blueprint_96px/bp_task.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_task.png rename to public/images/icons/blueprint_96px/bp_task.png diff --git a/app/assets/images/icons/blueprint_96px/bp_trajectory.png b/public/images/icons/blueprint_96px/bp_trajectory.png similarity index 100% rename from app/assets/images/icons/blueprint_96px/bp_trajectory.png rename to public/images/icons/blueprint_96px/bp_trajectory.png diff --git a/app/assets/images/icons/catalyst.png b/public/images/icons/catalyst.png similarity index 100% rename from app/assets/images/icons/catalyst.png rename to public/images/icons/catalyst.png diff --git a/app/assets/images/icons/closed.png b/public/images/icons/closed.png similarity index 100% rename from app/assets/images/icons/closed.png rename to public/images/icons/closed.png diff --git a/app/assets/images/icons/con_icon.png b/public/images/icons/con_icon.png similarity index 100% rename from app/assets/images/icons/con_icon.png rename to public/images/icons/con_icon.png diff --git a/app/assets/images/icons/decision.png b/public/images/icons/decision.png similarity index 100% rename from app/assets/images/icons/decision.png rename to public/images/icons/decision.png diff --git a/app/assets/images/icons/example.png b/public/images/icons/example.png similarity index 100% rename from app/assets/images/icons/example.png rename to public/images/icons/example.png diff --git a/app/assets/images/icons/experience.png b/public/images/icons/experience.png similarity index 100% rename from app/assets/images/icons/experience.png rename to public/images/icons/experience.png diff --git a/app/assets/images/icons/foresight.png b/public/images/icons/foresight.png similarity index 100% rename from app/assets/images/icons/foresight.png rename to public/images/icons/foresight.png diff --git a/app/assets/images/icons/futuredev.png b/public/images/icons/futuredev.png similarity index 100% rename from app/assets/images/icons/futuredev.png rename to public/images/icons/futuredev.png diff --git a/app/assets/images/icons/generics_96px/gen_aim.png b/public/images/icons/generics_96px/gen_aim.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_aim.png rename to public/images/icons/generics_96px/gen_aim.png diff --git a/app/assets/images/icons/generics_96px/gen_argument.png b/public/images/icons/generics_96px/gen_argument.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_argument.png rename to public/images/icons/generics_96px/gen_argument.png diff --git a/app/assets/images/icons/generics_96px/gen_con.png b/public/images/icons/generics_96px/gen_con.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_con.png rename to public/images/icons/generics_96px/gen_con.png diff --git a/app/assets/images/icons/generics_96px/gen_decision.png b/public/images/icons/generics_96px/gen_decision.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_decision.png rename to public/images/icons/generics_96px/gen_decision.png diff --git a/app/assets/images/icons/generics_96px/gen_event.png b/public/images/icons/generics_96px/gen_event.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_event.png rename to public/images/icons/generics_96px/gen_event.png diff --git a/app/assets/images/icons/generics_96px/gen_example.png b/public/images/icons/generics_96px/gen_example.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_example.png rename to public/images/icons/generics_96px/gen_example.png diff --git a/app/assets/images/icons/generics_96px/gen_experience.png b/public/images/icons/generics_96px/gen_experience.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_experience.png rename to public/images/icons/generics_96px/gen_experience.png diff --git a/app/assets/images/icons/generics_96px/gen_feedback.png b/public/images/icons/generics_96px/gen_feedback.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_feedback.png rename to public/images/icons/generics_96px/gen_feedback.png diff --git a/app/assets/images/icons/generics_96px/gen_goodpractice.png b/public/images/icons/generics_96px/gen_goodpractice.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_goodpractice.png rename to public/images/icons/generics_96px/gen_goodpractice.png diff --git a/app/assets/images/icons/generics_96px/gen_idea.png b/public/images/icons/generics_96px/gen_idea.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_idea.png rename to public/images/icons/generics_96px/gen_idea.png diff --git a/app/assets/images/icons/generics_96px/gen_list.png b/public/images/icons/generics_96px/gen_list.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_list.png rename to public/images/icons/generics_96px/gen_list.png diff --git a/app/assets/images/icons/generics_96px/gen_media.png b/public/images/icons/generics_96px/gen_media.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_media.png rename to public/images/icons/generics_96px/gen_media.png diff --git a/app/assets/images/icons/generics_96px/gen_metamap.png b/public/images/icons/generics_96px/gen_metamap.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_metamap.png rename to public/images/icons/generics_96px/gen_metamap.png diff --git a/app/assets/images/icons/generics_96px/gen_model.png b/public/images/icons/generics_96px/gen_model.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_model.png rename to public/images/icons/generics_96px/gen_model.png diff --git a/app/assets/images/icons/generics_96px/gen_note.png b/public/images/icons/generics_96px/gen_note.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_note.png rename to public/images/icons/generics_96px/gen_note.png diff --git a/app/assets/images/icons/generics_96px/gen_perspective.png b/public/images/icons/generics_96px/gen_perspective.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_perspective.png rename to public/images/icons/generics_96px/gen_perspective.png diff --git a/app/assets/images/icons/generics_96px/gen_pro.png b/public/images/icons/generics_96px/gen_pro.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_pro.png rename to public/images/icons/generics_96px/gen_pro.png diff --git a/app/assets/images/icons/generics_96px/gen_project.png b/public/images/icons/generics_96px/gen_project.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_project.png rename to public/images/icons/generics_96px/gen_project.png diff --git a/app/assets/images/icons/generics_96px/gen_question.png b/public/images/icons/generics_96px/gen_question.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_question.png rename to public/images/icons/generics_96px/gen_question.png diff --git a/app/assets/images/icons/generics_96px/gen_reference.png b/public/images/icons/generics_96px/gen_reference.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_reference.png rename to public/images/icons/generics_96px/gen_reference.png diff --git a/app/assets/images/icons/generics_96px/gen_research.png b/public/images/icons/generics_96px/gen_research.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_research.png rename to public/images/icons/generics_96px/gen_research.png diff --git a/app/assets/images/icons/generics_96px/gen_status.png b/public/images/icons/generics_96px/gen_status.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_status.png rename to public/images/icons/generics_96px/gen_status.png diff --git a/app/assets/images/icons/generics_96px/gen_story.png b/public/images/icons/generics_96px/gen_story.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_story.png rename to public/images/icons/generics_96px/gen_story.png diff --git a/app/assets/images/icons/generics_96px/gen_subject.png b/public/images/icons/generics_96px/gen_subject.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_subject.png rename to public/images/icons/generics_96px/gen_subject.png diff --git a/app/assets/images/icons/generics_96px/gen_tool.png b/public/images/icons/generics_96px/gen_tool.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_tool.png rename to public/images/icons/generics_96px/gen_tool.png diff --git a/app/assets/images/icons/generics_96px/gen_wildcard.png b/public/images/icons/generics_96px/gen_wildcard.png similarity index 100% rename from app/assets/images/icons/generics_96px/gen_wildcard.png rename to public/images/icons/generics_96px/gen_wildcard.png diff --git a/app/assets/images/icons/goodpractice.png b/public/images/icons/goodpractice.png similarity index 100% rename from app/assets/images/icons/goodpractice.png rename to public/images/icons/goodpractice.png diff --git a/app/assets/images/icons/group.png b/public/images/icons/group.png similarity index 100% rename from app/assets/images/icons/group.png rename to public/images/icons/group.png diff --git a/app/assets/images/icons/idea.png b/public/images/icons/idea.png similarity index 100% rename from app/assets/images/icons/idea.png rename to public/images/icons/idea.png diff --git a/app/assets/images/icons/implication.png b/public/images/icons/implication.png similarity index 100% rename from app/assets/images/icons/implication.png rename to public/images/icons/implication.png diff --git a/app/assets/images/icons/insight.png b/public/images/icons/insight.png similarity index 100% rename from app/assets/images/icons/insight.png rename to public/images/icons/insight.png diff --git a/app/assets/images/icons/intention.png b/public/images/icons/intention.png similarity index 100% rename from app/assets/images/icons/intention.png rename to public/images/icons/intention.png diff --git a/app/assets/images/icons/knowledge.png b/public/images/icons/knowledge.png similarity index 100% rename from app/assets/images/icons/knowledge.png rename to public/images/icons/knowledge.png diff --git a/app/assets/images/icons/list.png b/public/images/icons/list.png similarity index 100% rename from app/assets/images/icons/list.png rename to public/images/icons/list.png diff --git a/app/assets/images/icons/location.png b/public/images/icons/location.png similarity index 100% rename from app/assets/images/icons/location.png rename to public/images/icons/location.png diff --git a/app/assets/images/icons/moviemap.png b/public/images/icons/moviemap.png similarity index 100% rename from app/assets/images/icons/moviemap.png rename to public/images/icons/moviemap.png diff --git a/app/assets/images/icons/note.png b/public/images/icons/note.png similarity index 100% rename from app/assets/images/icons/note.png rename to public/images/icons/note.png diff --git a/app/assets/images/icons/opendata_96px/OD_API.png b/public/images/icons/opendata_96px/OD_API.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_API.png rename to public/images/icons/opendata_96px/OD_API.png diff --git a/app/assets/images/icons/opendata_96px/OD_Business Data.png b/public/images/icons/opendata_96px/OD_Business Data.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Business Data.png rename to public/images/icons/opendata_96px/OD_Business Data.png diff --git a/app/assets/images/icons/opendata_96px/OD_Cloud-hosted Data.png b/public/images/icons/opendata_96px/OD_Cloud-hosted Data.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Cloud-hosted Data.png rename to public/images/icons/opendata_96px/OD_Cloud-hosted Data.png diff --git a/app/assets/images/icons/opendata_96px/OD_Creative Commons Data.png b/public/images/icons/opendata_96px/OD_Creative Commons Data.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Creative Commons Data.png rename to public/images/icons/opendata_96px/OD_Creative Commons Data.png diff --git a/app/assets/images/icons/opendata_96px/OD_Data Analyst.png b/public/images/icons/opendata_96px/OD_Data Analyst.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Data Analyst.png rename to public/images/icons/opendata_96px/OD_Data Analyst.png diff --git a/app/assets/images/icons/opendata_96px/OD_Data Mining.png b/public/images/icons/opendata_96px/OD_Data Mining.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Data Mining.png rename to public/images/icons/opendata_96px/OD_Data Mining.png diff --git a/app/assets/images/icons/opendata_96px/OD_Data Scientist.png b/public/images/icons/opendata_96px/OD_Data Scientist.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Data Scientist.png rename to public/images/icons/opendata_96px/OD_Data Scientist.png diff --git a/app/assets/images/icons/opendata_96px/OD_Data.png b/public/images/icons/opendata_96px/OD_Data.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Data.png rename to public/images/icons/opendata_96px/OD_Data.png diff --git a/app/assets/images/icons/opendata_96px/OD_Database.png b/public/images/icons/opendata_96px/OD_Database.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Database.png rename to public/images/icons/opendata_96px/OD_Database.png diff --git a/app/assets/images/icons/opendata_96px/OD_Geolocation.png b/public/images/icons/opendata_96px/OD_Geolocation.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Geolocation.png rename to public/images/icons/opendata_96px/OD_Geolocation.png diff --git a/app/assets/images/icons/opendata_96px/OD_Government Data.png b/public/images/icons/opendata_96px/OD_Government Data.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Government Data.png rename to public/images/icons/opendata_96px/OD_Government Data.png diff --git a/app/assets/images/icons/opendata_96px/OD_Hacker.png b/public/images/icons/opendata_96px/OD_Hacker.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Hacker.png rename to public/images/icons/opendata_96px/OD_Hacker.png diff --git a/app/assets/images/icons/opendata_96px/OD_Map Data.png b/public/images/icons/opendata_96px/OD_Map Data.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Map Data.png rename to public/images/icons/opendata_96px/OD_Map Data.png diff --git a/app/assets/images/icons/opendata_96px/OD_Mapper.png b/public/images/icons/opendata_96px/OD_Mapper.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Mapper.png rename to public/images/icons/opendata_96px/OD_Mapper.png diff --git a/app/assets/images/icons/opendata_96px/OD_Metadata.png b/public/images/icons/opendata_96px/OD_Metadata.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Metadata.png rename to public/images/icons/opendata_96px/OD_Metadata.png diff --git a/app/assets/images/icons/opendata_96px/OD_Open Data.png b/public/images/icons/opendata_96px/OD_Open Data.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Open Data.png rename to public/images/icons/opendata_96px/OD_Open Data.png diff --git a/app/assets/images/icons/opendata_96px/OD_Open Innovation.png b/public/images/icons/opendata_96px/OD_Open Innovation.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Open Innovation.png rename to public/images/icons/opendata_96px/OD_Open Innovation.png diff --git a/app/assets/images/icons/opendata_96px/OD_Startup.png b/public/images/icons/opendata_96px/OD_Startup.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_Startup.png rename to public/images/icons/opendata_96px/OD_Startup.png diff --git a/app/assets/images/icons/opendata_96px/OD_algorithm.png b/public/images/icons/opendata_96px/OD_algorithm.png similarity index 100% rename from app/assets/images/icons/opendata_96px/OD_algorithm.png rename to public/images/icons/opendata_96px/OD_algorithm.png diff --git a/app/assets/images/icons/openissue.png b/public/images/icons/openissue.png similarity index 100% rename from app/assets/images/icons/openissue.png rename to public/images/icons/openissue.png diff --git a/app/assets/images/icons/opinion.png b/public/images/icons/opinion.png similarity index 100% rename from app/assets/images/icons/opinion.png rename to public/images/icons/opinion.png diff --git a/app/assets/images/icons/opportunity.png b/public/images/icons/opportunity.png similarity index 100% rename from app/assets/images/icons/opportunity.png rename to public/images/icons/opportunity.png diff --git a/app/assets/images/icons/person.png b/public/images/icons/person.png similarity index 100% rename from app/assets/images/icons/person.png rename to public/images/icons/person.png diff --git a/app/assets/images/icons/platform.png b/public/images/icons/platform.png similarity index 100% rename from app/assets/images/icons/platform.png rename to public/images/icons/platform.png diff --git a/app/assets/images/icons/pro.png b/public/images/icons/pro.png similarity index 100% rename from app/assets/images/icons/pro.png rename to public/images/icons/pro.png diff --git a/app/assets/images/icons/problem.png b/public/images/icons/problem.png similarity index 100% rename from app/assets/images/icons/problem.png rename to public/images/icons/problem.png diff --git a/app/assets/images/icons/question.png b/public/images/icons/question.png similarity index 100% rename from app/assets/images/icons/question.png rename to public/images/icons/question.png diff --git a/app/assets/images/icons/reference.png b/public/images/icons/reference.png similarity index 100% rename from app/assets/images/icons/reference.png rename to public/images/icons/reference.png diff --git a/app/assets/images/icons/requirement.png b/public/images/icons/requirement.png similarity index 100% rename from app/assets/images/icons/requirement.png rename to public/images/icons/requirement.png diff --git a/app/assets/images/icons/research.png b/public/images/icons/research.png similarity index 100% rename from app/assets/images/icons/research.png rename to public/images/icons/research.png diff --git a/app/assets/images/icons/resource.png b/public/images/icons/resource.png similarity index 100% rename from app/assets/images/icons/resource.png rename to public/images/icons/resource.png diff --git a/app/assets/images/icons/role.png b/public/images/icons/role.png similarity index 100% rename from app/assets/images/icons/role.png rename to public/images/icons/role.png diff --git a/app/assets/images/icons/task.png b/public/images/icons/task.png similarity index 100% rename from app/assets/images/icons/task.png rename to public/images/icons/task.png diff --git a/app/assets/images/icons/tool.png b/public/images/icons/tool.png similarity index 100% rename from app/assets/images/icons/tool.png rename to public/images/icons/tool.png diff --git a/app/assets/images/icons/trajectory.png b/public/images/icons/trajectory.png similarity index 100% rename from app/assets/images/icons/trajectory.png rename to public/images/icons/trajectory.png diff --git a/app/assets/images/icons/wildcard.png b/public/images/icons/wildcard.png similarity index 100% rename from app/assets/images/icons/wildcard.png rename to public/images/icons/wildcard.png diff --git a/app/assets/images/images/ui-bg_flat_0_aaaaaa_40x100.png b/public/images/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from app/assets/images/images/ui-bg_flat_0_aaaaaa_40x100.png rename to public/images/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/app/assets/images/images/ui-bg_flat_75_ffffff_40x100.png b/public/images/images/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from app/assets/images/images/ui-bg_flat_75_ffffff_40x100.png rename to public/images/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/app/assets/images/images/ui-bg_glass_55_fbf9ee_1x400.png b/public/images/images/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from app/assets/images/images/ui-bg_glass_55_fbf9ee_1x400.png rename to public/images/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/app/assets/images/images/ui-bg_glass_65_ffffff_1x400.png b/public/images/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from app/assets/images/images/ui-bg_glass_65_ffffff_1x400.png rename to public/images/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/app/assets/images/images/ui-bg_glass_75_dadada_1x400.png b/public/images/images/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from app/assets/images/images/ui-bg_glass_75_dadada_1x400.png rename to public/images/images/ui-bg_glass_75_dadada_1x400.png diff --git a/app/assets/images/images/ui-bg_glass_75_e6e6e6_1x400.png b/public/images/images/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from app/assets/images/images/ui-bg_glass_75_e6e6e6_1x400.png rename to public/images/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/app/assets/images/images/ui-bg_glass_95_fef1ec_1x400.png b/public/images/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from app/assets/images/images/ui-bg_glass_95_fef1ec_1x400.png rename to public/images/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/app/assets/images/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/public/images/images/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from app/assets/images/images/ui-bg_highlight-soft_75_cccccc_1x100.png rename to public/images/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/app/assets/images/images/ui-icons_222222_256x240.png b/public/images/images/ui-icons_222222_256x240.png similarity index 100% rename from app/assets/images/images/ui-icons_222222_256x240.png rename to public/images/images/ui-icons_222222_256x240.png diff --git a/app/assets/images/images/ui-icons_2e83ff_256x240.png b/public/images/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from app/assets/images/images/ui-icons_2e83ff_256x240.png rename to public/images/images/ui-icons_2e83ff_256x240.png diff --git a/app/assets/images/images/ui-icons_454545_256x240.png b/public/images/images/ui-icons_454545_256x240.png similarity index 100% rename from app/assets/images/images/ui-icons_454545_256x240.png rename to public/images/images/ui-icons_454545_256x240.png diff --git a/app/assets/images/images/ui-icons_888888_256x240.png b/public/images/images/ui-icons_888888_256x240.png similarity index 100% rename from app/assets/images/images/ui-icons_888888_256x240.png rename to public/images/images/ui-icons_888888_256x240.png diff --git a/app/assets/images/images/ui-icons_cd0a0a_256x240.png b/public/images/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from app/assets/images/images/ui-icons_cd0a0a_256x240.png rename to public/images/images/ui-icons_cd0a0a_256x240.png diff --git a/app/assets/images/import-example.png b/public/images/import-example.png similarity index 100% rename from app/assets/images/import-example.png rename to public/images/import-example.png diff --git a/app/assets/images/invitepeer16.png b/public/images/invitepeer16.png similarity index 100% rename from app/assets/images/invitepeer16.png rename to public/images/invitepeer16.png diff --git a/app/assets/images/junto.gif b/public/images/junto.gif similarity index 100% rename from app/assets/images/junto.gif rename to public/images/junto.gif diff --git a/app/assets/images/junto.png b/public/images/junto.png similarity index 100% rename from app/assets/images/junto.png rename to public/images/junto.png diff --git a/app/assets/images/junto24_sprite.png b/public/images/junto24_sprite.png similarity index 100% rename from app/assets/images/junto24_sprite.png rename to public/images/junto24_sprite.png diff --git a/app/assets/images/junto_spinner_dark.gif b/public/images/junto_spinner_dark.gif similarity index 100% rename from app/assets/images/junto_spinner_dark.gif rename to public/images/junto_spinner_dark.gif diff --git a/app/assets/images/junto_spinner_darkgrey.gif b/public/images/junto_spinner_darkgrey.gif similarity index 100% rename from app/assets/images/junto_spinner_darkgrey.gif rename to public/images/junto_spinner_darkgrey.gif diff --git a/app/assets/images/link_sprite.png b/public/images/link_sprite.png similarity index 100% rename from app/assets/images/link_sprite.png rename to public/images/link_sprite.png diff --git a/app/assets/images/map32_sprite.png b/public/images/map32_sprite.png similarity index 100% rename from app/assets/images/map32_sprite.png rename to public/images/map32_sprite.png diff --git a/app/assets/images/map_control_sprite.png b/public/images/map_control_sprite.png similarity index 100% rename from app/assets/images/map_control_sprite.png rename to public/images/map_control_sprite.png diff --git a/app/assets/images/mapinfo_sprite.png b/public/images/mapinfo_sprite.png similarity index 100% rename from app/assets/images/mapinfo_sprite.png rename to public/images/mapinfo_sprite.png diff --git a/app/assets/images/menu-alt-256.png b/public/images/menu-alt-256.png similarity index 100% rename from app/assets/images/menu-alt-256.png rename to public/images/menu-alt-256.png diff --git a/app/assets/images/metacodes75ms300x300.gif b/public/images/metacodes75ms300x300.gif similarity index 100% rename from app/assets/images/metacodes75ms300x300.gif rename to public/images/metacodes75ms300x300.gif diff --git a/app/assets/images/metacodesettings_sprite.png b/public/images/metacodesettings_sprite.png similarity index 100% rename from app/assets/images/metacodesettings_sprite.png rename to public/images/metacodesettings_sprite.png diff --git a/app/assets/images/metadata.png b/public/images/metadata.png similarity index 100% rename from app/assets/images/metadata.png rename to public/images/metadata.png diff --git a/app/assets/images/metamap128x128.png b/public/images/metamap128x128.png similarity index 100% rename from app/assets/images/metamap128x128.png rename to public/images/metamap128x128.png diff --git a/app/assets/images/metamap16.png b/public/images/metamap16.png similarity index 100% rename from app/assets/images/metamap16.png rename to public/images/metamap16.png diff --git a/app/assets/images/metamap32c.png b/public/images/metamap32c.png similarity index 100% rename from app/assets/images/metamap32c.png rename to public/images/metamap32c.png diff --git a/app/assets/images/metamap36c.png b/public/images/metamap36c.png similarity index 100% rename from app/assets/images/metamap36c.png rename to public/images/metamap36c.png diff --git a/app/assets/images/metamaps-intro-poster.webp b/public/images/metamaps-intro-poster.webp similarity index 100% rename from app/assets/images/metamaps-intro-poster.webp rename to public/images/metamaps-intro-poster.webp diff --git a/app/assets/images/missing-map.png b/public/images/missing-map.png similarity index 100% rename from app/assets/images/missing-map.png rename to public/images/missing-map.png diff --git a/app/assets/images/mm_logo.png b/public/images/mm_logo.png similarity index 100% rename from app/assets/images/mm_logo.png rename to public/images/mm_logo.png diff --git a/app/assets/images/monkeyselfie.jpg b/public/images/monkeyselfie.jpg similarity index 100% rename from app/assets/images/monkeyselfie.jpg rename to public/images/monkeyselfie.jpg diff --git a/app/assets/images/newmap_sprite.png b/public/images/newmap_sprite.png similarity index 100% rename from app/assets/images/newmap_sprite.png rename to public/images/newmap_sprite.png diff --git a/app/assets/images/partner_logos.png b/public/images/partner_logos.png similarity index 100% rename from app/assets/images/partner_logos.png rename to public/images/partner_logos.png diff --git a/app/assets/images/permissions32_sprite.png b/public/images/permissions32_sprite.png similarity index 100% rename from app/assets/images/permissions32_sprite.png rename to public/images/permissions32_sprite.png diff --git a/app/assets/images/permissions36_sprite.png b/public/images/permissions36_sprite.png similarity index 100% rename from app/assets/images/permissions36_sprite.png rename to public/images/permissions36_sprite.png diff --git a/app/assets/images/permissions64sprite.png b/public/images/permissions64sprite.png similarity index 100% rename from app/assets/images/permissions64sprite.png rename to public/images/permissions64sprite.png diff --git a/app/assets/images/photo.png b/public/images/photo.png similarity index 100% rename from app/assets/images/photo.png rename to public/images/photo.png diff --git a/app/assets/images/pincarousel_sprite.png b/public/images/pincarousel_sprite.png similarity index 100% rename from app/assets/images/pincarousel_sprite.png rename to public/images/pincarousel_sprite.png diff --git a/app/assets/images/profile_card_sprite.png b/public/images/profile_card_sprite.png similarity index 100% rename from app/assets/images/profile_card_sprite.png rename to public/images/profile_card_sprite.png diff --git a/app/assets/images/remove.png b/public/images/remove.png similarity index 100% rename from app/assets/images/remove.png rename to public/images/remove.png diff --git a/app/assets/images/remove_mapinfo_sprite.png b/public/images/remove_mapinfo_sprite.png similarity index 100% rename from app/assets/images/remove_mapinfo_sprite.png rename to public/images/remove_mapinfo_sprite.png diff --git a/app/assets/images/removecollab_sprite.png b/public/images/removecollab_sprite.png similarity index 100% rename from app/assets/images/removecollab_sprite.png rename to public/images/removecollab_sprite.png diff --git a/app/assets/images/screenshot_sprite.png b/public/images/screenshot_sprite.png similarity index 100% rename from app/assets/images/screenshot_sprite.png rename to public/images/screenshot_sprite.png diff --git a/app/assets/images/search.png b/public/images/search.png similarity index 100% rename from app/assets/images/search.png rename to public/images/search.png diff --git a/app/assets/images/share_sprite.png b/public/images/share_sprite.png similarity index 100% rename from app/assets/images/share_sprite.png rename to public/images/share_sprite.png diff --git a/app/assets/images/share_sprite_mapinfo.png b/public/images/share_sprite_mapinfo.png similarity index 100% rename from app/assets/images/share_sprite_mapinfo.png rename to public/images/share_sprite_mapinfo.png diff --git a/app/assets/images/shattered_@2X.png b/public/images/shattered_@2X.png similarity index 100% rename from app/assets/images/shattered_@2X.png rename to public/images/shattered_@2X.png diff --git a/app/assets/images/sound_sprite.png b/public/images/sound_sprite.png similarity index 100% rename from app/assets/images/sound_sprite.png rename to public/images/sound_sprite.png diff --git a/app/assets/images/sounds/MM_sounds.mp3 b/public/images/sounds/MM_sounds.mp3 similarity index 100% rename from app/assets/images/sounds/MM_sounds.mp3 rename to public/images/sounds/MM_sounds.mp3 diff --git a/app/assets/images/sounds/MM_sounds.ogg b/public/images/sounds/MM_sounds.ogg similarity index 100% rename from app/assets/images/sounds/MM_sounds.ogg rename to public/images/sounds/MM_sounds.ogg diff --git a/app/assets/images/starmap_sprite.png b/public/images/starmap_sprite.png similarity index 100% rename from app/assets/images/starmap_sprite.png rename to public/images/starmap_sprite.png diff --git a/app/assets/images/synapse16.png b/public/images/synapse16.png similarity index 100% rename from app/assets/images/synapse16.png rename to public/images/synapse16.png diff --git a/app/assets/images/synapse32.png b/public/images/synapse32.png similarity index 100% rename from app/assets/images/synapse32.png rename to public/images/synapse32.png diff --git a/app/assets/images/synapse32_sprite.png b/public/images/synapse32_sprite.png similarity index 100% rename from app/assets/images/synapse32_sprite.png rename to public/images/synapse32_sprite.png diff --git a/app/assets/images/synapse32padded.png b/public/images/synapse32padded.png similarity index 100% rename from app/assets/images/synapse32padded.png rename to public/images/synapse32padded.png diff --git a/app/assets/images/synapsedirectionleft_sprite.png b/public/images/synapsedirectionleft_sprite.png similarity index 100% rename from app/assets/images/synapsedirectionleft_sprite.png rename to public/images/synapsedirectionleft_sprite.png diff --git a/app/assets/images/synapsedirectionright_sprite.png b/public/images/synapsedirectionright_sprite.png similarity index 100% rename from app/assets/images/synapsedirectionright_sprite.png rename to public/images/synapsedirectionright_sprite.png diff --git a/app/assets/images/topic16.png b/public/images/topic16.png similarity index 100% rename from app/assets/images/topic16.png rename to public/images/topic16.png diff --git a/app/assets/images/topic32.png b/public/images/topic32.png similarity index 100% rename from app/assets/images/topic32.png rename to public/images/topic32.png diff --git a/app/assets/images/topic_description_signifier.png b/public/images/topic_description_signifier.png similarity index 100% rename from app/assets/images/topic_description_signifier.png rename to public/images/topic_description_signifier.png diff --git a/app/assets/images/topic_link_signifier.png b/public/images/topic_link_signifier.png similarity index 100% rename from app/assets/images/topic_link_signifier.png rename to public/images/topic_link_signifier.png diff --git a/app/assets/images/topright_sprite.png b/public/images/topright_sprite.png similarity index 100% rename from app/assets/images/topright_sprite.png rename to public/images/topright_sprite.png diff --git a/app/assets/images/tray_tab.png b/public/images/tray_tab.png similarity index 100% rename from app/assets/images/tray_tab.png rename to public/images/tray_tab.png diff --git a/app/assets/images/ui-bg_flat_0_aaaaaa_40x100.png b/public/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from app/assets/images/ui-bg_flat_0_aaaaaa_40x100.png rename to public/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/app/assets/images/ui-bg_flat_75_ffffff_40x100.png b/public/images/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from app/assets/images/ui-bg_flat_75_ffffff_40x100.png rename to public/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/app/assets/images/ui-bg_glass_55_fbf9ee_1x400.png b/public/images/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from app/assets/images/ui-bg_glass_55_fbf9ee_1x400.png rename to public/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/app/assets/images/ui-bg_glass_65_ffffff_1x400.png b/public/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from app/assets/images/ui-bg_glass_65_ffffff_1x400.png rename to public/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/app/assets/images/ui-bg_glass_75_dadada_1x400.png b/public/images/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from app/assets/images/ui-bg_glass_75_dadada_1x400.png rename to public/images/ui-bg_glass_75_dadada_1x400.png diff --git a/app/assets/images/ui-bg_glass_75_e6e6e6_1x400.png b/public/images/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from app/assets/images/ui-bg_glass_75_e6e6e6_1x400.png rename to public/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/app/assets/images/ui-bg_glass_95_fef1ec_1x400.png b/public/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from app/assets/images/ui-bg_glass_95_fef1ec_1x400.png rename to public/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/app/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/public/images/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from app/assets/images/ui-bg_highlight-soft_75_cccccc_1x100.png rename to public/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/app/assets/images/ui-icons_222222_256x240.png b/public/images/ui-icons_222222_256x240.png similarity index 100% rename from app/assets/images/ui-icons_222222_256x240.png rename to public/images/ui-icons_222222_256x240.png diff --git a/app/assets/images/ui-icons_2e83ff_256x240.png b/public/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from app/assets/images/ui-icons_2e83ff_256x240.png rename to public/images/ui-icons_2e83ff_256x240.png diff --git a/app/assets/images/ui-icons_454545_256x240.png b/public/images/ui-icons_454545_256x240.png similarity index 100% rename from app/assets/images/ui-icons_454545_256x240.png rename to public/images/ui-icons_454545_256x240.png diff --git a/app/assets/images/ui-icons_888888_256x240.png b/public/images/ui-icons_888888_256x240.png similarity index 100% rename from app/assets/images/ui-icons_888888_256x240.png rename to public/images/ui-icons_888888_256x240.png diff --git a/app/assets/images/ui-icons_cd0a0a_256x240.png b/public/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from app/assets/images/ui-icons_cd0a0a_256x240.png rename to public/images/ui-icons_cd0a0a_256x240.png diff --git a/app/assets/images/upload_sprite.png b/public/images/upload_sprite.png similarity index 100% rename from app/assets/images/upload_sprite.png rename to public/images/upload_sprite.png diff --git a/app/assets/images/user.png b/public/images/user.png similarity index 100% rename from app/assets/images/user.png rename to public/images/user.png diff --git a/app/assets/images/user_sprite.png b/public/images/user_sprite.png similarity index 100% rename from app/assets/images/user_sprite.png rename to public/images/user_sprite.png diff --git a/app/assets/images/video-screen.png b/public/images/video-screen.png similarity index 100% rename from app/assets/images/video-screen.png rename to public/images/video-screen.png diff --git a/app/assets/images/video_sprite.png b/public/images/video_sprite.png similarity index 100% rename from app/assets/images/video_sprite.png rename to public/images/video_sprite.png diff --git a/app/assets/images/view-only.png b/public/images/view-only.png similarity index 100% rename from app/assets/images/view-only.png rename to public/images/view-only.png diff --git a/app/assets/images/xlightbox.png b/public/images/xlightbox.png similarity index 100% rename from app/assets/images/xlightbox.png rename to public/images/xlightbox.png diff --git a/app/assets/images/zoom_sprite.png b/public/images/zoom_sprite.png similarity index 100% rename from app/assets/images/zoom_sprite.png rename to public/images/zoom_sprite.png diff --git a/public/index.html b/public/index.html new file mode 100644 index 00000000..f7496952 --- /dev/null +++ b/public/index.html @@ -0,0 +1,302 @@ + + + + + + + + + + Metamaps + + + + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + + \ No newline at end of file diff --git a/app/assets/javascripts/lib/Countable.js b/public/lib/Countable.js similarity index 100% rename from app/assets/javascripts/lib/Countable.js rename to public/lib/Countable.js diff --git a/app/assets/javascripts/lib/ajaxq.js b/public/lib/ajaxq.js similarity index 100% rename from app/assets/javascripts/lib/ajaxq.js rename to public/lib/ajaxq.js diff --git a/app/assets/javascripts/lib/best_in_place.js b/public/lib/best_in_place.js similarity index 100% rename from app/assets/javascripts/lib/best_in_place.js rename to public/lib/best_in_place.js diff --git a/app/assets/javascripts/lib/bitcoinsrc.js b/public/lib/bitcoinsrc.js similarity index 100% rename from app/assets/javascripts/lib/bitcoinsrc.js rename to public/lib/bitcoinsrc.js diff --git a/app/assets/javascripts/lib/canvas-to-blob.min.js b/public/lib/canvas-to-blob.min.js similarity index 100% rename from app/assets/javascripts/lib/canvas-to-blob.min.js rename to public/lib/canvas-to-blob.min.js diff --git a/app/assets/javascripts/lib/canvasloader.min.js b/public/lib/canvasloader.min.js similarity index 100% rename from app/assets/javascripts/lib/canvasloader.min.js rename to public/lib/canvasloader.min.js diff --git a/app/assets/javascripts/lib/cloudcarousel.js b/public/lib/cloudcarousel.js similarity index 100% rename from app/assets/javascripts/lib/cloudcarousel.js rename to public/lib/cloudcarousel.js diff --git a/app/assets/javascripts/lib/embedly.js b/public/lib/embedly.js similarity index 100% rename from app/assets/javascripts/lib/embedly.js rename to public/lib/embedly.js diff --git a/app/assets/javascripts/lib/hogan-2.0.0.js b/public/lib/hogan-2.0.0.js similarity index 100% rename from app/assets/javascripts/lib/hogan-2.0.0.js rename to public/lib/hogan-2.0.0.js diff --git a/public/lib/jquery-1.12.4.min.js b/public/lib/jquery-1.12.4.min.js new file mode 100644 index 00000000..e8364758 --- /dev/null +++ b/public/lib/jquery-1.12.4.min.js @@ -0,0 +1,5 @@ +/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
    a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:l.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n(" + +
    +

    For more information about Metamaps.cc, visit our Knowledge Base or skip directly to a section by clicking on one of the categories below.

    + + +
    + + + ) + } +} + +export default CheatSheet \ No newline at end of file diff --git a/src/components/LightBoxes/ForkMap.js b/src/components/LightBoxes/ForkMap.js new file mode 100644 index 00000000..6c8c9e53 --- /dev/null +++ b/src/components/LightBoxes/ForkMap.js @@ -0,0 +1,66 @@ +import React, { Component } from 'react' + +class ForkMap extends Component { + render = () => { + return ( +
    +
    +
    + +

    Save To New Map

    +
    + + +
    +
    +
    + + +
    +
    +
    + +

    *new topics and synapses take on the same permission as the map they are created on

    +
    +
    +
    +
    + Anyone with an account can edit this map. Anyone without an account can only view it. +
    +
    +

    COMMONS

    +
    +
    +
    +
    + Only people you allow can edit this map. Anyone can view it. +
    +
    +

    PUBLIC

    +
    +
    +
    +
    + Only people you allow can edit this map. No one else can view it. +
    +
    +

    PRIVATE

    +
    +
    +
    +

    Anyone with an account can edit this map. Anyone without an account can only view it.

    +
    +
    +
    + + +
    +
    + +
    +
    + ) + } +} + +export default ForkMap \ No newline at end of file diff --git a/src/components/LightBoxes/ImportDialogBox.js b/src/components/LightBoxes/ImportDialogBox.js new file mode 100644 index 00000000..e00f998b --- /dev/null +++ b/src/components/LightBoxes/ImportDialogBox.js @@ -0,0 +1,46 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import Dropzone from 'react-dropzone' + +class ImportDialogBox extends Component { + handleFile = (files, e) => { + e.preventDefault() // prevent it from triggering the default drag-drop handler + this.props.onFileAdded(files[0]) + } + + render = () => { + return ( +
    +
    +
    +

    EXPORT

    +
    + Export as CSV +
    +
    + Export as JSON +
    +
    + Download screenshot +
    +

    IMPORT

    +

    To upload a file, drop it here:

    + + Drop files here! + +

    See docs.metamaps.cc for instructions.

    +
    +
    +
    + ) + } +} + +ImportDialogBox.propTypes = { + onFileAdded: PropTypes.func, + downloadScreenshot: PropTypes.func, + onExport: PropTypes.func +} + +export default ImportDialogBox diff --git a/src/components/LightBoxes/Invite.js b/src/components/LightBoxes/Invite.js new file mode 100644 index 00000000..6ccbf833 --- /dev/null +++ b/src/components/LightBoxes/Invite.js @@ -0,0 +1,56 @@ +import React, { Component } from 'react' +import clipboard from 'clipboard-js' + +class Invite extends Component { + constructor(props) { + super(props) + this.state = { + copied: false, + unable: false + } + } + + inviteLink = () => { + const { host, protocol } = window ? window.location : {} + const inviteLink = `${protocol}//${host}/join?code=${this.props.inviteCode}` + return inviteLink + } + + shareInvite = () => { + const inviteLink = this.inviteLink() + clipboard.copy({ + 'text/plain': inviteLink + }).then(() => { + this.setState({ copied: true }) + window.setTimeout(() => this.setState({ copied: false }), 1500) + }, () => { + this.setState({ unable: true }) + window.setTimeout(() => this.setState({ unable: false }), 1500) + }) + } + + render = () => { + const inviteLink = this.inviteLink() + return ( +
    +

    SHARE INVITE

    +
    +

    The Metamaps platform is currently in an invite-only beta with the express purpose of creating a high value knowledge ecosystem, a diverse community of contributors and a culture of collaboration and curiosity.

    +

    As a valued beta tester, you have the ability to invite your peers, colleagues and collaborators onto the platform.

    +

    Below is a personal invite link containing your unique access code, which can be used multiple times.

    +
    +

    + {inviteLink} + +

    +

    + {this.state.copied && 'Copied!'} + {this.state.unable && "Your browser doesn't support copying, please copy manually."} +

    +
    +
    + ) + } +} + +export default Invite \ No newline at end of file diff --git a/src/components/LightBoxes/NoIE.js b/src/components/LightBoxes/NoIE.js new file mode 100644 index 00000000..8e2e2418 --- /dev/null +++ b/src/components/LightBoxes/NoIE.js @@ -0,0 +1,22 @@ +import React, { Component } from 'react' + +class NoIE extends Component { + render = () => { + return ( +
    +

    OOPS!
    YOUR BROWSER IS NOT SUPPORTED.

    +

    To view this experience, please upgrade to the latest one of these browsers:

    + Chrome + Firefox + Safari +

    + While it's downloading, explore our blog,
    + watch the tutorials, + or visit our knowledge base! +

    +
    + ) + } +} + +export default NoIE \ No newline at end of file diff --git a/src/components/LightBoxes/SwitchMetacodes.js b/src/components/LightBoxes/SwitchMetacodes.js new file mode 100644 index 00000000..16cccf68 --- /dev/null +++ b/src/components/LightBoxes/SwitchMetacodes.js @@ -0,0 +1,12 @@ +import React, { Component } from 'react' + +class SwitchMetacodes extends Component { + render = () => { + return ( +
    +
    + ) + } +} + +export default SwitchMetacodes \ No newline at end of file diff --git a/src/components/LightBoxes/Tutorial.js b/src/components/LightBoxes/Tutorial.js new file mode 100644 index 00000000..fd02cfb6 --- /dev/null +++ b/src/components/LightBoxes/Tutorial.js @@ -0,0 +1,14 @@ +import React, { Component } from 'react' + +class Tutorial extends Component { + render = () => { + return ( +
    +

    Tutorial

    + +
    + ) + } +} + +export default Tutorial \ No newline at end of file diff --git a/src/components/LightBoxes/index.js b/src/components/LightBoxes/index.js new file mode 100644 index 00000000..9ed26774 --- /dev/null +++ b/src/components/LightBoxes/index.js @@ -0,0 +1,40 @@ +import React, { Component } from 'react' + +import About from './About' +import CheatSheet from './CheatSheet' +import ForkMap from './ForkMap' +import ImportDialogBox from './ImportDialogBox' +import Invite from './Invite' +import NoIE from './NoIE' +import SwitchMetacodes from './SwitchMetacodes' +import Tutorial from './Tutorial' + +class LightBoxes extends Component { + render = () => { + const importProps = { + onFileAdded: this.props.importHandleFile, + downloadScreenshot: this.props.downloadScreenshot, + onExport: this.props.onExport + } + return ( + + ) + } +} + +export default LightBoxes \ No newline at end of file diff --git a/frontend/src/components/Loading.js b/src/components/Loading.js similarity index 100% rename from frontend/src/components/Loading.js rename to src/components/Loading.js diff --git a/frontend/src/components/LoginForm.js b/src/components/LoginForm.js similarity index 85% rename from frontend/src/components/LoginForm.js rename to src/components/LoginForm.js index 0813c1c0..c520588a 100644 --- a/frontend/src/components/LoginForm.js +++ b/src/components/LoginForm.js @@ -1,5 +1,6 @@ import React, { Component } from 'react' import PropTypes from 'prop-types' +import { Link } from 'react-router' import onClickOutsideAddon from 'react-onclickoutside' @@ -14,11 +15,6 @@ class LoginForm extends Component { this.state = { token: '' } } - componentDidMount() { - const token = document.head.getElementsByTagName('meta')['csrf-token'].content - this.setState({token}) - } - emailInputDidMount(node) { node && node.focus() } @@ -30,7 +26,6 @@ class LoginForm extends Component { render () { return
    -
    @@ -49,7 +44,7 @@ class LoginForm extends Component {
    - Forgot password? + Forgot password?
    } diff --git a/frontend/src/components/MetacodeSelect.js b/src/components/MetacodeSelect.js similarity index 100% rename from frontend/src/components/MetacodeSelect.js rename to src/components/MetacodeSelect.js diff --git a/frontend/src/components/MobileHeader.js b/src/components/MobileHeader.js similarity index 89% rename from frontend/src/components/MobileHeader.js rename to src/components/MobileHeader.js index dd27c2a7..541f014c 100644 --- a/frontend/src/components/MobileHeader.js +++ b/src/components/MobileHeader.js @@ -44,11 +44,11 @@ class MobileHeader extends Component {
  • - + New Map - +
  • @@ -79,34 +79,34 @@ class MobileHeader extends Component {
  • - + Account - +
  • - + Notifications - + {unreadNotificationsCount > 0 &&
    }
  • - + Sign Out - +
  • } {!currentUser && } } diff --git a/frontend/src/components/NavBar.js b/src/components/NavBar.js similarity index 100% rename from frontend/src/components/NavBar.js rename to src/components/NavBar.js diff --git a/frontend/src/components/NavBarLink.js b/src/components/NavBarLink.js similarity index 79% rename from frontend/src/components/NavBarLink.js rename to src/components/NavBarLink.js index 67feec88..fe701cd0 100644 --- a/frontend/src/components/NavBarLink.js +++ b/src/components/NavBarLink.js @@ -5,7 +5,6 @@ import _ from 'lodash' const PROP_LIST = [ 'matchChildRoutes', - 'hardReload', 'show', 'text', 'href', @@ -15,7 +14,6 @@ const PROP_LIST = [ class NavBarLink extends Component { static propTypes = { matchChildRoutes: PropTypes.bool, - hardReload: PropTypes.bool, show: PropTypes.bool, text: PropTypes.string, href: PropTypes.string, @@ -29,7 +27,6 @@ class NavBarLink extends Component { render = () => { const { matchChildRoutes, - hardReload, show, text, href, @@ -45,14 +42,6 @@ class NavBarLink extends Component { if (!show) { return null } - if (hardReload) { - return ( - - {linkClass &&
    } -
    {text}
    -
    - ) - } return ( {linkClass &&
    } diff --git a/src/components/NewSynapse.js b/src/components/NewSynapse.js new file mode 100644 index 00000000..10e926f8 --- /dev/null +++ b/src/components/NewSynapse.js @@ -0,0 +1,18 @@ +import React, { Component } from 'react' + +class NewSynapse extends Component { + componentDidMount() { + this.props.initNewSynapse() + } + + render = () => { + return ( +
    + + + + ) + } +} + +export default NewSynapse \ No newline at end of file diff --git a/src/components/NewTopic.js b/src/components/NewTopic.js new file mode 100644 index 00000000..d837ea6b --- /dev/null +++ b/src/components/NewTopic.js @@ -0,0 +1,54 @@ +import React, { Component } from 'react' + +class NewTopic extends Component { + componentDidMount() { + this.props.initNewTopic() + } + + render = () => { + const metacodes = [ + { + "id": 1, + "name": "Action", + "created_at": "2017-03-04T17:33:07.394Z", + "updated_at": "2017-03-04T17:33:07.394Z", + "color": "#BD6C85", + "icon": "https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_action.png" + } + ] + return ( +
    + +
    this.props.openMetacodeSwitcher()}> +
    Switch Metacodes
    +
    + +
    +
    Pin Open
    +
    Unpin
    +
    + +
    + {metacodes.map(m => {m.name})} +
    + + + +
    +
    + + ) + } +} + +export default NewTopic + +/* +TODO: +{ @metacodes.each do |metacode| } + Metamaps.Create.selectedMetacodes.push("{ metacode.id }"); + Metamaps.Create.newSelectedMetacodes.push("{ metacode.id }"); + Metamaps.Create.selectedMetacodeNames.push("{ metacode.name }"); + Metamaps.Create.newSelectedMetacodeNames.push("{ metacode.name }"); + { end } +*/ \ No newline at end of file diff --git a/src/components/Notification.js b/src/components/Notification.js new file mode 100644 index 00000000..a41bd307 --- /dev/null +++ b/src/components/Notification.js @@ -0,0 +1,74 @@ +import React, { Component } from 'react' +import PropTypes from 'prop-types' +import { Link } from 'react-router' + +import NotificationDate from './NotificationDate' +import NotificationBody from './NotificationBody' + +class Notification extends Component { + static propTypes = { + markAsRead: PropTypes.func, + markAsUnread: PropTypes.func, + notification: PropTypes.shape({ + id: PropTypes.number.isRequired, + type: PropTypes.string.isRequired, + subject: PropTypes.string.isRequired, + is_read: PropTypes.bool.isRequired, + created_at: PropTypes.string.isRequired, + actor: PropTypes.shape({ + id: PropTypes.number, + name: PropTypes.string, + image: PropTypes.string, + admin: PropTypes.boolean + }), + object: PropTypes.object, + map: PropTypes.object, + topic: PropTypes.object, + topic1: PropTypes.object, + topic2: PropTypes.object + }) + } + + markAsRead = () => { + const { notification, markAsRead } = this.props + markAsRead(notification.id) + } + + markAsUnread = () => { + const { notification, markAsUnread } = this.props + markAsUnread(notification.id) + } + + render = () => { + const { notification } = this.props + const classes = `notification ${notification.is_read ? 'read' : 'unread'}` + const onClick = this.props.onClick || function() {} + + if (!notification.data.object) { + return null + } + + return
  • + +
    + +
    + + +
    + {!notification.is_read &&
    + mark read +
    } + {notification.is_read &&
    + mark unread +
    } +
    +
    + +
    +
    +
  • + } +} + +export default Notification diff --git a/src/components/NotificationBody.js b/src/components/NotificationBody.js new file mode 100644 index 00000000..0fb17735 --- /dev/null +++ b/src/components/NotificationBody.js @@ -0,0 +1,70 @@ +import React, { Component } from 'react' +import outdent from 'outdent' + +import { + MAP_ACCESS_REQUEST, + MAP_ACCESS_APPROVED, + MAP_INVITE_TO_EDIT, + TOPIC_ADDED_TO_MAP, + TOPIC_CONNECTED_1, + TOPIC_CONNECTED_2, + MESSAGE_FROM_DEVS +} from '../constants' + +class NotificationBody extends Component { + notificationTextHtml = () => { + const { notification } = this.props + let map, topic, topic1, topic2 + let result = `
    ${notification.actor.name}
    ` + + switch (notification.type) { + case MAP_ACCESS_APPROVED: + map = notification.data.map + result += outdent`granted your request to edit map + ${map.name}` + break + case MAP_ACCESS_REQUEST: + map = notification.data.map + result += outdent`wants permission to map with you on + ${map.name}` + if (!notification.data.object.answered) { + result += '
    Offer a response
    ' + } + break + case MAP_INVITE_TO_EDIT: + map = notification.data.map + result += outdent`gave you edit access to map + ${map.name}` + break + case TOPIC_ADDED_TO_MAP: + map = notification.data.map + topic = notification.data.topic + result += outdent`added topic ${topic.name} + to map ${map.name}` + break + case TOPIC_CONNECTED_1: + topic1 = notification.data.topic1 + topic2 = notification.data.topic2 + result += outdent`connected ${topic1.name} + to ${topic2.name}` + break + case TOPIC_CONNECTED_2: + topic1 = notification.data.topic1 + topic2 = notification.data.topic2 + result += outdent`connected ${topic2.name} + to ${topic1.name}` + break + case MESSAGE_FROM_DEVS: + result += notification.subject + } + return {__html: result} + } + + render = () => { + return ( +
    + ) + } +} + +export default NotificationBody \ No newline at end of file diff --git a/frontend/src/components/NotificationBox.js b/src/components/NotificationBox.js similarity index 74% rename from frontend/src/components/NotificationBox.js rename to src/components/NotificationBox.js index bfd5f409..b3669de4 100644 --- a/frontend/src/components/NotificationBox.js +++ b/src/components/NotificationBox.js @@ -1,5 +1,6 @@ import React, { Component } from 'react' import PropTypes from 'prop-types' +import { Link } from 'react-router' import onClickOutsideAddon from 'react-onclickoutside' import Notification from './Notification' @@ -8,6 +9,7 @@ import Loading from './Loading' class NotificationBox extends Component { static propTypes = { notifications: PropTypes.array, + loading: PropTypes.bool.isRequired, fetchNotifications: PropTypes.func.isRequired, toggleNotificationsBox: PropTypes.func.isRequired, markAsRead: PropTypes.func.isRequired, @@ -15,10 +17,7 @@ class NotificationBox extends Component { } componentDidMount = () => { - const { notifications, fetchNotifications } = this.props - if (!notifications) { - fetchNotifications() - } + this.props.fetchNotifications() } handleClickOutside = () => { @@ -27,7 +26,7 @@ class NotificationBox extends Component { hasSomeNotifications = () => { const { notifications } = this.props - return notifications && notifications.length > 0 + return notifications.length > 0 } showLoading = () => { @@ -50,22 +49,23 @@ class NotificationBox extends Component { n => + key={`notification-${n.id}`} + onClick={() => this.props.toggleNotificationsBox()} /> ).concat([
  • - + this.props.toggleNotificationsBox()}> See all - +
  • ]) } render = () => { - const { notifications } = this.props + const { notifications, loading } = this.props return
      - {notifications ? this.showNotifications() : this.showLoading()} + {notifications.length === 0 && loading ? this.showLoading() : this.showNotifications()}
    } diff --git a/src/components/NotificationDate.js b/src/components/NotificationDate.js new file mode 100644 index 00000000..b84adf7a --- /dev/null +++ b/src/components/NotificationDate.js @@ -0,0 +1,13 @@ +import React, { Component } from 'react' + +class NotificationDate extends Component { + render = () => { + const { date } = this.props + const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + const created = new Date(date) + return {months[created.getMonth()]} {created.getDate()} + } +} + +export default NotificationDate \ No newline at end of file diff --git a/frontend/src/components/NotificationIcon.js b/src/components/NotificationIcon.js similarity index 100% rename from frontend/src/components/NotificationIcon.js rename to src/components/NotificationIcon.js diff --git a/frontend/src/components/Sprite.js b/src/components/Sprite.js similarity index 100% rename from frontend/src/components/Sprite.js rename to src/components/Sprite.js diff --git a/frontend/src/components/Toast.js b/src/components/Toast.js similarity index 100% rename from frontend/src/components/Toast.js rename to src/components/Toast.js diff --git a/frontend/src/components/TopicCard/Attachments.js b/src/components/TopicCard/Attachments.js similarity index 100% rename from frontend/src/components/TopicCard/Attachments.js rename to src/components/TopicCard/Attachments.js diff --git a/frontend/src/components/TopicCard/Desc.js b/src/components/TopicCard/Desc.js similarity index 100% rename from frontend/src/components/TopicCard/Desc.js rename to src/components/TopicCard/Desc.js diff --git a/frontend/src/components/TopicCard/EmbedlyLink/Card.js b/src/components/TopicCard/EmbedlyLink/Card.js similarity index 100% rename from frontend/src/components/TopicCard/EmbedlyLink/Card.js rename to src/components/TopicCard/EmbedlyLink/Card.js diff --git a/frontend/src/components/TopicCard/EmbedlyLink/index.js b/src/components/TopicCard/EmbedlyLink/index.js similarity index 100% rename from frontend/src/components/TopicCard/EmbedlyLink/index.js rename to src/components/TopicCard/EmbedlyLink/index.js diff --git a/frontend/src/components/TopicCard/Follow.js b/src/components/TopicCard/Follow.js similarity index 100% rename from frontend/src/components/TopicCard/Follow.js rename to src/components/TopicCard/Follow.js diff --git a/frontend/src/components/TopicCard/Info.js b/src/components/TopicCard/Info.js similarity index 100% rename from frontend/src/components/TopicCard/Info.js rename to src/components/TopicCard/Info.js diff --git a/frontend/src/components/TopicCard/Links.js b/src/components/TopicCard/Links.js similarity index 100% rename from frontend/src/components/TopicCard/Links.js rename to src/components/TopicCard/Links.js diff --git a/frontend/src/components/TopicCard/Permission.js b/src/components/TopicCard/Permission.js similarity index 100% rename from frontend/src/components/TopicCard/Permission.js rename to src/components/TopicCard/Permission.js diff --git a/frontend/src/components/TopicCard/Title.js b/src/components/TopicCard/Title.js similarity index 100% rename from frontend/src/components/TopicCard/Title.js rename to src/components/TopicCard/Title.js diff --git a/frontend/src/components/TopicCard/index.js b/src/components/TopicCard/index.js similarity index 100% rename from frontend/src/components/TopicCard/index.js rename to src/components/TopicCard/index.js diff --git a/frontend/src/components/UpperLeftUI.js b/src/components/UpperLeftUI.js similarity index 93% rename from frontend/src/components/UpperLeftUI.js rename to src/components/UpperLeftUI.js index cbead88e..589432c0 100644 --- a/frontend/src/components/UpperLeftUI.js +++ b/src/components/UpperLeftUI.js @@ -16,8 +16,7 @@ class UpperLeftUI extends Component { const { map, currentUser, userRequested, requestAnswered, requestApproved, onRequestClick } = this.props return
    - {currentUser && METAMAPS} - {!currentUser && METAMAPS} + METAMAPS
    diff --git a/frontend/src/components/UpperOptions.js b/src/components/UpperOptions.js similarity index 100% rename from frontend/src/components/UpperOptions.js rename to src/components/UpperOptions.js diff --git a/frontend/src/components/UpperRightUI.js b/src/components/UpperRightUI.js similarity index 96% rename from frontend/src/components/UpperRightUI.js rename to src/components/UpperRightUI.js index 08276c82..b2b68c5e 100644 --- a/frontend/src/components/UpperRightUI.js +++ b/src/components/UpperRightUI.js @@ -50,7 +50,7 @@ class UpperRightUI extends Component { render () { const { currentUser, signInPage, unreadNotificationsCount, notifications, fetchNotifications, openInviteLightbox, - markAsRead, markAsUnread } = this.props + markAsRead, markAsUnread, notificationsLoading } = this.props const { accountBoxOpen, notificationsBoxOpen } = this.state return
    {currentUser && @@ -63,6 +63,7 @@ class UpperRightUI extends Component { unreadNotificationsCount={unreadNotificationsCount} toggleNotificationsBox={this.toggleNotificationsBox}/> {notificationsBoxOpen && { + return ( + + + + + + + ) + } +} + +export default AdminHeader diff --git a/src/routes/Admin/EditMetacode.js b/src/routes/Admin/EditMetacode.js new file mode 100644 index 00000000..e7797cc2 --- /dev/null +++ b/src/routes/Admin/EditMetacode.js @@ -0,0 +1,98 @@ +import React, { Component } from 'react' +import { Link, browserHistory } from 'react-router' +import AdminHeader from './AdminHeader' + +class EditMetacode extends Component { + constructor(props) { + super(props) + this.state = { + existingIcon: null, + icon: null, + name: '', + color: '' + } + } + + componentDidMount() { + const { metacodes } = this.props + const id = parseInt(this.props.params.id, 10) + const metacode = metacodes.find(m => m.id === id) + this.setState({ + existingIcon: metacode.icon, + name: metacode.name, + color: metacode.color + }) + } + + validate = (event) => { + if (this.state.name.length === 0) { + event.preventDefault() + window.alert('A name must be provided') + } else if (!this.state.color.startsWith('#')) { + event.preventDefault() + window.alert('Please begin color with a # symbol') + } + } + + updateForKey = (key) => event => this.setState({[key]: event.target.value}) + + handleFile = (event) => { + this.setState({ + icon: event.target.files[0] + }) + } + + onSubmit = async (event) => { + event.preventDefault() + const { name, color, icon } = this.state + const { updateMetacode, params: { id } } = this.props + try { + const result = await updateMetacode(id, name, color, icon) + browserHistory.push(`/metacodes`) + } catch (e) { + console.log(e) + window.alert('There was an error updating the metacode, check the console') + } + } + + render = () => { + return ( +
    +
    +
    +
    + +
    + + +
    +
    +
    + + {this.state.name} +
    +
    + + + +
    +
    +
    + + +
    +
    +
    + Cancel + +
    + +
    +
    + +
    + ) + } +} + +export default EditMetacode \ No newline at end of file diff --git a/src/routes/Admin/EditMetacodeSet.js b/src/routes/Admin/EditMetacodeSet.js new file mode 100644 index 00000000..08b11324 --- /dev/null +++ b/src/routes/Admin/EditMetacodeSet.js @@ -0,0 +1,41 @@ +import React, { Component } from 'react' +import { browserHistory } from 'react-router' + +import AdminHeader from './AdminHeader' +import MetacodeSetEditor from './MetacodeSetEditor' + +/* +TODO: + get the data actually updating after the network response +*/ + +class EditMetacodeSet extends Component { + onSubmit = async (metacodes, name, desc) => { + const { updateMetacodeSet, params: { id } } = this.props + try { + const result = await updateMetacodeSet(id, metacodes, name, desc) + browserHistory.push(`/metacode_sets`) + } catch (e) { + console.log(e) + window.alert('There was an error updating the metacode set') + } + } + + render = () => { + const { metacodeSets, metacodes } = this.props + const id = parseInt(this.props.params.id, 10) + const metacodeSet = metacodeSets.find(m => m.id === id) + return ( +
    +
    +
    + +
    +
    + +
    + ) + } +} + +export default EditMetacodeSet \ No newline at end of file diff --git a/src/routes/Admin/MetacodeSetEditor.js b/src/routes/Admin/MetacodeSetEditor.js new file mode 100644 index 00000000..bf2f840a --- /dev/null +++ b/src/routes/Admin/MetacodeSetEditor.js @@ -0,0 +1,135 @@ +import React, { Component } from 'react' +import { Link } from 'react-router' + +class MetacodeSetEditor extends Component { + constructor(props) { + super(props) + this.state = { + selectMetacodes: [], + name: '', + desc: '' + } + } + + componentDidMount() { + const { forEdit, metacodeSet } = this.props + if (forEdit) { + this.setState({ + selectMetacodes: metacodeSet.metacodes, + name: metacodeSet.name, + desc: metacodeSet.desc + }) + } + } + + selectAll = () => { + this.setState({ + selectMetacodes: this.props.metacodes.map(m => m.id) + }) + } + + deselectAll = () => { + this.setState({ selectMetacodes: [] }) + } + + liClickHandler = (metacodeId) => { + const { selectMetacodes } = this.state + if (selectMetacodes.indexOf(metacodeId) > -1) { + this.setState({ + selectMetacodes: selectMetacodes.filter(id => id !== metacodeId) + }) + } else { + this.setState({ + selectMetacodes: selectMetacodes.concat([metacodeId]) + }) + } + } + + updateForKey = (key) => event => this.setState({[key]: event.target.value}) + + validate = (event) => { + if (this.state.selectMetacodes.length === 0) { + event.preventDefault() + window.alert('Please select at least one metacode for the set') + } else if (this.state.name.length === 0) { + event.preventDefault() + window.alert('A name must be provided') + } + } + + onSubmit = (event) => { + event.preventDefault() + const { selectMetacodes, name, desc } = this.state + this.props.onSubmit(selectMetacodes, name, desc) + } + + render = () => { + const { selectMetacodes } = this.state + const { metacodes, forNew, forEdit } = this.props + const { length } = metacodes + return ( +
    + +
    + + +
    +
    +
    + +