diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..15bfe7703 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,36 @@ +.dockerignore +.git +.gitignore +.make +*.log +/*.md +dist +docker-compose*.yml +Dockerfile +docs +Makefile +tmp +node_modules +.rubocop.yml +.travis.yml +.sass-cache +.idea/ +DS_Store +coverage/ +coverage_report/ +.byebug_history +coverage_report/ +test/reports/ +/.bundle +*.swp +*.swo +log/ +todo.txt +.sass-cache +.byebug_history +coverage_report/ +test/reports/ +yarn-error.log +.idea/ + + diff --git a/.env b/.env deleted file mode 100644 index 2fc80e3a4..000000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -PORT=3000 diff --git a/.gcloudignore b/.gcloudignore new file mode 100644 index 000000000..1ee4d0dca --- /dev/null +++ b/.gcloudignore @@ -0,0 +1,43 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. +# +# If you find yourself ignoring temporary files generated by your text editor +# or operating system, you probably want to add a global ignore instead: +# git config --global core.excludesfile ~/.gitignore_global + +# Ignore bundler config +/.bundle + +# Ignore the default SQLite database. +/db/*.sqlite3 + +# Ignore all logfiles and tempfiles. +/tmp +*.swp +*.swo +*~ +.ruby-version +.DS_Store +log/ +tmp/* +tmp/**/* +coverage* +public/warpables/* +public/system/* +public/warps/* +public/tms/* +db/schema.rb +*.db +config/database.yml +config/amazon_s3.yml +config/initializers/recaptcha.rb +config/config.yml +config/initializers/site_keys.rb +vendor/bundle +app/assets/bower_components +app/assets/node_modules +public/assets +public/lib +node_modules +todo.txt +.sass-cache +.git/ diff --git a/.gitignore b/.gitignore index 5c03ac56c..5866d40c4 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,9 @@ # Ignore bundler config /.bundle +# avoid committing your secrets inadvertly +./app.yaml + # Ignore the default SQLite database. /db/*.sqlite3 diff --git a/.travis.yml b/.travis.yml index cee7cba88..2de9c7bb5 100755 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,10 @@ language: ruby rvm: - - 2.4.6 + - 2.6.3 + +node_js: + - "12.6.0" node_js: - "12.6.0" @@ -43,6 +46,10 @@ env: - RAILS_ENV=test - CI=true - TRAVIS=true + - DB_HOST='127.0.0.1' + - DB_USER='mapknitter' + - DB_PASS='mapknitter' + - DB_NAME='mapknitter' jobs: include: diff --git a/Dockerfile b/Dockerfile index 3af3f9a22..247133b46 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ # https://github.com/publiclab/mapknitter/ # This image deploys Mapknitter! -FROM ruby:2.4.6-stretch +FROM ruby:2.6.3-stretch # Set correct environment variables. ENV HOME /root @@ -51,4 +51,6 @@ RUN git config --global url."https://".insteadOf git:// COPY . /app/ WORKDIR /app +RUN bundle install + CMD [ "sh", "/app/start.sh" ] diff --git a/Gemfile b/Gemfile index 9426b2d79..100d741df 100644 --- a/Gemfile +++ b/Gemfile @@ -1,13 +1,13 @@ source 'https://rubygems.org' -ruby '2.4.6' -gem 'rails', '~> 5.2.3' +ruby '2.6.3' +gem 'rails', '~> 6.0.0' gem 'rake', '~> 12.3.2' gem 'tzinfo-data' gem 'skylight' gem 'sentry-raven' -gem 'will_paginate', '3.1.8' +gem 'will_paginate', '~> 3.3.0' gem 'will_paginate-bootstrap4', '~> 0.2.2' gem 'friendly_id' gem 'popper_js', '~> 1.11', '>= 1.11.1' @@ -20,14 +20,18 @@ group :dependencies do gem 'image_science', '1.3.0' gem 'recaptcha', '~> 5.0.0', require: 'recaptcha/rails' gem 'oa-openid', '0.3.2' - gem 'ruby-openid', '~>2.5' + gem 'ruby-openid', '~>2.9' gem 'open_id_authentication' - gem 'RubyInline', '~> 3.12.4' + gem 'RubyInline', '~> 3.12.5' gem 'paperclip', '~> 6.1.0' gem 'bootsnap', '~> 1.4.5' - gem 'turbolinks', '~> 5' + gem 'turbolinks', '~> 5.2' gem 'mini_magick', '~> 4.8' - gem 'puma', '~> 4.1.0' + gem 'puma' + gem 'thor', '~> 0.20.3' + + # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker + # gem 'webpacker' # if you use amazon s3 for warpable image storage gem 'aws-sdk-s3', '~> 1' @@ -39,17 +43,15 @@ group :dependencies do # compiling markdown to html gem 'rdiscount', '2.2.0.1' - # Process manager for applications with multiple components - gem 'foreman', '~> 0.85.0' - # asset pipelining gem 'bootstrap-sass' gem 'sassc-rails' gem 'jquery-rails' + gem 'jquery-ui-rails' gem 'sprockets', '3.7.2' gem 'sprockets-rails' gem 'sass', require: 'sass' - gem 'autoprefixer-rails', '~> 9.6.1' + gem 'autoprefixer-rails', '~> 9.7.3' gem 'uglifier', '~> 4.1.20' end @@ -66,6 +68,9 @@ group :test do gem 'minitest-reporters' # for creating sessions on capybara gem 'rack_session_access' + + # Easy installation and use of web drivers to run system tests with browsers + # gem 'webdrivers' end group :development, :test do @@ -74,15 +79,14 @@ group :development, :test do # gem 'webdrivers' gem 'selenium-webdriver' gem 'byebug', '~> 11.0.1', platforms: [:mri, :mingw, :x64_mingw] - gem 'faker', '~> 2.2.2' + gem 'faker', '~> 2.6.0' gem 'pry-rails', '~> 0.3.9' - gem 'action-cable-testing' end group :development do gem 'jshintrb', '~> 0.3.0' gem 'mini_racer', platforms: :ruby - gem 'listen', '~> 3.1.5' + gem 'listen', '~> 3.2.1' gem 'web-console', '~> 3.3' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' @@ -98,4 +102,4 @@ group :passenger do gem 'passenger' end -gem 'httparty' +gem 'httparty' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 2cc533ec8..4c607c473 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,84 +1,95 @@ GEM remote: https://rubygems.org/ specs: - RubyInline (3.12.4) + RubyInline (3.12.5) ZenTest (~> 4.3) ZenTest (4.12.0) - action-cable-testing (0.6.0) - actioncable (>= 5.0) - actioncable (5.2.3) - actionpack (= 5.2.3) + actioncable (6.0.3) + actionpack (= 6.0.3) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailer (5.2.3) - actionpack (= 5.2.3) - actionview (= 5.2.3) - activejob (= 5.2.3) + actionmailbox (6.0.3) + actionpack (= 6.0.3) + activejob (= 6.0.3) + activerecord (= 6.0.3) + activestorage (= 6.0.3) + activesupport (= 6.0.3) + mail (>= 2.7.1) + actionmailer (6.0.3) + actionpack (= 6.0.3) + actionview (= 6.0.3) + activejob (= 6.0.3) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (5.2.3) - actionview (= 5.2.3) - activesupport (= 5.2.3) - rack (~> 2.0) + actionpack (6.0.3) + actionview (= 6.0.3) + activesupport (= 6.0.3) + rack (~> 2.0, >= 2.0.8) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (5.2.3) - activesupport (= 5.2.3) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actiontext (6.0.3) + actionpack (= 6.0.3) + activerecord (= 6.0.3) + activestorage (= 6.0.3) + activesupport (= 6.0.3) + nokogiri (>= 1.8.5) + actionview (6.0.3) + activesupport (= 6.0.3) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (5.2.3) - activesupport (= 5.2.3) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + activejob (6.0.3) + activesupport (= 6.0.3) globalid (>= 0.3.6) - activemodel (5.2.3) - activesupport (= 5.2.3) - activerecord (5.2.3) - activemodel (= 5.2.3) - activesupport (= 5.2.3) - arel (>= 9.0) - activestorage (5.2.3) - actionpack (= 5.2.3) - activerecord (= 5.2.3) + activemodel (6.0.3) + activesupport (= 6.0.3) + activerecord (6.0.3) + activemodel (= 6.0.3) + activesupport (= 6.0.3) + activestorage (6.0.3) + actionpack (= 6.0.3) + activejob (= 6.0.3) + activerecord (= 6.0.3) marcel (~> 0.3.1) - activesupport (5.2.3) + activesupport (6.0.3) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) + zeitwerk (~> 2.2, >= 2.2.2) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) ansi (1.5.0) - arel (9.0.0) ast (2.4.0) - autoprefixer-rails (9.6.1.1) + autoprefixer-rails (9.7.6) execjs - aws-eventstream (1.0.3) - aws-partitions (1.220.0) - aws-sdk-core (3.68.1) - aws-eventstream (~> 1.0, >= 1.0.2) - aws-partitions (~> 1.0) + aws-eventstream (1.1.0) + aws-partitions (1.310.0) + aws-sdk-core (3.94.1) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.24.0) - aws-sdk-core (~> 3, >= 3.61.1) + aws-sdk-kms (1.30.0) + aws-sdk-core (~> 3, >= 3.71.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.48.0) - aws-sdk-core (~> 3, >= 3.61.1) + aws-sdk-s3 (1.63.1) + aws-sdk-core (~> 3, >= 3.83.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) - aws-sigv4 (1.1.0) + aws-sigv4 (1.1.3) aws-eventstream (~> 1.0, >= 1.0.2) bindex (0.8.1) - bootsnap (1.4.5) + bootsnap (1.4.6) msgpack (~> 1.0) bootstrap-sass (3.4.1) autoprefixer-rails (>= 5.2.1) sassc (>= 2.0.0) - builder (3.2.3) + builder (3.2.4) byebug (11.0.1) - capybara (3.29.0) + capybara (3.32.1) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -86,26 +97,23 @@ GEM rack-test (>= 0.6.3) regexp_parser (~> 1.5) xpath (~> 3.2) - childprocess (2.0.0) - rake (< 13.0) + childprocess (3.0.0) climate_control (0.2.0) - codecov (0.1.15) + codecov (0.1.16) json simplecov url coderay (1.1.2) - concurrent-ruby (1.1.5) - crass (1.0.4) + concurrent-ruby (1.1.6) + crass (1.0.6) docile (1.3.2) erubi (1.9.0) execjs (2.7.0) - faker (2.2.2) - i18n (~> 1.6.0) - faraday (0.16.2) + faker (2.6.0) + i18n (>= 1.6, < 1.8) + faraday (1.0.1) multipart-post (>= 1.2, < 3) - ffi (1.11.1) - foreman (0.85.0) - thor (~> 0.19.1) + ffi (1.12.2) friendly_id (5.3.0) activerecord (>= 4.0.0) geokit (1.13.1) @@ -113,61 +121,62 @@ GEM geokit (>= 1.5.0) globalid (0.4.2) activesupport (>= 4.2.0) - httparty (0.17.1) + httparty (0.18.0) mime-types (~> 3.0) multi_xml (>= 0.5.2) - i18n (1.6.0) + i18n (1.7.1) concurrent-ruby (~> 1.0) image_science (1.3.0) RubyInline (~> 3.9) - jaro_winkler (1.5.3) + jaro_winkler (1.5.4) jmespath (1.4.0) jquery-rails (4.3.5) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) + jquery-ui-rails (6.0.1) + railties (>= 3.2.16) jshintrb (0.3.0) execjs multi_json (>= 1.3) rake - json (2.2.0) + json (2.3.0) libv8 (7.3.492.27.1) libxml-ruby (3.1.0) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - loofah (2.3.0) + listen (3.2.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + loofah (2.5.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) marcel (0.3.3) mimemagic (~> 0.3.2) - method_source (0.9.2) - mime-types (3.3) + method_source (1.0.0) + mime-types (3.3.1) mime-types-data (~> 3.2015) - mime-types-data (3.2019.0904) - mimemagic (0.3.3) - mini_magick (4.9.5) + mime-types-data (3.2020.0425) + mimemagic (0.3.5) + mini_magick (4.10.1) mini_mime (1.0.2) mini_portile2 (2.4.0) - mini_racer (0.2.6) - libv8 (>= 6.9.411) - minitest (5.12.2) - minitest-reporters (1.3.8) + mini_racer (0.2.10) + libv8 (> 7.3) + minitest (5.14.0) + minitest-reporters (1.4.2) ansi builder minitest (>= 5.0) ruby-progressbar - msgpack (1.3.1) - multi_json (1.13.1) + msgpack (1.3.3) + multi_json (1.14.1) multi_xml (0.6.0) multipart-post (2.1.1) - mysql2 (0.5.2) + mysql2 (0.5.3) net-http-persistent (2.9.4) nio4r (2.5.2) - nokogiri (1.10.4) + nokogiri (1.10.9) mini_portile2 (~> 2.4.0) oa-core (0.3.2) oa-openid (0.3.2) @@ -185,22 +194,22 @@ GEM mime-types mimemagic (~> 0.3.0) terrapin (~> 0.6.0) - parallel (1.17.0) - parser (2.6.5.0) + parallel (1.19.1) + parser (2.7.1.2) ast (~> 2.4.0) passenger (6.0.4) rack rake (>= 0.8.1) - popper_js (1.14.5) - pry (0.12.2) - coderay (~> 1.1.0) - method_source (~> 0.9.0) + popper_js (1.16.0) + pry (0.13.1) + coderay (~> 1.1) + method_source (~> 1.0) pry-rails (0.3.9) pry (>= 0.10.4) - public_suffix (4.0.1) - puma (4.1.1) + public_suffix (4.0.4) + puma (4.3.3) nio4r (~> 2.0) - rack (2.0.7) + rack (2.2.2) rack-openid (1.3.1) rack (>= 1.1.0) ruby-openid (>= 2.1.8) @@ -209,18 +218,20 @@ GEM rack_session_access (0.2.0) builder (>= 2.0.0) rack (>= 1.0.0) - rails (5.2.3) - actioncable (= 5.2.3) - actionmailer (= 5.2.3) - actionpack (= 5.2.3) - actionview (= 5.2.3) - activejob (= 5.2.3) - activemodel (= 5.2.3) - activerecord (= 5.2.3) - activestorage (= 5.2.3) - activesupport (= 5.2.3) + rails (6.0.3) + actioncable (= 6.0.3) + actionmailbox (= 6.0.3) + actionmailer (= 6.0.3) + actionpack (= 6.0.3) + actiontext (= 6.0.3) + actionview (= 6.0.3) + activejob (= 6.0.3) + activemodel (= 6.0.3) + activerecord (= 6.0.3) + activestorage (= 6.0.3) + activesupport (= 6.0.3) bundler (>= 1.3.0) - railties (= 5.2.3) + railties (= 6.0.3) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.4) actionpack (>= 5.0.1.x) @@ -229,26 +240,26 @@ GEM rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) - rails-html-sanitizer (1.2.0) - loofah (~> 2.2, >= 2.2.2) + rails-html-sanitizer (1.3.0) + loofah (~> 2.3) rails-perftest (0.0.7) - railties (5.2.3) - actionpack (= 5.2.3) - activesupport (= 5.2.3) + railties (6.0.3) + actionpack (= 6.0.3) + activesupport (= 6.0.3) method_source rake (>= 0.8.7) - thor (>= 0.19.0, < 2.0) + thor (>= 0.20.3, < 2.0) rainbow (3.0.0) rake (12.3.3) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) ffi (~> 1.0) rdiscount (2.2.0.1) recaptcha (5.0.0) json redcarpet (3.5.0) - regexp_parser (1.6.0) - request_store (1.4.1) + regexp_parser (1.7.0) + request_store (1.5.0) rack (>= 1.4) right_aws_api (0.3.5) right_cloud_api_base (>= 0.2.6) @@ -268,19 +279,18 @@ GEM rubocop-performance (1.3.0) rubocop (>= 0.68.0) ruby-hmac (0.4.0) - ruby-openid (2.7.0) + ruby-openid (2.9.2) ruby-openid-apps-discovery (1.2.0) ruby-openid (>= 2.1.7) - ruby-prof (1.0.0) + ruby-prof (1.3.2) ruby-progressbar (1.10.1) - ruby_dep (1.5.0) - rubyzip (2.0.0) + rubyzip (2.3.0) sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - sassc (2.2.1) + sassc (2.3.0) ffi (~> 1.9) sassc-rails (2.1.2) railties (>= 4.0.0) @@ -288,19 +298,18 @@ GEM sprockets (> 3.0) sprockets-rails tilt - selenium-webdriver (3.142.5) - childprocess (>= 0.5, < 3.0) + selenium-webdriver (3.142.7) + childprocess (>= 0.5, < 4.0) rubyzip (>= 1.2.2) - sentry-raven (2.11.3) - faraday (>= 0.7.6, < 1.0) - simplecov (0.17.1) + sentry-raven (3.0.0) + faraday (>= 1.0) + simplecov (0.18.5) docile (~> 1.1) - json (>= 1.8, < 3) - simplecov-html (~> 0.10.0) - simplecov-html (0.10.2) - skylight (4.1.2) - skylight-core (= 4.1.2) - skylight-core (4.1.2) + simplecov-html (~> 0.11) + simplecov-html (0.12.2) + skylight (4.3.0) + skylight-core (= 4.3.0) + skylight-core (4.3.0) activesupport (>= 4.2.0) spring (2.1.0) spring-watcher-listen (2.0.1) @@ -313,22 +322,22 @@ GEM actionpack (>= 4.0) activesupport (>= 4.0) sprockets (>= 3.0.0) - sqlite3 (1.4.1) + sqlite3 (1.4.2) terrapin (0.6.0) climate_control (>= 0.0.3, < 1.0) - thor (0.19.4) + thor (0.20.3) thread_safe (0.3.6) tilt (2.0.10) turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) - tzinfo (1.2.5) + tzinfo (1.2.7) thread_safe (~> 0.1) - tzinfo-data (1.2019.3) + tzinfo-data (1.2020.1) tzinfo (>= 1.0.0) uglifier (4.1.20) execjs (>= 0.3.0, < 3) - unicode-display_width (1.6.0) + unicode-display_width (1.6.1) url (0.3.2) web-console (3.7.0) actionview (>= 5.0) @@ -338,34 +347,34 @@ GEM websocket-driver (0.7.1) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.4) - will_paginate (3.1.8) + will_paginate (3.3.0) will_paginate-bootstrap4 (0.2.2) will_paginate (~> 3.0, >= 3.0.0) xpath (3.2.0) nokogiri (~> 1.8) + zeitwerk (2.3.0) PLATFORMS ruby DEPENDENCIES - RubyInline (~> 3.12.4) - action-cable-testing - autoprefixer-rails (~> 9.6.1) + RubyInline (~> 3.12.5) + autoprefixer-rails (~> 9.7.3) aws-sdk-s3 (~> 1) bootsnap (~> 1.4.5) bootstrap-sass byebug (~> 11.0.1) capybara codecov - faker (~> 2.2.2) - foreman (~> 0.85.0) + faker (~> 2.6.0) friendly_id geokit-rails (= 1.1.4) httparty image_science (= 1.3.0) jquery-rails + jquery-ui-rails jshintrb (~> 0.3.0) - listen (~> 3.1.5) + listen (~> 3.2.1) mini_magick (~> 4.8) mini_racer minitest @@ -378,9 +387,9 @@ DEPENDENCIES passenger popper_js (~> 1.11, >= 1.11.1) pry-rails (~> 0.3.9) - puma (~> 4.1.0) + puma rack_session_access - rails (~> 5.2.3) + rails (~> 6.0.0) rails-controller-testing rails-perftest rake (~> 12.3.2) @@ -389,7 +398,7 @@ DEPENDENCIES right_aws_api (~> 0.3.5) rubocop (~> 0.70.0) rubocop-performance - ruby-openid (~> 2.5) + ruby-openid (~> 2.9) ruby-prof sass sassc-rails @@ -402,15 +411,16 @@ DEPENDENCIES sprockets (= 3.7.2) sprockets-rails sqlite3 - turbolinks (~> 5) + thor (~> 0.20.3) + turbolinks (~> 5.2) tzinfo-data uglifier (~> 4.1.20) web-console (~> 3.3) - will_paginate (= 3.1.8) + will_paginate (~> 3.3.0) will_paginate-bootstrap4 (~> 0.2.2) RUBY VERSION - ruby 2.4.6p354 + ruby 2.6.3p62 BUNDLED WITH - 1.17.3 + 1.17.2 diff --git a/Makefile b/Makefile index e809c7ab2..785044a78 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,6 @@ export COMPOSE_HTTP_TIMEOUT=360 +export COMPOSE_PROJECT_NAME +export PORT define wait_for_container @while ! docker-compose logs web | grep "web server started"; do\ @@ -10,7 +12,9 @@ endef build: cp config/database.yml.example config/database.yml cp config/config.yml.example config/config.yml + cp config/initializers/recaptcha.rb.example config/initializers/recaptcha.rb cp db/schema.rb.example db/schema.rb + docker-compose down --remove-orphans docker-compose build deploy-container: @@ -22,7 +26,4 @@ redeploy-container: docker-compose up --force-recreate -d $(call wait_for_container) docker-compose run -e "DISABLE_DATABASE_ENVIRONMENT_CHECK=1" --rm web bash -lc \ - "bundle exec rails db:drop && \ - bundle exec rails db:create && \ - bundle exec rails db:schema:load && \ - bundle exec rails db:migrate" + "bundle exec rails db:migrate" diff --git a/Procfile b/Procfile index 841da4133..b015561fd 100644 --- a/Procfile +++ b/Procfile @@ -1,2 +1,2 @@ -passenger: passenger start +passenger: passenger start --port $PORT puma: puma -C config/puma.rb diff --git a/README.md b/README.md index 259c560c3..2f3f2f9f8 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Use Public Lab's open source MapKnitter to upload your own aerial photographs (f 5. [Developers](#developers) 6. [Staging infrastructure and testing](#staging-infrastructure-and-testing) 7. [License](#license) +8. [MapKnitter in depth](#mapknitter-in-depth) **** @@ -56,6 +57,7 @@ Another moving part is the new-ish Annotations 2.0 which uses [Leaflet.Illustrat Please consider which installation method you prefer. Cloud Installation requires fewer steps and is platform agnostic, but you may value working from your terminal, for familiarity, more. - [Standard Installation](#Standard-Installation) +- [Windows Installation](#windows-installation) - [Cloud Installation](#Cloud-Installation)
There was an error.
") + $("#new_comment textarea").attr('disabled', false) + + $("#comments").append("There was an error.
") } }) /* just before comment submission */ - $("#new_comment").on("ajax:beforeSend",function() { + $("#new_comment").on("ajax:beforeSend", function () { $("#new_comment button.btn-primary").html("").addClass('disabled') - $("#new_comment textarea").attr('disabled',true) + $("#new_comment textarea").attr('disabled', true) }) // display upload modal on drag-dropped image: - $('#knitter-map-pane').on('dragenter',function(){ + $('#knitter-map-pane').on('dragenter', function () { $('#knitter-map-pane').addClass('dragover') }) - $('#knitter-map-pane').on('dragleave',function(){ + $('#knitter-map-pane').on('dragleave', function () { $('#knitter-map-pane').removeClass('dragover') }) - $('#knitter-map-pane').on('drop',function(){ + $('#knitter-map-pane').on('drop', function () { $('#uploadModal').modal('show') $('#knitter-map-pane').removeClass('dragover') }) -}); +}); \ No newline at end of file diff --git a/app/assets/package-lock.json b/app/assets/package-lock.json deleted file mode 100644 index 0dbf0109c..000000000 --- a/app/assets/package-lock.json +++ /dev/null @@ -1,876 +0,0 @@ -{ - "name": "mapknitter.js", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", - "dev": true - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", - "dev": true - }, - "argparse": { - "version": "0.1.16", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", - "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", - "dev": true, - "requires": { - "underscore": "~1.7.0", - "underscore.string": "~2.4.0" - }, - "dependencies": { - "underscore.string": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", - "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", - "dev": true - } - } - }, - "async": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", - "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true, - "requires": { - "ansi-styles": "^1.1.0", - "escape-string-regexp": "^1.0.0", - "has-ansi": "^0.1.0", - "strip-ansi": "^0.3.0", - "supports-color": "^0.2.0" - } - }, - "cli": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", - "integrity": "sha1-Aq1Eo4Cr8nraxebwzdewQ9dMU+M=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "~ 3.2.1" - }, - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2", - "minimatch": "0.3" - } - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } - } - }, - "coffee-script": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", - "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", - "dev": true - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "1.0.2-1.2.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", - "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", - "dev": true - }, - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "dev": true - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "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", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "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=", - "dev": true - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", - "dev": true - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", - "integrity": "sha1-wUxbO/FNdBf/v9mQwKdJXNnzN7w=", - "dev": true - }, - "findup-sync": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", - "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", - "dev": true, - "requires": { - "glob": "~3.2.9", - "lodash": "~2.4.1" - }, - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2", - "minimatch": "0.3" - } - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "~0.1.0" - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true - }, - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - }, - "dependencies": { - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - } - } - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" - }, - "dependencies": { - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "grunt": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", - "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", - "dev": true, - "requires": { - "async": "~0.1.22", - "coffee-script": "~1.3.3", - "colors": "~0.6.2", - "dateformat": "1.0.2-1.2.3", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.1.2", - "getobject": "~0.1.0", - "glob": "~3.1.21", - "grunt-legacy-log": "~0.1.0", - "grunt-legacy-util": "~0.2.0", - "hooker": "~0.2.3", - "iconv-lite": "~0.2.11", - "js-yaml": "~2.0.5", - "lodash": "~0.9.2", - "minimatch": "~0.2.12", - "nopt": "~1.0.10", - "rimraf": "~2.2.8", - "underscore.string": "~2.2.1", - "which": "~1.0.5" - } - }, - "grunt-contrib-concat": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz", - "integrity": "sha1-lTxu/f39LBB6uchQd/LUsk0xzUk=", - "dev": true, - "requires": { - "chalk": "^0.5.1", - "source-map": "^0.3.0" - } - }, - "grunt-contrib-jshint": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.10.0.tgz", - "integrity": "sha1-V+vMyofo8yevZkXYo8WG1IReTYE=", - "dev": true, - "requires": { - "hooker": "~0.2.3", - "jshint": "~2.5.0" - }, - "dependencies": { - "jshint": { - "version": "2.5.11", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.5.11.tgz", - "integrity": "sha1-4tlYWLuxqngwAQii6BCZ+wlWIuA=", - "dev": true, - "requires": { - "cli": "0.6.x", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "minimatch": "1.0.x", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x", - "underscore": "1.6.x" - } - }, - "minimatch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", - "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, - "grunt-contrib-watch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz", - "integrity": "sha1-ZP3LolpjX1tNobbOb5DaCutuPxU=", - "dev": true, - "requires": { - "async": "~0.2.9", - "gaze": "~0.5.1", - "lodash": "~2.4.1", - "tiny-lr-fork": "0.0.5" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } - }, - "grunt-legacy-log": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", - "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", - "dev": true, - "requires": { - "colors": "~0.6.2", - "grunt-legacy-log-utils": "~0.1.1", - "hooker": "~0.2.3", - "lodash": "~2.4.1", - "underscore.string": "~2.3.3" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } - } - }, - "grunt-legacy-log-utils": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", - "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", - "dev": true, - "requires": { - "colors": "~0.6.2", - "lodash": "~2.4.1", - "underscore.string": "~2.3.3" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", - "dev": true - } - } - }, - "grunt-legacy-util": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", - "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", - "dev": true, - "requires": { - "async": "~0.1.22", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "hooker": "~0.2.3", - "lodash": "~0.9.2", - "underscore.string": "~2.2.1", - "which": "~1.0.5" - } - }, - "grunt-newer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/grunt-newer/-/grunt-newer-0.7.0.tgz", - "integrity": "sha1-N22dm2TOXGSLa/ob2pj3vCGT5B4=", - "dev": true, - "requires": { - "async": "0.2.10", - "rimraf": "2.2.6" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "rimraf": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz", - "integrity": "sha1-xZWXVpsU2VatKcrMQr3d9fDqT0w=", - "dev": true - } - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true, - "requires": { - "ansi-regex": "^0.2.0" - } - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, - "iconv-lite": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", - "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "js-yaml": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", - "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", - "dev": true, - "requires": { - "argparse": "~ 0.1.11", - "esprima": "~ 1.0.2" - } - }, - "jshint": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.10.1.tgz", - "integrity": "sha512-9GpPfKeffYBl7oBDX2lHPG16j0AM7D2bn3aLy9DaWTr6CWa0i/7UGhX8WLZ7V14QQnnr4hXbjauTLYg06F+HYw==", - "dev": true, - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "~4.17.10", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" - }, - "dependencies": { - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "lodash": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", - "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", - "dev": true - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "matchdep": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-0.3.0.tgz", - "integrity": "sha1-Qo5knOXCgY0iDgRj7/XA3p5Z1S4=", - "dev": true, - "requires": { - "findup-sync": "~0.1.2", - "globule": "~0.1.0", - "resolve": "~0.5.1", - "stack-trace": "0.0.7" - } - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "integrity": "sha1-WPZUpz2XU98MUdlobckhBKZ/S7s=", - "dev": true, - "requires": { - "nopt": "~2.0.0" - }, - "dependencies": { - "nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "integrity": "sha1-ynQW8gpeP5w7hhgPlilfo9C1Lg0=", - "dev": true, - "requires": { - "abbrev": "1" - } - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "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=", - "dev": true - }, - "qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz", - "integrity": "sha1-MbGtBYVnZRxSaSFQa5qHk5EaA4Q=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.5.1.tgz", - "integrity": "sha1-FeSiIsQja81M+FRUQSwtD7ZSRXY=", - "dev": true - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "source-map": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz", - "integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, - "stack-trace": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.7.tgz", - "integrity": "sha1-xy4Il0T8Nln1CM3ONiGvVjTsD/8=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true, - "requires": { - "ansi-regex": "^0.2.1" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - }, - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", - "dev": true - }, - "tiny-lr-fork": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz", - "integrity": "sha1-Hpnh4qhGm3NquX2X7vqYxx927Qo=", - "dev": true, - "requires": { - "debug": "~0.7.0", - "faye-websocket": "~0.4.3", - "noptify": "~0.0.3", - "qs": "~0.5.2" - } - }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true - }, - "underscore.string": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", - "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", - "dev": true - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } -} diff --git a/app/assets/package.json b/app/assets/package.json deleted file mode 100644 index c61627682..000000000 --- a/app/assets/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "mapknitter.js", - "version": "0.1.0", - "description": "Client-side javascript for MapKnitter.org.", - "main": "dist/MapKnitter.js", - "directories": { - "example": "examples" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [ - "mapknitter", - "grassroots-mapping", - "leaflet" - ], - "author": "Justin Manley", - "license": "MIT", - "devDependencies": { - "grunt": "^0.4.5", - "grunt-contrib-concat": "^0.5.0", - "grunt-contrib-jshint": "^0.10.0", - "grunt-contrib-watch": "^0.6.1", - "grunt-newer": "^0.7.0", - "jshint": "^2.5.5", - "matchdep": "^0.3.0" - } -} diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 25bb6f016..13d8577f2 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -5,6 +5,7 @@ $icon-font-path: "bootstrap-sass/assets/fonts/bootstrap/"; @import "uploads"; @import "annotations"; @import "sidebar.css"; +@import "jquery-ui.css"; @import "bootstrap/dist/css/bootstrap.min.css"; @import "leaflet/dist/leaflet.css"; @import "leaflet-draw/dist/leaflet.draw.css"; diff --git a/app/assets/stylesheets/front_ui.scss b/app/assets/stylesheets/front_ui.scss new file mode 100644 index 000000000..3e40d611b --- /dev/null +++ b/app/assets/stylesheets/front_ui.scss @@ -0,0 +1,41 @@ + +#hero { + margin-bottom: 0; + } + .activities p { + color: #aaa; + width: 80%; + padding-top: 20px; + padding-bottom: 20px; + padding-left: 20%; + } + .lead-text { + padding: 30px 10px 10px; + border-radius: 4px; + box-shadow: 0 6px 12px rgba(0,0,0,0.175); + } + .featured-places a { + padding: 8px 12px; + } + .featured-places { + text-align: center; + padding-bottom: 20px; + width: 100%; + overflow: hidden; + position: absolute; + } + #anonymous-map button{ + width: 70px; + background-color: #ffffff; + border: none; + margin-right: 0.25rem; + } + #anonymous-map i{ + font-size:20px; + color:white; + } + @media(max-width: 780px) { + .before-featured-map { + margin-bottom: 50px; + } + } \ No newline at end of file diff --git a/app/assets/stylesheets/header.scss b/app/assets/stylesheets/header.scss index 3748dc1c9..9bcc25ca2 100644 --- a/app/assets/stylesheets/header.scss +++ b/app/assets/stylesheets/header.scss @@ -1,5 +1,6 @@ body { padding-top:55px; + overflow-x: hidden; } .login-links { diff --git a/app/assets/stylesheets/jquery-ui.css b/app/assets/stylesheets/jquery-ui.css new file mode 100644 index 000000000..125644646 --- /dev/null +++ b/app/assets/stylesheets/jquery-ui.css @@ -0,0 +1,3 @@ +/* + *= require jquery-ui +*/ diff --git a/app/assets/stylesheets/style.scss b/app/assets/stylesheets/style.scss index 93ee55e5c..d776c82aa 100644 --- a/app/assets/stylesheets/style.scss +++ b/app/assets/stylesheets/style.scss @@ -143,9 +143,15 @@ label small { } } +.cta-buttons { + .btn { + margin-top: 0.25rem; + } +} + .footer { - margin: 20px 0 0 0; - padding: 20px 60px 40px; + margin: 10px auto; + padding: 30px 60px 40px; border-top: 1px solid #ddd; background:#f6f9fc; } @@ -153,7 +159,9 @@ label small { .footer .footer-link { color: #8898aa; } - +.footer-links { + text-align: left; +} .footer .footer-link:hover { text-decoration: none; color: #32325d; @@ -164,11 +172,22 @@ label small { font-weight: bolder; letter-spacing: .025em; font-size: 14px; - margin-top: 10px; - margin-bottom: 10px; + text-transform: uppercase; } - +.fab { + color: #464159; + font-size:35px; + padding: 4px; +} +.fab:hover { + text-decoration: none; + color: #272343; + transition: color 1.5s +} +.social { + text-align: right; +} .mapping-kits { border: none; } @@ -181,6 +200,7 @@ label small { width: 200px; height: 200px; border-radius: 50%; + border: 1px solid #ddd; } .btn.create-map { @@ -255,3 +275,74 @@ label small { .light-blue { background-color: #d0e2f2; } + +#about-text { + width: 70%; + margin: auto; +} +#about-img { + margin: 20px auto; +} +#count-container { + display: flex; + justify-content: space-evenly; + flex-wrap: wrap; + img { + width: 200px; + height: 200px + } + figure { + text-align: center; + } +} + +.appear { + animation: appearance 2.5s; +} +@keyframes appearance { + from {opacity: 0} + to {opacity: 1} +} +@media screen and (max-width: 400px) { + #about-text { + width: 100%; + } + #count-container { + flex-direction: column; + } + .social, .footer-links { + text-align: center; + } + .footer { + width: 100% + } +} + +.container#login_mk { + padding-top: 2.5%; + text-align: center; +} + +.text-anonymous { + text-align: left; + margin: 20px; + padding: 50px; + width: 60%; + margin-left: 17%; + } + + + @media (max-width: 750px) { + .text-anonymous { + width: 100%; + margin: 10px; + padding: 10px; + } + } + +#open_id_form button { + width: 70px; + background-color: #ffffff; + border: none; + margin-right: 0.25rem; +} \ No newline at end of file diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index b147be42d..5e111fff3 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -27,7 +27,7 @@ def create def update @comment = Comment.find params[:id] if logged_in? && current_user.can_edit?(@comment) - @comment.update_attributes(comment_params) + @comment.update(comment_params) redirect_to @comment.map else flash[:error] = 'You do not have permissions to update that comment.' diff --git a/app/controllers/export_controller.rb b/app/controllers/export_controller.rb index f11e6b07e..87376dadb 100644 --- a/app/controllers/export_controller.rb +++ b/app/controllers/export_controller.rb @@ -87,7 +87,12 @@ def create # mySQL2 error ActiveRecord::StatementInvalid (Mysql2::Error: Field 'bands_string' doesn't have a default value: INSERT INTO `exports` (`export_url`, `created_at`, `updated_at`) VALUES ('//export.mapknitter.org/id/1562102960/status.json', '2019-07-02 21:29:20', '2019-07-02 21:29:20')): # so adding a default value for now. I think this column will be deprecated? - export = Export.create!(export_url: params[:status_url], bands_string: 'default bands_string') + export = Export.create!( + export_url: params[:status_url], + user_id: current_user&.id || 0, + map_id: params[:map_id], + bands_string: 'default bands_string' + ) render json: export.to_json end diff --git a/app/controllers/front_ui_controller.rb b/app/controllers/front_ui_controller.rb index 7eb43482d..381e892f8 100644 --- a/app/controllers/front_ui_controller.rb +++ b/app/controllers/front_ui_controller.rb @@ -26,7 +26,7 @@ def nearby_mappers lat = session[:lat] lon = session[:lon] @nearby_maps = Map.maps_nearby(lat: lat, lon: lon, dist: 10) - .page(params[:maps]) + .page(params[:page]) .per_page(12) @nearby_mappers = User.where(login: Map.maps_nearby(lat: lat, lon: lon, dist: 10) .collect(&:author)) @@ -42,12 +42,15 @@ def save_location render nothing: true end - def about; end + def about + @map_count = Map.count + @img_count = Warpable.count + end def location @loc = params[:loc] - @maps = Map.page(params[:maps]) + @maps = Map.page(params[:page]) .per_page(20) .where('archived = ? and password = ? and location LIKE ?', false, '', "%#{@loc}%") .order('updated_at DESC') @@ -59,7 +62,7 @@ def location end def gallery - @maps = Map.page(params[:maps]) + @maps = Map.page(params[:page]) .per_page(20) .where(archived: false, password: '') .order('updated_at DESC') diff --git a/app/controllers/maps_controller.rb b/app/controllers/maps_controller.rb index c279dac36..7ecd77b10 100644 --- a/app/controllers/maps_controller.rb +++ b/app/controllers/maps_controller.rb @@ -97,7 +97,7 @@ def edit end def update - @map.update_attributes(map_params) + @map.update(map_params) save_tags(@map) @map.save diff --git a/app/models/map.rb b/app/models/map.rb index 1a924d498..6da87de54 100755 --- a/app/models/map.rb +++ b/app/models/map.rb @@ -6,7 +6,7 @@ class Map < ApplicationRecord attr_accessor :image_urls validates_presence_of :name, :slug, :author, :lat, :lon - validates_uniqueness_of :slug + validates_uniqueness_of :slug, case_sensitive: true validates_presence_of :location, message: ' cannot be found. Try entering a latitude and longitude if this problem persists.' # validates_format_of :slug, # :with => /^[\w-]*$/, diff --git a/app/views/front_ui/_maps.html.erb b/app/views/front_ui/_maps.html.erb index 56bc7c651..f7d3770ac 100644 --- a/app/views/front_ui/_maps.html.erb +++ b/app/views/front_ui/_maps.html.erb @@ -26,7 +26,10 @@+ MapKnitter 2 is a free and open source software created and run by Public Lab to to upload your own aerial photographs. +
- MapKnitter 2 is a free and open source software created and run by Public Lab. + MapKnitter can make maps from any image source, but it particularly lends itself to making maps with balloons and kites. The manual process of making maps with MapKnitter differs greatly from automated aerial imaging systems. In those systems, the imaging is of higher precision and processed with spatial and telemetry data collected along with the imagery, typically at higher altitudes and with consistent image overlap in the flight path sequence.
MapKnitter is hosted through a donation of server space by Rackspace.
+ The Cloud Exporter generates high-resolution images and map tiles from MapKnitter maps. +
++ Export <%= exports.count - i %>: + ">Status: +
+<% end %> +- <% if map.user %> - by <%= map.user.login %> - <% else %> - anonymous - <% end %> - | <%= map.location %> -
- -Export maps to generate downloadable, printable, high-resolution files.
-
- If you only need one or two images, consider using the new per-image download in the Images pane; to download a single full-resolution distorted image, click the button next to the image.
-
-
-
<% if Rails.env == 'production' %><%= recaptcha_tags :display => {:theme => "white"} %><% end %>
<% end %> - <%= f.submit "Create map", :class => "btn btn-primary btn-lg", :tabIndex => 4 %> + <%= f.submit "Create map", :class => "btn btn-primary btn-lg", :tabIndex => 4, :data => {confirm: (logged_in? ? nil : 'Are you sure? You will no longer be able to edit the map after you create it.') } %> diff --git a/app/views/maps/show.html.erb b/app/views/maps/show.html.erb index 926901b88..4dd0ebe9f 100644 --- a/app/views/maps/show.html.erb +++ b/app/views/maps/show.html.erb @@ -7,14 +7,24 @@