Merge remote-tracking branch 'upstream/pull/2120'
authorTom Hughes <tom@compton.nu>
Mon, 28 Jan 2019 19:04:02 +0000 (19:04 +0000)
committerTom Hughes <tom@compton.nu>
Mon, 28 Jan 2019 19:04:02 +0000 (19:04 +0000)
131 files changed:
.rubocop_todo.yml
Gemfile
Gemfile.lock
app/abilities/ability.rb
app/abilities/capability.rb
app/assets/javascripts/edit/id.js.erb
app/assets/stylesheets/common.scss
app/controllers/api_controller.rb
app/controllers/application_controller.rb
app/controllers/changesets_controller.rb
app/controllers/errors_controller.rb
app/controllers/nodes_controller.rb
app/controllers/oauth_controller.rb
app/controllers/old_controller.rb
app/controllers/relations_controller.rb
app/controllers/ways_controller.rb
app/views/browse/changeset.html.erb
app/views/browse/feature.html.erb
app/views/changesets/index.atom.builder
config/initializers/sanitize.rb
config/locales/ar.yml
config/locales/bn.yml
config/locales/cs.yml
config/locales/da.yml
config/locales/de.yml
config/locales/en.yml
config/locales/eo.yml
config/locales/es.yml
config/locales/fa.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/it.yml
config/locales/lb.yml
config/locales/lv.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/ru.yml
config/locales/sl.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/th.yml
config/locales/uk.yml
config/routes.rb
lib/rich_text.rb
test/controllers/changesets_controller_test.rb
test/controllers/nodes_controller_test.rb
test/controllers/old_nodes_controller_test.rb
test/controllers/old_relations_controller_test.rb
test/controllers/old_ways_controller_test.rb
test/controllers/relations_controller_test.rb
test/controllers/ways_controller_test.rb
test/lib/rich_text_test.rb
vendor/assets/iD/iD.css.erb
vendor/assets/iD/iD.js
vendor/assets/iD/iD/img/community-sprite.svg
vendor/assets/iD/iD/img/fa-sprite.svg
vendor/assets/iD/iD/img/iD-sprite.svg
vendor/assets/iD/iD/img/pattern/lines.png [new file with mode: 0644]
vendor/assets/iD/iD/img/temaki-sprite.svg
vendor/assets/iD/iD/locales/af.json
vendor/assets/iD/iD/locales/ar.json
vendor/assets/iD/iD/locales/ast.json
vendor/assets/iD/iD/locales/bg.json
vendor/assets/iD/iD/locales/bn.json
vendor/assets/iD/iD/locales/bs.json
vendor/assets/iD/iD/locales/ca.json
vendor/assets/iD/iD/locales/ckb.json
vendor/assets/iD/iD/locales/cs.json
vendor/assets/iD/iD/locales/da.json
vendor/assets/iD/iD/locales/de.json
vendor/assets/iD/iD/locales/dv.json
vendor/assets/iD/iD/locales/el.json
vendor/assets/iD/iD/locales/en-AU.json
vendor/assets/iD/iD/locales/en-GB.json
vendor/assets/iD/iD/locales/en.json
vendor/assets/iD/iD/locales/eo.json
vendor/assets/iD/iD/locales/es.json
vendor/assets/iD/iD/locales/et.json
vendor/assets/iD/iD/locales/eu.json
vendor/assets/iD/iD/locales/fa.json
vendor/assets/iD/iD/locales/fi.json
vendor/assets/iD/iD/locales/fr.json
vendor/assets/iD/iD/locales/gl.json
vendor/assets/iD/iD/locales/he.json
vendor/assets/iD/iD/locales/hi.json
vendor/assets/iD/iD/locales/hr.json
vendor/assets/iD/iD/locales/hu.json
vendor/assets/iD/iD/locales/hy.json
vendor/assets/iD/iD/locales/id.json
vendor/assets/iD/iD/locales/is.json
vendor/assets/iD/iD/locales/it.json
vendor/assets/iD/iD/locales/ja.json
vendor/assets/iD/iD/locales/kn.json
vendor/assets/iD/iD/locales/ko.json
vendor/assets/iD/iD/locales/ku.json
vendor/assets/iD/iD/locales/lt.json
vendor/assets/iD/iD/locales/lv.json
vendor/assets/iD/iD/locales/mg.json
vendor/assets/iD/iD/locales/mk.json
vendor/assets/iD/iD/locales/ms.json
vendor/assets/iD/iD/locales/ne.json
vendor/assets/iD/iD/locales/nl.json
vendor/assets/iD/iD/locales/no.json
vendor/assets/iD/iD/locales/pl.json
vendor/assets/iD/iD/locales/pt-BR.json
vendor/assets/iD/iD/locales/pt.json
vendor/assets/iD/iD/locales/ro.json
vendor/assets/iD/iD/locales/ru.json
vendor/assets/iD/iD/locales/si.json
vendor/assets/iD/iD/locales/sk.json
vendor/assets/iD/iD/locales/sl.json
vendor/assets/iD/iD/locales/so.json
vendor/assets/iD/iD/locales/sq.json
vendor/assets/iD/iD/locales/sr.json
vendor/assets/iD/iD/locales/sv.json
vendor/assets/iD/iD/locales/ta.json
vendor/assets/iD/iD/locales/te.json
vendor/assets/iD/iD/locales/th.json
vendor/assets/iD/iD/locales/tl.json
vendor/assets/iD/iD/locales/tr.json
vendor/assets/iD/iD/locales/uk.json
vendor/assets/iD/iD/locales/vi.json
vendor/assets/iD/iD/locales/yue.json
vendor/assets/iD/iD/locales/zh-CN.json
vendor/assets/iD/iD/locales/zh-HK.json
vendor/assets/iD/iD/locales/zh-TW.json
vendor/assets/iD/iD/locales/zh.json
vendor/assets/iD/iD/mapillary-js/mapillary.js
vendor/assets/iD/iD/mapillary-js/mapillary.js.map
vendor/assets/iD/iD/mapillary-js/mapillary.min.js

index c24fa1310036264e9ab9dd06f2d99e02cfa5cd31..35107e9b9b2ea961b3949d10ec50b4caef6ba16d 100644 (file)
@@ -53,7 +53,7 @@ Metrics/ClassLength:
 
 # Offense count: 72
 Metrics/CyclomaticComplexity:
-  Max: 20
+  Max: 23
 
 # Offense count: 691
 # Configuration parameters: CountComments.
diff --git a/Gemfile b/Gemfile
index fa14089d3a1a2d4a8aff48ea81fac0a0ea176ba1..fa1bed46886eccae3b083b73794ba3a85e878e1a 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -77,7 +77,7 @@ gem "omniauth-openid"
 gem "omniauth-windowslive"
 
 # Markdown formatting support
-gem "redcarpet"
+gem "kramdown"
 
 # For status transitions of Issues
 gem "aasm"
index 6f7a0919bd303452e8d5b7f9072c8739ad8395a6..36e6ae9dd33a7fa8c2bcde441aa9e04d9b1d55ff 100644 (file)
@@ -164,6 +164,7 @@ GEM
       jsonify (< 0.4.0)
     jwt (2.1.0)
     kgio (2.11.2)
+    kramdown (1.17.0)
     libv8 (3.16.14.19)
     libxml-ruby (3.1.0)
     listen (3.1.5)
@@ -306,7 +307,6 @@ GEM
       ffi (~> 1.0)
     record_tag_helper (1.0.0)
       actionview (~> 5.x)
-    redcarpet (3.4.0)
     ref (2.0.0)
     request_store (1.4.1)
       rack (>= 1.4)
@@ -417,6 +417,7 @@ DEPENDENCIES
   json
   jsonify-rails
   kgio
+  kramdown
   libxml-ruby (>= 2.0.5)
   listen
   logstasher
@@ -443,7 +444,6 @@ DEPENDENCIES
   rails-controller-testing
   rails-i18n (~> 4.0.0)
   record_tag_helper
-  redcarpet
   rinku (>= 1.2.2)
   rotp
   rubocop
index dca80ebbabdfd96917da46dd19319d212aac6bd5..c4cca7cc5f0474ebefacd834d226ce0aedc9b24b 100644 (file)
@@ -4,9 +4,10 @@ class Ability
   include CanCan::Ability
 
   def initialize(user)
+    can [:trackpoints, :map, :changes, :capabilities, :permissions], :api
     can [:relation, :relation_history, :way, :way_history, :node, :node_history,
          :changeset, :note, :new_note, :query], :browse
-    can [:index, :feed, :read, :download, :query], Changeset
+    can [:index, :feed, :show, :download, :query], Changeset
     can :index, ChangesetComment
     can :search, :direction
     can [:index, :permalink, :edit, :help, :fixthemap, :offline, :export, :about, :preview, :copyright, :key, :id], :site
@@ -15,12 +16,19 @@ class Ability
     can [:search, :search_latlon, :search_ca_postcode, :search_osm_nominatim,
          :search_geonames, :search_osm_nominatim_reverse, :search_geonames_reverse], :geocoder
     can [:index, :create, :comment, :feed, :show, :search, :mine], Note
+    can [:token, :request_token, :access_token, :test_request], :oauth
     can [:index, :show], Redaction
     can [:search_all, :search_nodes, :search_ways, :search_relations], :search
     can [:trackpoints], :swf
     can [:index, :show, :data, :georss, :picture, :icon], Trace
     can [:terms, :api_users, :login, :logout, :new, :create, :save, :confirm, :confirm_resend, :confirm_email, :lost_password, :reset_password, :show, :api_read, :auth_success, :auth_failure], User
     can [:index, :show, :blocks_on, :blocks_by], UserBlock
+    can [:index, :show], Node
+    can [:index, :show, :full, :ways_for_node], Way
+    can [:index, :show, :full, :relations_for_node, :relations_for_way, :relations_for_relation], Relation
+    can [:history, :version], OldNode
+    can [:history, :version], OldWay
+    can [:history, :version], OldRelation
 
     if user
       can :welcome, :site
@@ -28,6 +36,7 @@ class Ability
       can [:create, :edit, :comment, :subscribe, :unsubscribe], DiaryEntry
       can [:new, :create, :reply, :show, :inbox, :outbox, :mark, :destroy], Message
       can [:close, :reopen], Note
+      can [:revoke, :authorize], :oauth
       can [:new, :create], Report
       can [:mine, :new, :create, :edit, :update, :delete, :api_create, :api_read, :api_update, :api_delete, :api_data], Trace
       can [:account, :go_public, :make_friend, :remove_friend, :api_details, :api_gpx_files], User
@@ -36,6 +45,9 @@ class Ability
       if user.terms_agreed? || !REQUIRE_TERMS_AGREED
         can [:create, :update, :upload, :close, :subscribe, :unsubscribe, :expand_bbox], Changeset
         can :create, ChangesetComment
+        can [:create, :update, :delete], Node
+        can [:create, :update, :delete], Way
+        can [:create, :update, :delete], Relation
       end
 
       if user.moderator?
@@ -45,6 +57,11 @@ class Ability
         can :destroy, Note
         can [:new, :create, :edit, :update, :destroy], Redaction
         can [:new, :edit, :create, :update, :revoke], UserBlock
+        if user.terms_agreed? || !REQUIRE_TERMS_AGREED
+          can :redact, OldNode
+          can :redact, OldWay
+          can :redact, OldRelation
+        end
       end
 
       if user.administrator?
index 556d4036cd52714b79e563123460ae0576c993a4..3d951900be11c07b638b8410b5bc26be95e64ab6 100644 (file)
@@ -15,11 +15,19 @@ class Capability
     if token&.user&.terms_agreed? || !REQUIRE_TERMS_AGREED
       can [:create, :update, :upload, :close, :subscribe, :unsubscribe, :expand_bbox], Changeset if capability?(token, :allow_write_api)
       can :create, ChangesetComment if capability?(token, :allow_write_api)
+      can [:create, :update, :delete], Node if capability?(token, :allow_write_api)
+      can [:create, :update, :delete], Way if capability?(token, :allow_write_api)
+      can [:create, :update, :delete], Relation if capability?(token, :allow_write_api)
     end
 
     if token&.user&.moderator?
       can [:destroy, :restore], ChangesetComment if capability?(token, :allow_write_api)
       can :destroy, Note if capability?(token, :allow_write_notes)
+      if token&.user&.terms_agreed? || !REQUIRE_TERMS_AGREED
+        can :redact, OldNode if capability?(token, :allow_write_api)
+        can :redact, OldWay if capability?(token, :allow_write_api)
+        can :redact, OldRelation if capability?(token, :allow_write_api)
+      end
     end
   end
 
index a85fcef457f98271606c692985d1227ad191a7bc..2ce8974f5d0decd3d55bbfe5fb74bd270d184517 100644 (file)
@@ -25,6 +25,9 @@ $(document).ready(function () {
     if (hashParams.disable_features) params.disable_features = hashParams.disable_features;
     if (hashParams.offset) params.offset = hashParams.offset;
     if (hashParams.walkthrough) params.walkthrough = hashParams.walkthrough;
+    if (hashParams.locale) params.locale = hashParams.locale;
+    if (hashParams.maprules) params.maprules = hashParams.maprules;
+    if (hashParams.presets) params.presets = hashParams.presets;
 
     if (id.data("gpx")) {
       params.gpx = id.data("gpx");
index d36e77285252cdcf77e05ffc6c7ada777d244786..d725cc287557d365dd06ce09c39a369871e74a0f 100644 (file)
@@ -2342,11 +2342,11 @@ a.button {
     margin-left: $lineheight;
   }
 
-  ul li {
+  ul li {
     list-style: disc;
   }
 
-  ol li {
+  ol li {
     list-style: decimal;
   }
 }
index 90883376c97d7af2cf8239b582baea67d576b7e9..3273665d232cf05679b05b60814a4dd5ef09ed2c 100644 (file)
@@ -1,5 +1,9 @@
 class ApiController < ApplicationController
   skip_before_action :verify_authenticity_token
+  before_action :api_deny_access_handler
+
+  authorize_resource :class => false
+
   before_action :check_api_readable, :except => [:capabilities]
   before_action :setup_user_auth, :only => [:permissions]
   around_action :api_call_handle_error, :api_call_timeout
index 38758e1df4277031c64ee47b5242701890261793..bc1fd488df4002cf8b781823f27b52eabb9393ff 100644 (file)
@@ -4,6 +4,7 @@ class ApplicationController < ActionController::Base
   protect_from_forgery :with => :exception
 
   rescue_from CanCan::AccessDenied, :with => :deny_access
+  check_authorization
 
   before_action :fetch_body
   around_action :better_errors_allow_inline, :if => proc { Rails.env.development? }
@@ -54,24 +55,6 @@ class ApplicationController < ActionController::Base
     @oauth = current_user.access_token(OAUTH_KEY) if current_user && defined? OAUTH_KEY
   end
 
-  ##
-  # requires the user to be logged in by the token or HTTP methods, or have an
-  # OAuth token with the right capability. this method is a bit of a pain to call
-  # directly, since it's cumbersome to call filters with arguments in rails. to
-  # make it easier to read and write the code, there are some utility methods
-  # below.
-  def require_capability(cap)
-    # when the current token is nil, it means the user logged in with a different
-    # method, otherwise an OAuth token was used, which has to be checked.
-    unless current_token.nil?
-      unless current_token.read_attribute(cap)
-        set_locale
-        report_error t("oauth.permissions.missing"), :forbidden
-        false
-      end
-    end
-  end
-
   ##
   # require the user to have cookies enabled in their browser
   def require_cookies
@@ -88,36 +71,6 @@ class ApplicationController < ActionController::Base
     end
   end
 
-  # Utility methods to make the controller filter methods easier to read and write.
-  def require_allow_read_prefs
-    require_capability(:allow_read_prefs)
-  end
-
-  def require_allow_write_prefs
-    require_capability(:allow_write_prefs)
-  end
-
-  def require_allow_write_diary
-    require_capability(:allow_write_diary)
-  end
-
-  def require_allow_write_api
-    require_capability(:allow_write_api)
-
-    if REQUIRE_TERMS_AGREED && current_user.terms_agreed.nil?
-      report_error "You must accept the contributor terms before you can edit.", :forbidden
-      return false
-    end
-  end
-
-  def require_allow_read_gpx
-    require_capability(:allow_read_gpx)
-  end
-
-  def require_allow_write_gpx
-    require_capability(:allow_write_gpx)
-  end
-
   ##
   # sets up the current_user for use by other methods. this is mostly called
   # from the authorize method, but can be called elsewhere if authorisation
@@ -172,17 +125,6 @@ class ApplicationController < ActionController::Base
     end
   end
 
-  ##
-  # to be used as a before_filter *after* authorize. this checks that
-  # the user is a moderator and, if not, returns a forbidden error.
-  def authorize_moderator(errormessage = "Access restricted to moderators")
-    # check user is a moderator
-    unless current_user.moderator?
-      render :plain => errormessage, :status => :forbidden
-      false
-    end
-  end
-
   def check_database_readable(need_api = false)
     if STATUS == :database_offline || (need_api && STATUS == :api_offline)
       if request.xhr?
index 97ff85f0259cc90f4a3b3dc7186e679f5f5fc5c5..80b8aff48c4e590c83bf655cff6fc34b4e982337 100644 (file)
@@ -42,7 +42,7 @@ class ChangesetsController < ApplicationController
   ##
   # Return XML giving the basic info about the changeset. Does not
   # return anything about the nodes, ways and relations in the changeset.
-  def read
+  def show
     changeset = Changeset.find(params[:id])
 
     render :xml => changeset.to_xml(params[:include_discussion].presence).to_s
index 465194ef93c461d8ec10be70dff917e4ba335818..3bc958615b5a982e570f74af35f0662d3e81872f 100644 (file)
@@ -1,6 +1,8 @@
 class ErrorsController < ApplicationController
   layout "error"
 
+  skip_authorization_check
+
   def forbidden
     render :status => :forbidden
   end
index baa6d8195abd92491f57d3e1794d6adeb119ab30..6c1d66db4c1dd9edb078e07103640d3341b120d1 100644 (file)
@@ -5,7 +5,10 @@ class NodesController < ApplicationController
 
   skip_before_action :verify_authenticity_token
   before_action :authorize, :only => [:create, :update, :delete]
-  before_action :require_allow_write_api, :only => [:create, :update, :delete]
+  before_action :api_deny_access_handler
+
+  authorize_resource
+
   before_action :require_public_data, :only => [:create, :update, :delete]
   before_action :check_api_writable, :only => [:create, :update, :delete]
   before_action :check_api_readable, :except => [:create, :update, :delete]
@@ -23,7 +26,7 @@ class NodesController < ApplicationController
   end
 
   # Dump the details on a node given in params[:id]
-  def read
+  def show
     node = Node.find(params[:id])
 
     response.last_modified = node.timestamp
@@ -60,7 +63,7 @@ class NodesController < ApplicationController
   end
 
   # Dump the details on many nodes whose ids are given in the "nodes" parameter.
-  def nodes
+  def index
     raise OSM::APIBadUserInput, "The parameter nodes is required, and must be of the form nodes=id[,id[,id...]]" unless params["nodes"]
 
     ids = params["nodes"].split(",").collect(&:to_i)
index 96b562b5ef4bdce00cabe31bc68e16a032b471e0..0954071a56f0405517b205818468e834041b4fb9 100644 (file)
@@ -3,12 +3,26 @@ require "oauth/controllers/provider_controller"
 class OauthController < ApplicationController
   include OAuth::Controllers::ProviderController
 
+  # The ProviderController will call login_required for any action that needs
+  # a login, but we want to check authorization on every action.
+  authorize_resource :class => false
+
   layout "site"
 
+  def revoke
+    @token = current_user.oauth_tokens.find_by :token => params[:token]
+    if @token
+      @token.invalidate!
+      flash[:notice] = t(".flash", :application => @token.client_application.name)
+    end
+    redirect_to oauth_clients_url(:display_name => @token.user.display_name)
+  end
+
+  protected
+
   def login_required
     authorize_web
     set_locale
-    require_user
   end
 
   def user_authorizes_token?
@@ -26,17 +40,6 @@ class OauthController < ApplicationController
     any_auth
   end
 
-  def revoke
-    @token = current_user.oauth_tokens.find_by :token => params[:token]
-    if @token
-      @token.invalidate!
-      flash[:notice] = t(".flash", :application => @token.client_application.name)
-    end
-    redirect_to oauth_clients_url(:display_name => @token.user.display_name)
-  end
-
-  protected
-
   def oauth1_authorize
     override_content_security_policy_directives(:form_action => []) if CSP_ENFORCE || defined?(CSP_REPORT_URL)
 
index 4f01b1e2a1da41b5bd4d44fb1d5ba8c623ef1f4d..74fe0883b8467ceeb28c7767169f8ecf7fa8d8bd 100644 (file)
@@ -6,9 +6,11 @@ class OldController < ApplicationController
 
   skip_before_action :verify_authenticity_token
   before_action :setup_user_auth, :only => [:history, :version]
+  before_action :api_deny_access_handler
   before_action :authorize, :only => [:redact]
-  before_action :authorize_moderator, :only => [:redact]
-  before_action :require_allow_write_api, :only => [:redact]
+
+  authorize_resource
+
   before_action :check_api_readable
   before_action :check_api_writable, :only => [:redact]
   around_action :api_call_handle_error, :api_call_timeout
index b9108cea1c5fb8f72245479ea28fde4fff5eb251..8c8005acc68d5e0c3138523b000b49370dfb09e1 100644 (file)
@@ -3,7 +3,10 @@ class RelationsController < ApplicationController
 
   skip_before_action :verify_authenticity_token
   before_action :authorize, :only => [:create, :update, :delete]
-  before_action :require_allow_write_api, :only => [:create, :update, :delete]
+  before_action :api_deny_access_handler
+
+  authorize_resource
+
   before_action :require_public_data, :only => [:create, :update, :delete]
   before_action :check_api_writable, :only => [:create, :update, :delete]
   before_action :check_api_readable, :except => [:create, :update, :delete]
@@ -19,7 +22,7 @@ class RelationsController < ApplicationController
     render :plain => relation.id.to_s
   end
 
-  def read
+  def show
     relation = Relation.find(params[:id])
     response.last_modified = relation.timestamp
     if relation.visible
@@ -120,7 +123,7 @@ class RelationsController < ApplicationController
     end
   end
 
-  def relations
+  def index
     raise OSM::APIBadUserInput, "The parameter relations is required, and must be of the form relations=id[,id[,id...]]" unless params["relations"]
 
     ids = params["relations"].split(",").collect(&:to_i)
@@ -148,6 +151,8 @@ class RelationsController < ApplicationController
     relations_for_object("Relation")
   end
 
+  private
+
   def relations_for_object(objtype)
     relationids = RelationMember.where(:member_type => objtype, :member_id => params[:id]).collect(&:relation_id).uniq
 
index 39129ebf3486494f9be7bf76f036747c86c03bf4..caf787105058777fc02cef641aedc77dd7f669b9 100644 (file)
@@ -3,7 +3,10 @@ class WaysController < ApplicationController
 
   skip_before_action :verify_authenticity_token
   before_action :authorize, :only => [:create, :update, :delete]
-  before_action :require_allow_write_api, :only => [:create, :update, :delete]
+  before_action :api_deny_access_handler
+
+  authorize_resource
+
   before_action :require_public_data, :only => [:create, :update, :delete]
   before_action :check_api_writable, :only => [:create, :update, :delete]
   before_action :check_api_readable, :except => [:create, :update, :delete]
@@ -19,7 +22,7 @@ class WaysController < ApplicationController
     render :plain => way.id.to_s
   end
 
-  def read
+  def show
     way = Way.find(params[:id])
 
     response.last_modified = way.timestamp
@@ -79,7 +82,7 @@ class WaysController < ApplicationController
     end
   end
 
-  def ways
+  def index
     unless params["ways"]
       raise OSM::APIBadUserInput, "The parameter ways is required, and must be of the form ways=id[,id[,id...]]"
     end
index c63b0112e0819d07e4cfbc53d937dc0400241217..0b73fa083d62bdaea53a90148abc799b4eab448d 100644 (file)
 <% end %>
 
 <div class='secondary-actions'>
-  <%= link_to(t('.changesetxml'), :controller => "changesets", :action => "read") %>
+  <%= link_to(t('.changesetxml'), :controller => "changesets", :action => "show") %>
   &middot;
   <%= link_to(t('.osmchangexml'), :controller => "changesets", :action => "download") %>
 </div>
index c3fadbe312e26a516fcb2d623f9bc3cf0a48dc75..5674f21b08af018a16be415be697abb45fee47d6 100644 (file)
@@ -8,7 +8,7 @@
 <%= render :partial => @type, :object => @feature %>
 
 <div class='secondary-actions'>
-  <%= link_to(t('browse.download_xml'), :controller => @type.pluralize, :action => "read") %>
+  <%= link_to(t('browse.download_xml'), :controller => @type.pluralize, :action => :show) %>
   &middot;
   <%= link_to(t('browse.view_history'), :action => "#{@type}_history") %>
 </div>
index 57befe117b5e39e9f726221f453eae66db277eaf..05d9ab68ac306cf28830b714a70488ab97a8582c 100644 (file)
@@ -17,7 +17,7 @@ atom_feed(:language => I18n.locale, :schema_date => 2009,
   @edits.each do |changeset|
     feed.entry(changeset, :updated => changeset.closed_at, :id => changeset_url(changeset.id, :only_path => false)) do |entry|
       entry.link :rel => "alternate",
-                 :href => changeset_read_url(changeset, :only_path => false),
+                 :href => changeset_show_url(changeset, :only_path => false),
                  :type => "application/osm+xml"
       entry.link :rel => "alternate",
                  :href => changeset_download_url(changeset, :only_path => false),
index 240f1e315e404a24665f92d77c5e30e2b78bc195..c7b7b33266ab0024a5ab3c5a79bf9ff5b69e6c60 100644 (file)
@@ -1,5 +1,5 @@
 Sanitize::Config::OSM = Sanitize::Config::RELAXED.dup
 
 Sanitize::Config::OSM[:elements] -= %w[div style]
-Sanitize::Config::OSM[:add_attributes] = { "a" => { "rel" => "nofollow" } }
+Sanitize::Config::OSM[:add_attributes] = { "a" => { "rel" => "nofollow noopener noreferer" } }
 Sanitize::Config::OSM[:remove_contents] = %w[script style]
index 88e27c65cd56a784e5bdc39aaf20effa63bb427a..0e56013d7e8a4996370808834ff7f99268394dd7 100644 (file)
@@ -769,13 +769,13 @@ ar:
           country: دولة
           county: مقاطعة
           farm: مزرعة
-          hamlet: Ù\83Ù\81ر
+          hamlet: Ù\85Ø­Ù\84Ø©
           house: منزل
           houses: منازل
           island: جزيرة
           islet: جزيرة صغيرة
           isolated_dwelling: سكن منعزل
-          locality: محلة
+          locality: موقع
           municipality: البلدية
           neighbourhood: حي
           postcode: الرمز البريدي
@@ -901,7 +901,7 @@ ar:
           "yes": متجر
         tourism:
           alpine_hut: كوخ جبلي
-          apartment: شقة
+          apartment: شقة عطل
           artwork: عمل فني
           attraction: معلم سياحي
           bed_and_breakfast: سرير وفطار
@@ -1069,6 +1069,9 @@ ar:
       successful_report: لقد تم تسجيل بلاغك بنجاح
       provide_details: يُرجَى تقديم التفاصيل المطلوبة
   layouts:
+    project_name:
+      title: خريطة الشارع المفتوحة
+      h1: خريطة الشارع المفتوحة
     logo:
       alt_text: شعار خريطة الشارع المفتوحة
     home: اذهب إلى الصفحة الرئيسية
@@ -1677,7 +1680,7 @@ ar:
       edit: تعديل
       preview: شاهد
     markdown_help:
-      title_html: تم التحليل بواسطة <a href="https://daringfireball.net/projects/markdown/">Markdown</a>
+      title_html: تم التحليل بواسطة href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
       headings: عناوين
       heading: عنوان
       subheading: عنوان فرعي
index cd9fbc0d6570e24ae012cfd20cc4a65840284e55..6b409404d7ee458b54edda8b3143a3abdc2db5ba 100644 (file)
@@ -1384,7 +1384,7 @@ bn:
       block_history: সক্রিয় বাধাসমূহ
       moderator_history: প্রদত্ত বাধাগুলি
       comments: মন্তব্যসমূহ
-      create_block: à¦\8fà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à¦¾à¦\93
+      create_block: à¦\8fà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à¦¿à¦¨
       activate_user: এই ব্যবহাকারীকে সক্রিয় করুন
       deactivate_user: এই ব্যবহারকারীকে নিষ্ক্রিয় করুন
       confirm_user: এই ব্যবহারকারীকে নিশ্চিত করুন
index 6e7a19b10f0ac9c0369928b1b79efab082711887..f6948a245b4381819ed87246abcb93bb4d81108a 100644 (file)
@@ -35,6 +35,7 @@
 # Author: Urbanecm
 # Author: Veritaslibero
 # Author: Walter Klosse
+# Author: Zbycz
 ---
 cs:
   time:
@@ -1323,11 +1324,11 @@ cs:
     about:
       next: Další
       copyright_html: <span>&copy;</span>přispěvatelé<br>OpenStreetMap
-      used_by: Díky %{name} fungují mapová data na tisících webových stránek, mobilních
-        aplikací a hardwarových zařízení
+      used_by: Díky %{name} vidíte mapová data na tisících webových stránek, aplikací
+        i GPSkách
       lede_text: OpenStreetMap tvoří komunita uživatelů, kteří přidávají a udržují
         data o silnicích, cestách, kavárnách, železničních stanicích a mnohém dalším
-        po celém světě.
+        po celém světě. Pomoci může kdokoliv, stejně jako třeba na Wikipedii.
       local_knowledge_title: Místní znalost
       local_knowledge_html: OpenStreetMap klade důraz na místní znalost. Přispěvatelé
         využívají letecké snímky, GPS přístroje a klasické mapy, aby ověřili, že OSM
@@ -1670,7 +1671,7 @@ cs:
       edit: Upravit
       preview: Náhled
     markdown_help:
-      title_html: Zpracovává se <a href="https://daringfireball.net/projects/markdown/">Markdownem</a>
+      title_html: Zpracovává se <a href="https://kramdown.gettalong.org/quickref.html">Kramdownem</a>
       headings: Nadpisy
       heading: Nadpis
       subheading: Podnadpis
index 7a949c961613a377d20e4176a0b4c522c1b0a618..cf30343207169b8f9aa8689a1542188590083760 100644 (file)
@@ -901,7 +901,7 @@ da:
           "yes": Forretning
         tourism:
           alpine_hut: Bjerghytte
-          apartment: Lejlighed
+          apartment: Ferielejlighed
           artwork: Kunst
           attraction: Seværdighed
           bed_and_breakfast: Bed and Breakfast
index 33eebbb916a5c9efdc372b4441de39cea504ca07..9c17b8a230f41cabca5f4cd53bfecbd422a10189 100644 (file)
@@ -1745,7 +1745,7 @@ de:
       edit: Bearbeiten
       preview: Vorschau
     markdown_help:
-      title_html: Interpretiert mit <a href="https://daringfireball.net/projects/markdown/">Markdown</a>
+      title_html: Geparst mit <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
       headings: Überschriften
       heading: Überschrift
       subheading: Zwischenüberschrift
index e87e8f8ee2af63d75e94497759ec9054e9b4f11e..2c1f0ad2b44dda80a0c3385a4f4c646909bf1c82 100644 (file)
@@ -864,7 +864,7 @@ en:
           "yes": "Shop"
         tourism:
           alpine_hut: "Alpine Hut"
-          apartment: "Apartment"
+          apartment: "Holiday Apartment"
           artwork: "Artwork"
           attraction: "Attraction"
           bed_and_breakfast: "Bed and Breakfast"
@@ -1626,7 +1626,7 @@ en:
       edit: Edit
       preview: Preview
     markdown_help:
-      title_html: Parsed with <a href="https://daringfireball.net/projects/markdown/">Markdown</a>
+      title_html: Parsed with <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
       headings: Headings
       heading: Heading
       subheading: Subheading
index 015ea109ec9c576282ceffa2566ccffcbb2159b6..5e3d6a86a60e16aa8092af3606b02f5500649202 100644 (file)
@@ -9,6 +9,7 @@
 # Author: Lucas
 # Author: Luckas
 # Author: LyzTyphone
+# Author: Marcellus
 # Author: Michawiki
 # Author: Objectivesea
 # Author: Petrus Adamus
@@ -1139,8 +1140,8 @@ eo:
       subject: '[OpenStreetMap] Bonvenon al OpenStreetMap'
       greeting: Saluton!
       created: Iu (espereble vi) ĵus kreis konton je %{site_url}.
-      confirm: Unue devas konfirmi, ke tiu ĉi peto devenas de vi, do bonvolu alklaki
-        la ligilon sube por konfirmi vian konton.
+      confirm: Unue vi devas konfirmi, ke tiu ĉi peto devenas de vi. Alklaku la ligilon
+        sube por konfirmi vian konton.
       welcome: Post konfirmo de konto, ni liveros al vi pliajn informojn kiel komenci.
     email_confirm:
       subject: '[OpenStreetMap] Konfirmado de retpoŝtadreso'
@@ -1388,7 +1389,7 @@ eo:
         contributors_fi_html: |-
           <strong>Suomujo</strong>: enhavas datumojn el
           National Land Survey of Finland's Topographic Database kaj aliaj fontoj, laŭ la <a href="https://www.maanmittauslaitos.fi/en/opendata-licence-version1">permesilo NLSFI</a>.
-        contributors_fr_html: '<strong>Francujo</strong>: enhavas datumojn ricevitajn
+        contributors_fr_html: '<strong>Francio</strong>: enhavas datumojn ricevitajn
           el ''Direction Générale des Impôts''.'
         contributors_nl_html: |-
           <strong>Nederlando</strong>: enhavas datumojn el &copy; AND, 2007
@@ -2056,7 +2057,7 @@ eo:
         novan interkonsenton pri uzado por pluigi.
       legale_select: 'Loĝlando:'
       legale_names:
-        france: Francujo
+        france: Francio
         italy: Italujo
         rest_of_world: Resto de la mondo
     no_such_user:
index 193f60ec96f57334054be82e454a412a23a1edb4..375558e215a1a394ec8121dd767ba00e4ae024fa 100644 (file)
@@ -308,8 +308,8 @@ es:
       title_all: Discusión del conjunto de cambios de OpenStreetMap
       title_particular: 'Discusión del conjunto de cambios #%{changeset_id} de OpenStreetMap'
     timeout:
-      sorry: Lo sentimos, la lista de conjuntos de comentarios que has solicitado
-        ha tardado mucho tiempo en obtenerse.
+      sorry: Lo sentimos, la lista de los cambios realizados en los comentarios que
+        has solicitado ha tardado mucho tiempo en recuperarse.
   diary_entries:
     new:
       title: Nueva entrada en el diario
@@ -347,8 +347,8 @@ es:
     no_such_entry:
       title: No existe esa entrada de diario
       heading: 'No hay entrada con la id: %{id}'
-      body: No hay ninguna entrada de diario con el identificador %{id}. Verifique
-        la ortografí, o puede que el enlace que marcó tenga un error.
+      body: No hay ninguna entrada de diario o comentario con el identificador %{id}.
+        Comprueba la ortografía, o puede que el enlace al que has hecho clic sea incorrecto.
     diary_entry:
       posted_by: Publicado por %{link_user} el %{created} en %{language_link}
       comment_link: Comentar esta entrada
index 80852fcb7829adcad624563432fc0035c92e6196..792d58dfa462b423ac4e927fce43b8f2bd1ad64e 100644 (file)
@@ -21,6 +21,7 @@
 # Author: Mcuteangel
 # Author: Mjbmr
 # Author: Movyn
+# Author: Nbi
 # Author: Omidh
 # Author: Pirehelokan
 # Author: Reza1615
@@ -871,7 +872,7 @@ fa:
           "yes": فروشگاه
         tourism:
           alpine_hut: کلبه بالای تپه
-          apartment: Ø§Ù¾Ø§Ø±ØªÙ\85اÙ\86
+          apartment: Ø¢Ù¾Ø§Ø±ØªÙ\85اÙ\86 ØªØ¹Ø·Û\8cÙ\84ات
           artwork: آثار هنری
           attraction: جاذبه
           bed_and_breakfast: تخت‌خواب و صبحانه
@@ -969,12 +970,24 @@ fa:
         zero: گزارشی نیست
         one: ۱ گزارش
         other: '%{count} گزارش'
+      report_created_at: اولین بار %{datetime} گزارش شد
+      last_resolved_at: آخرین بار %{datetime} حل شد
+      last_updated_at: آخرین بار %{displayname} در %{datetime} به‌روزش کرد.
       resolve: حل شد
       ignore: نادیده گرفتن
       reopen: بازگشایی
       reports_of_this_issue: گزارش‌های این مشکل
       read_reports: خواندن گزارش‌ها
       new_reports: گزارش‌های تازه
+      other_issues_against_this_user: سایر مسئله‌ها بر ضدّ این کاربر
+      no_other_issues: بر ضدّ این کاربر مسئلهٔ دیگری وجود ندارد.
+      comments_on_this_issue: نظرات این مسئله
+    resolve:
+      resolved: وضعیت مسئله به «حل‌شده» تغییر کرده است
+    ignore:
+      ignored: وضعیت مسئله به «نادیده گرفته شد» تغییر کرده است.
+    reopen:
+      reopened: وضعیت مسئله به «باز» تغییر داده کرده است
     comments:
       created_at: در %{datetime}
     reports:
@@ -982,7 +995,11 @@ fa:
       reported_by_html: '%{user} آن را به‌عنوان %{category} گزارش کرد'
     helper:
       reportable_title:
+        diary_comment: '%{entry_title}، نظر #%{comment_id}'
         note: یادداشت %{note_id}
+  issue_comments:
+    create:
+      comment_created: نظر شما با موفقیت ثبت شد
   reports:
     new:
       title_html: گزارش %{link}
@@ -999,13 +1016,18 @@ fa:
       categories:
         diary_entry:
           spam_label: این روزنوشت هرزنامه است/دارد
+          offensive_label: این روزنوشت مستهجن/زشت است
           threat_label: این روزنوشت تهدیدآمیز است
           other_label: سایر
         diary_comment:
           spam_label: این نظر (بر روزنوشت) هرزنامه است/دارد
+          offensive_label: این نظر (بر روزنوشت) مستهجن/زشت است
           threat_label: این نظر (بر روزنوشت) تهدیدآمیز است
           other_label: سایر
         user:
+          spam_label: این نمایهٔ کاربری هرزه‌نگاری است/دارد
+          offensive_label: این نمایهٔ کاربری مستهجن/زشت است
+          threat_label: چیزی در این نمایهٔ کاربری خطرآفرین است
           vandal_label: این کاربر خرابکار است
           other_label: سایر
         note:
@@ -1017,6 +1039,8 @@ fa:
       successful_report: گزارشتان با موفقیت ثبت شد
       provide_details: لطفاً جزئیات لازم را ارائه دهید
   layouts:
+    project_name:
+      title: OpenStreetMap
     logo:
       alt_text: لوگوی OpenStreetMap
     home: رفتن به محل خانه
@@ -1169,6 +1193,10 @@ fa:
       hi: سلام %{to_user}،
       greeting: سلام،
       commented:
+        subject_own: '[OpenStreetMap] %{commenter} روی یکی از بسته‌های تغییر شما نظر
+          داد'
+        subject_other: '[OpenStreetMap] %{commenter} روی یکی از بسته‌های تغییر موردعلاقه‌تان
+          نظر داد'
         your_changeset: '%{commenter} برای جعبه تغییر ایجاد شده توسط شما در %{time}
           یک نظر نوشته است'
         commented_changeset: '%{commenter} یک نظر برای جعبه تغییری که توسط %{changeset_author}
@@ -1176,6 +1204,8 @@ fa:
         partial_changeset_with_comment: دارای نظر %{changeset_comment}
         partial_changeset_without_comment: بدون نظر
       details: اطلاعات بیشتر درباره جعبه تغییر را میتوان در %{url} دید.
+      unsubscribe: اگر لغو اطلاع‌رسانی‌های مربوط به این بستهٔ تغییر، به %{url} بروید
+        و روی « لغو اشتراک» کلیک کنید.
   messages:
     inbox:
       title: صندوق دریافت
@@ -1714,6 +1744,8 @@ fa:
       trace_uploaded: فایل GPX شما بارگذاری شده و در انتظار درج در پایگاه‌داده است.
         این کار معمولاً کمتر از نیم ساعت طول می‌کشد. هنگامی که انجام شد ایمیلی برای
         شما فرستاده می‌شود.
+      upload_failed: شوربختانه بارگذاری GPX ناموفق بود. به یکی از مدیران دربارهٔ این
+        خطا اطلاع‌رسانی شد. لطفاً دوباره تلاش کنید
       traces_waiting:
         one: شما %{count} رد منتظر بارگذاری دارید. لطفاً قبل از بارگذاری موارد بیشتر
           منتظر بمانید تا اینها بارگذاری بشوند که صف برای سایر کاربران بسته نشود.
@@ -1834,7 +1866,7 @@ fa:
       allow_write_diary: ساخت روزنوشت‌ها، نظردادن و افزودن دوست.
       allow_write_api: نقشه را تغییر دهد.
       allow_read_gpx: ردهای GPS خصوصی شما را بخواند.
-      allow_write_gpx: Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û\8c Ø±Ø¯Ù\87اÛ\8c GPS.
+      allow_write_gpx: Ø±Ø¯Ù\87اÛ\8c GPS Ø±Ø§ Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û\8c Ú©Ù\86د.
       allow_write_notes: یادداشت‌ها را تغییر دهد.
       grant_access: دسترسی می‌دهم
     authorize_success:
@@ -1872,7 +1904,7 @@ fa:
       allow_write_diary: ساخت روزنوشت‌ها، نظردادن و افزودن دوست.
       allow_write_api: نقشه را تغییر دهد.
       allow_read_gpx: ردهای GPS خصوصی آن‌ها را بخواند.
-      allow_write_gpx: Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û\8c Ø±Ø¯Ù\87اÛ\8c GPS.
+      allow_write_gpx: Ø±Ø¯Ù\87اÛ\8c GPS Ø±Ø§ Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û\8c Ú©Ù\86د.
       allow_write_notes: یادداشت‌ها را تغییر دهد.
     index:
       title: جزئیات OAuth من
@@ -1899,7 +1931,7 @@ fa:
       allow_write_diary: ساخت روزنوشت‌ها، نظردادن و افزودن دوست.
       allow_write_api: نقشه را تغییر دهد.
       allow_read_gpx: ردهای GPS خصوصی آن‌ها را بخواند.
-      allow_write_gpx: Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û\8c Ø±Ø¯Ù\87اÛ\8c GPS.
+      allow_write_gpx: Ø±Ø¯Ù\87اÛ\8c GPS Ø±Ø§ Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û\8c Ú©Ù\86د.
       allow_write_notes: یادداشت‌ها را تغییر دهد.
     not_found:
       sorry: شوربختانه آن %{type} یافت نشد.
index 08cb01c426441ffd540927cfb60ddc4029e9c6cb..8b87cd9e941ddf5263385c64b11953ca5db9f684 100644 (file)
@@ -8,6 +8,7 @@
 # Author: Daeron
 # Author: Espeox
 # Author: Konstaduck
+# Author: Laurianttila
 # Author: Lliehu
 # Author: Macofe
 # Author: Markosu
@@ -908,7 +909,7 @@ fi:
           "yes": Kauppa
         tourism:
           alpine_hut: Alppimaja
-          apartment: Huoneisto
+          apartment: Lomahuoneisto
           artwork: Taideteos
           attraction: Nähtävyys
           bed_and_breakfast: Aamiaismajoitus
@@ -1918,7 +1919,7 @@ fi:
       key: 'Kuluttajan avain:'
       secret: 'Kuluttajan salaisuus:'
       url: 'Pyynnön URL-avain:'
-      access_url: 'Pääsyavaimen URRL-osoite:'
+      access_url: 'Pääsyavaimen URL-osoite:'
       authorize_url: 'Valtuuta URL-osoite:'
       support_notice: Tuemme HMAC-SHA1 (suositeltu) ja RSA-SHA1 allekirjoituksia.
       edit: Muokkaa yksityiskohtia
@@ -2691,4 +2692,5 @@ fi:
       error: Laitosta tuhottaessa tapahtui virhe.
   validations:
     invalid_characters: sisältää virheellisiä merkkejä
+    url_characters: sisältää erikoismerkkejä URL:ssa (%{characters})
 ...
index db8575d348f61713f39e9aa9b77560fbaa8f0155..4de1c4f14a4f4e1fc654236954c68742b561047f 100644 (file)
@@ -941,7 +941,7 @@ fr:
           "yes": Boutique
         tourism:
           alpine_hut: Refuge
-          apartment: Meublé de tourisme
+          apartment: Appartement de vacances
           artwork: Œuvre d’art
           attraction: Attraction
           bed_and_breakfast: Gîte
@@ -1744,7 +1744,7 @@ fr:
       edit: Modifier
       preview: Aperçu
     markdown_help:
-      title_html: Analysé avec <a href="https://daringfireball.net/projects/markdown/">Markdown</a>
+      title_html: Analysé avec <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
       headings: Titres
       heading: Titre
       subheading: Sous-titre
index 17d3739398effba69816ef83f4c78e4c12367350..b5d72078f2a2a7d6c2d9268a0729a77d0f0e7359 100644 (file)
@@ -824,8 +824,8 @@ gl:
           clothes: Tenda de roupa
           computer: Tenda informática
           confectionery: Pastelaría
-          convenience: Tenda 24 horas
-          copyshop: Tenda de fotocopias
+          convenience: Tenda de ultramarinos
+          copyshop: Copistaría
           cosmetics: Tenda de cosméticos
           deli: Tenda de delicias
           department_store: Grandes almacéns
@@ -891,7 +891,7 @@ gl:
           "yes": Tenda
         tourism:
           alpine_hut: Cabana alpina
-          apartment: Apartamento
+          apartment: Apartamento de vacacións
           artwork: Obra de arte
           attraction: Atracción
           bed_and_breakfast: Cama e almorzo
@@ -917,9 +917,9 @@ gl:
         waterway:
           artificial: Senda fluvial artificial
           boatyard: Estaleiro
-          canal: Canal
+          canal: Canle
           dam: Encoro
-          derelict_canal: Canal abandonado
+          derelict_canal: Canle abandonada
           ditch: Cuneta
           dock: Peirao
           drain: Sumidoiro
@@ -1702,7 +1702,7 @@ gl:
       edit: Editar
       preview: Vista previa
     markdown_help:
-      title_html: Analizado con <a href="https://daringfireball.net/projects/markdown/">Markdown</a>
+      title_html: Analizado co <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
       headings: Cabeceiras
       heading: Cabeceira
       subheading: Subcabeceira
index ab21da0057677e16e9f3d72259bda322a3af3a42..9ab689726a2dc5a6b002a9ddf0266f17bf4f361e 100644 (file)
@@ -915,7 +915,7 @@ it:
           "yes": Negozio
         tourism:
           alpine_hut: Rifugio alpino
-          apartment: Appartamento
+          apartment: Appartamento per le vacanze
           artwork: Opera d'arte
           attraction: Attrazione turistica
           bed_and_breakfast: Bed and Breakfast
@@ -1711,7 +1711,7 @@ it:
       edit: Modifica
       preview: Anteprima
     markdown_help:
-      title_html: Analizzato con <a href="https://daringfireball.net/projects/markdown/">Markdown</a>
+      title_html: Analizzato con <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
       headings: Intestazioni
       heading: Intestazione
       subheading: Sottotitolo
index c14a580a8029cae85c0c6903ddad1512a7a5e046..aa940ec942a2efd0bd72535a94aa7c186260af43 100644 (file)
@@ -569,7 +569,7 @@ lb:
           wine: Vinothéik
           "yes": Geschäft
         tourism:
-          apartment: Appartement
+          apartment: Vakanzen-Appartement
           artwork: Konschtwierk
           attraction: Attraktioun
           cabin: Hütt
index 358a2c2b018097a706fc7a0128c10402e1b066df..ec433720756cc8c8e62fd734947decf6adc2fb3a 100644 (file)
@@ -230,7 +230,7 @@ lv:
       enclosing: Ietvertās funkcijas
   changesets:
     changeset_paging_nav:
-      showing_page: Rāda lapu %{page}
+      showing_page: '%{page}. lapa'
       next: Nākamā »
       previous: « Iepriekšējā
     changeset:
index 12761efc57bff6d2a628f6388299276c49fe9c06..1c642a33909966c15885621297205717032687b5 100644 (file)
@@ -922,7 +922,7 @@ pl:
           "yes": Sklep
         tourism:
           alpine_hut: Chata alpejska
-          apartment: Mieszkanie
+          apartment: Mieszkanie na wynajem
           artwork: Dzieło sztuki
           attraction: Atrakcja turystyczna
           bed_and_breakfast: Bed and Breakfast
@@ -986,11 +986,12 @@ pl:
       more_results: Więcej wyników
   issues:
     index:
-      title: Zgłoszenia
-      select_status: Wybierz zgłoszenie
+      title: Sprawy
+      select_status: Wybierz status
       select_type: Wybierz kategorię
       reported_user: Zgłoszony użytkownik
       search: Wyszukaj
+      search_guidance: Przeszukaj sprawy
       user_not_found: Użytkownika nie istnieje
       status: Status
       reports: Zgłoszenia
@@ -1000,6 +1001,7 @@ pl:
       link_to_reports: Zobacz zgłoszenia
       reports_count:
         one: 1 zgłoszenie
+        few: '%{count} zgłoszenia'
         other: '%{count} zgłoszeń'
       states:
         ignored: zignorowane
@@ -1010,14 +1012,16 @@ pl:
       successful_update: Twoje zgłoszenie zostało pomyślnie zaktualizowane
       provide_details: Podaj koniecznie, proszę, potrzebne szczegóły
     show:
-      title: '%{status} zgłoszenie #%{issue_id}'
+      title: '%{status} sprawa #%{issue_id}'
       reports:
         zero: Brak zgłoszeń
         one: 1 zgłoszenie
+        few: '%{count} zgłoszenia'
         other: '%{count} zgłoszeń'
       resolve: Rozwiąż
       ignore: Zignoruj
       reopen: Otwórz ponownie
+      reports_of_this_issue: Zgłoszenia w tej sprawie
       read_reports: Czytaj Raporty
       new_reports: Nowe zgłoszenia
       other_issues_against_this_user: Inne sprawy przeciwko temu użytkownikowi
@@ -1031,6 +1035,7 @@ pl:
       reopened: Status sprawy został ustawiony na 'Otwarta'
     comments:
       created_at: O %{datetime}
+      reassign_param: Przydzielić sprawę?
     reports:
       updated_at: Dnia %{datetime}
       reported_by_html: Zgłoszone jako %{category} przez %{user}
@@ -1040,7 +1045,7 @@ pl:
         note: 'Uwaga #%{note_id}'
   reports:
     new:
-      title_html: Zgłoszenie %{link}
+      title_html: Zgłoś użytkownika %{link}
       details: Opisz, proszę, problem bardziej szczegółowo (wymagane).
       select: 'Wybierz powód zgłoszenia:'
       disclaimer:
@@ -1091,7 +1096,7 @@ pl:
     edit: Edycja
     history: Zmiany
     export: Eksport
-    issues: Zgłoszenia
+    issues: Sprawy
     data: Dane
     export_data: Eksportuj dane
     gps_traces: Ślady GPS
@@ -1543,7 +1548,7 @@ pl:
       paste_html: Wklej podany kod HTML do swojej strony
       export_button: Wyeksportuj
     fixthemap:
-      title: Zgłoś problem / Popraw mapę
+      title: Zgłoś błąd / Popraw mapę
       how_to_help:
         title: Jak pomóc
         join_the_community:
index 157ac8160e9c408375819050588282a0d7cfec5e..826181f0b60f4129488bc9d1a4b53f85cfada118 100644 (file)
@@ -919,7 +919,7 @@ pt-BR:
           "yes": Loja
         tourism:
           alpine_hut: Abrigo de Montanha
-          apartment: Apart-Hotel
+          apartment: Apartamento de Férias
           artwork: Obra de Arte
           attraction: Atração Turística
           bed_and_breakfast: Hospedagem Domiciliar
@@ -1723,7 +1723,7 @@ pt-BR:
       edit: Editar
       preview: Pré-visualizar
     markdown_help:
-      title_html: Tabela de códigos (<a href="https://daringfireball.net/projects/markdown/">Markdown</a>)
+      title_html: Tabela de códigos href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
       headings: Títulos
       heading: Título
       subheading: Subtítulo
index 8daac9fefc57bbf2da4d57b4ece758d14a04dcc3..c45c1107c296b5f8581304d516d1a71c9bc781b6 100644 (file)
@@ -310,7 +310,7 @@ ru:
     index:
       title: Пакеты правок
       title_user: Пакеты правок пользователя %{user}
-      title_friend: Ð\9fакеÑ\82Ñ\8b Ð¿Ñ\80авок Ð¼Ð¾Ð¸Ñ\85 Ð´Ñ\80Ñ\83зей
+      title_friend: Пакеты правок друзей
       title_nearby: Пакеты правок соседних участников
       empty: Пакеты правок не найдены.
       empty_area: Нет пакетов правок в этой области.
@@ -1640,6 +1640,8 @@ ru:
       welcomemat:
         url: https://welcome.openstreetmap.org/
         title: Для организаций
+        description: Вы из организации, которая хочет работать с OpenStreetMap ? Пожалуйста,
+          ознакомьтесь с информацией в разделе Welcome Mat.
       wiki:
         url: https://wiki.openstreetmap.org/wiki/RU:Заглавная_страница
         title: wiki.openstreetmap.org
@@ -1783,7 +1785,7 @@ ru:
         title: Остались вопросы?
         paragraph_1_html: |-
           У OpenStreetMap есть несколько ресурсов, где можно узнать о проекте, задать вопросы, или ответить на них, и совместно обсудить темы, касающиеся картографии.
-          <a href='%{help_url}'>Ð\9fолÑ\83Ñ\87иÑ\82е Ð¿Ð¾Ð¼Ð¾Ñ\89Ñ\8c Ð·Ð´ÐµÑ\81Ñ\8c</a>.
+          <a href='%{help_url}'>Ð\9fомоÑ\89Ñ\8c Ð½Ð°Ñ\85одиÑ\82Ñ\81Ñ\8f Ð·Ð´ÐµÑ\81Ñ\8c</a>. Ð\90 ÐµÑ\81ли Ð²Ñ\8b Ð¸Ð· Ð¾Ñ\80ганизаÑ\86ии, ÐºÐ¾Ñ\82оÑ\80аÑ\8f Ñ\85оÑ\87еÑ\82 Ñ\80абоÑ\82аÑ\82Ñ\8c Ñ\81 OpenStreetMap, <a href='https://welcome.openstreetmap.org/'>Ñ\82о Ð²Ð°Ð¼ Ñ\81Ñ\8eда</a>.
       start_mapping: Начать картографировать
       add_a_note:
         title: Нет времени отредактировать карту? Добавьте заметку!
@@ -2774,6 +2776,7 @@ ru:
       flash: Исправление уничтожено.
       error: Произошла ошибка при уничтожении этого исправления.
   validations:
+    leading_whitespace: имеется начальный пробел
     trailing_whitespace: содержит конечный пробел
     invalid_characters: содержит недопустимые символы
     url_characters: содержит специальные символы в URL (%{characters})
index 12f328d14eab1f5971cf836131e333ce95e717de..e2bd0087a02775da252e356d7edb20960eff349d 100644 (file)
@@ -846,7 +846,7 @@ sl:
           "yes": Trgovina
         tourism:
           alpine_hut: Koča
-          apartment: Apartma
+          apartment: Počitniški apartma
           artwork: Umetnina
           attraction: Zanimivost
           bed_and_breakfast: Nočitev z zajtrkom
@@ -1395,7 +1395,7 @@ sl:
       edit: Uredi
       preview: Predogled
     markdown_help:
-      title_html: Obdelano z <a href="https://daringfireball.net/projects/markdown/">Markdown</a>
+      title_html: Obdelano z <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
       headings: Poglavja
       heading: Poglavje
       subheading: Podpoglavje
index 3643b5e55717b6e68927c2534d8a5e9324b411af..0ac1d908691e2d079d48192b1c8b7aaef1042659 100644 (file)
@@ -862,7 +862,7 @@ sr:
           "yes": Продавница
         tourism:
           alpine_hut: Планинарски дом
-          apartment: Ð¡Ñ\82ан
+          apartment: Ð\90паÑ\80Ñ\82ман Ð·Ð° Ð¾Ð´Ð¼Ð¾Ñ\80
           artwork: Уметничко дело
           attraction: Атракција
           bed_and_breakfast: Полупансион
@@ -1597,7 +1597,7 @@ sr:
       edit: Уреди
       preview: Преглед
     markdown_help:
-      title_html: Рашчлањено са <<a href="https://daringfireball.net/projects/markdown/">Markdown-ом</a>
+      title_html: Рашчлањено помоћу <a href="https://kramdown.gettalong.org/quickref.html">kramdown-а</a>
       headings: Наслови
       heading: Наслов
       subheading: Поднаслов
index 6f20c38da2411ee267bc6e4440a99a903e45bfca..cd7b1225866b32b1a8190d9c9a863cbd7f9025d5 100644 (file)
@@ -269,7 +269,7 @@ sv:
       view_changeset_details: Visa detaljer om ändringsset
     changesets:
       id: ID
-      saved_at: Sparad
+      saved_at: Sparades den
       user: Användare
       comment: Kommentar
       area: Område
@@ -915,7 +915,7 @@ sv:
           "yes": Affär
         tourism:
           alpine_hut: Fjällstuga
-          apartment: Lägenhet
+          apartment: Semesterlägenhet
           artwork: Konstverk
           attraction: Attraktion
           bed_and_breakfast: Bed and breakfast
@@ -1618,6 +1618,9 @@ sv:
         title: switch2osm
         description: Hjälp för företag och organisationer att byta till OpenStreetMap-baserade
           kartor och andra tjänster.
+      welcomemat:
+        url: https://welcome.openstreetmap.org/
+        title: För organisationer
       wiki:
         url: https://wiki.openstreetmap.org/
         title: wiki.openstreetmap.org
@@ -1709,7 +1712,7 @@ sv:
       edit: Redigera
       preview: Förhandsgranska
     markdown_help:
-      title_html: Tolkat med <a href="https://daringfireball.net/projects/markdown/">Markdown</a>
+      title_html: Tolkat med <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
       headings: Rubriker
       heading: Rubrik
       subheading: Underrubrik
@@ -2728,6 +2731,8 @@ sv:
       flash: Redaktering förstörd.
       error: Det uppstod ett fel när redakteringen skulle förstöras.
   validations:
+    leading_whitespace: har ett inledande mellanslag
+    trailing_whitespace: har ett avslutande mellanslag
     invalid_characters: innehåller ogiltiga tecken
     url_characters: innehåller speciella URL-tecken (%{characters})
 ...
index 6c2128f02b5d926f08d2adf4d885a1a9123dc97a..05775b45fe32b1545558c0b547969c61e7771443 100644 (file)
@@ -2,6 +2,7 @@
 # Exported from translatewiki.net
 # Export driver: phpyaml
 # Author: Ariesanywhere
+# Author: B20180
 # Author: Pon44695
 # Author: Ruila
 # Author: TMo3289
@@ -870,7 +871,7 @@ th:
           "yes": ร้านค้า
         tourism:
           alpine_hut: กระท่อมป่าสน
-          apartment: à¸­à¸²à¸\84ารà¸\8aุด
+          apartment: à¸«à¹\89อà¸\87อยูà¹\88อาศัยวัà¸\99หยุด
           artwork: งานศิลปะ
           attraction: แหล่งท่องเที่ยว
           bed_and_breakfast: เรือนพักพร้อมอาหาร
index 7e5c0b8a53ea790906cc11f91b0abd402eae9728..f25a41be0a54dd63179285105ffcb5a70f471cf6 100644 (file)
@@ -260,7 +260,7 @@ uk:
       previous: ← Попередня
     changeset:
       anonymous: Анонім
-      no_edits: (без виправлень)
+      no_edits: (редагувань немаэ)
       view_changeset_details: Подивитися подробиці набору змін
     changesets:
       id: ID
@@ -944,7 +944,7 @@ uk:
     diary_comment_notification:
       subject: '[OpenStreetMap] %{user} залишив коментар у вашому щоденнику'
       hi: Привіт, %{to_user},
-      header: '%{from_user}  прокоментував ваш запис у щоденнику у OpenStreetMap з
+      header: '%{from_user} прокоментував ваш запис у щоденнику у OpenStreetMap з
         темою %{subject}:'
       footer: Ви можете також прочитати коментар — %{readurl}, залишити свій — %{commenturl}
         або відповісти — %{replyurl}
@@ -1914,7 +1914,7 @@ uk:
     show:
       my diary: Мій щоденник
       new diary entry: новий запис
-      my edits: Мої правки
+      my edits: Мої редагування
       my traces: Мої треки
       my notes: Мої нотатки
       my messages: Повідомлення
@@ -1926,7 +1926,7 @@ uk:
       blocks by me: Заблоковано мною
       send message: Надіслати повідомлення
       diary: Щоденник
-      edits: Ð\9fÑ\80авки
+      edits: Ð ÐµÐ´Ð°Ð³Ñ\83ваннÑ\8f
       traces: Треки
       notes: Нотатки
       remove as friend: Вилучити із списку друзів
index b245e8fec0c155b587e5d52c499eedcb607718d3..b0fe5e48e889087a55b5ee2e47e93e4e907213d3 100644 (file)
@@ -10,7 +10,7 @@ OpenStreetMap::Application.routes.draw do
     post "changeset/:id/upload" => "changesets#upload", :id => /\d+/
     get "changeset/:id/download" => "changesets#download", :as => :changeset_download, :id => /\d+/
     post "changeset/:id/expand_bbox" => "changesets#expand_bbox", :id => /\d+/
-    get "changeset/:id" => "changesets#read", :as => :changeset_read, :id => /\d+/
+    get "changeset/:id" => "changesets#show", :as => :changeset_show, :id => /\d+/
     post "changeset/:id/subscribe" => "changesets#subscribe", :as => :changeset_subscribe, :id => /\d+/
     post "changeset/:id/unsubscribe" => "changesets#unsubscribe", :as => :changeset_unsubscribe, :id => /\d+/
     put "changeset/:id" => "changesets#update", :id => /\d+/
@@ -26,10 +26,10 @@ OpenStreetMap::Application.routes.draw do
     get "node/:id/history" => "old_nodes#history", :id => /\d+/
     post "node/:id/:version/redact" => "old_nodes#redact", :version => /\d+/, :id => /\d+/
     get "node/:id/:version" => "old_nodes#version", :id => /\d+/, :version => /\d+/
-    get "node/:id" => "nodes#read", :id => /\d+/
+    get "node/:id" => "nodes#show", :id => /\d+/
     put "node/:id" => "nodes#update", :id => /\d+/
     delete "node/:id" => "nodes#delete", :id => /\d+/
-    get "nodes" => "nodes#nodes"
+    get "nodes" => "nodes#index"
 
     put "way/create" => "ways#create"
     get "way/:id/history" => "old_ways#history", :id => /\d+/
@@ -37,10 +37,10 @@ OpenStreetMap::Application.routes.draw do
     get "way/:id/relations" => "relations#relations_for_way", :id => /\d+/
     post "way/:id/:version/redact" => "old_ways#redact", :version => /\d+/, :id => /\d+/
     get "way/:id/:version" => "old_ways#version", :id => /\d+/, :version => /\d+/
-    get "way/:id" => "ways#read", :id => /\d+/
+    get "way/:id" => "ways#show", :id => /\d+/
     put "way/:id" => "ways#update", :id => /\d+/
     delete "way/:id" => "ways#delete", :id => /\d+/
-    get "ways" => "ways#ways"
+    get "ways" => "ways#index"
 
     put "relation/create" => "relations#create"
     get "relation/:id/relations" => "relations#relations_for_relation", :id => /\d+/
@@ -48,10 +48,10 @@ OpenStreetMap::Application.routes.draw do
     get "relation/:id/full" => "relations#full", :id => /\d+/
     post "relation/:id/:version/redact" => "old_relations#redact", :version => /\d+/, :id => /\d+/
     get "relation/:id/:version" => "old_relations#version", :id => /\d+/, :version => /\d+/
-    get "relation/:id" => "relations#read", :id => /\d+/
+    get "relation/:id" => "relations#show", :id => /\d+/
     put "relation/:id" => "relations#update", :id => /\d+/
     delete "relation/:id" => "relations#delete", :id => /\d+/
-    get "relations" => "relations#relations"
+    get "relations" => "relations#index"
 
     get "map" => "api#map"
 
index d0539b2b081293e12d68d80b8b1058286c8167d8..2b3e07d6acb72b0221379ea0d0a80c681f383b78 100644 (file)
@@ -55,11 +55,15 @@ module RichText
       SimpleFormat.new.simple_format(text)
     end
 
-    def linkify(text)
+    def sanitize(text)
+      Sanitize.clean(text, Sanitize::Config::OSM).html_safe
+    end
+
+    def linkify(text, mode = :urls)
       if text.html_safe?
-        Rinku.auto_link(text, :urls, tag_builder.tag_options(:rel => "nofollow")).html_safe
+        Rinku.auto_link(text, mode, tag_builder.tag_options(:rel => "nofollow noopener noreferer")).html_safe
       else
-        Rinku.auto_link(text, :urls, tag_builder.tag_options(:rel => "nofollow"))
+        Rinku.auto_link(text, mode, tag_builder.tag_options(:rel => "nofollow noopener noreferer"))
       end
     end
   end
@@ -72,30 +76,16 @@ module RichText
     def to_text
       to_s
     end
-
-    private
-
-    def sanitize(text)
-      Sanitize.clean(text, Sanitize::Config::OSM).html_safe
-    end
   end
 
   class Markdown < Base
     def to_html
-      Markdown.html_parser.render(self).html_safe
+      linkify(sanitize(Kramdown::Document.new(self).to_html), :all)
     end
 
     def to_text
       to_s
     end
-
-    def self.html_renderer
-      @html_renderer ||= Redcarpet::Render::XHTML.new(:filter_html => true, :safe_links_only => true, :link_attributes => { :rel => "nofollow" })
-    end
-
-    def self.html_parser
-      @html_parser ||= Redcarpet::Markdown.new(html_renderer, :no_intra_emphasis => true, :autolink => true, :space_after_headers => true)
-    end
   end
 
   class Text < Base
index 35ee9c469d60b0380120c1fc6f03319766fc3a53..a3c8947ca6e2eec779aa58152cd249bd559444fe 100644 (file)
@@ -22,7 +22,7 @@ class ChangesetsControllerTest < ActionController::TestCase
     )
     assert_routing(
       { :path => "/api/0.6/changeset/1", :method => :get },
-      { :controller => "changesets", :action => "read", :id => "1" }
+      { :controller => "changesets", :action => "show", :id => "1" }
     )
     assert_routing(
       { :path => "/api/0.6/changeset/1/subscribe", :method => :post },
@@ -152,19 +152,19 @@ class ChangesetsControllerTest < ActionController::TestCase
   end
 
   ##
-  # check that the changeset can be read and returns the correct
+  # check that the changeset can be shown and returns the correct
   # document structure.
-  def test_read
+  def test_show
     changeset_id = create(:changeset).id
 
-    get :read, :params => { :id => changeset_id }
+    get :show, :params => { :id => changeset_id }
     assert_response :success, "cannot get first changeset"
 
     assert_select "osm[version='#{API_VERSION}'][generator='OpenStreetMap server']", 1
     assert_select "osm>changeset[id='#{changeset_id}']", 1
     assert_select "osm>changeset>discussion", 0
 
-    get :read, :params => { :id => changeset_id, :include_discussion => true }
+    get :show, :params => { :id => changeset_id, :include_discussion => true }
     assert_response :success, "cannot get first changeset with comments"
 
     assert_select "osm[version='#{API_VERSION}'][generator='OpenStreetMap server']", 1
@@ -175,7 +175,7 @@ class ChangesetsControllerTest < ActionController::TestCase
     changeset_id = create(:changeset, :closed).id
     create_list(:changeset_comment, 3, :changeset_id => changeset_id)
 
-    get :read, :params => { :id => changeset_id, :include_discussion => true }
+    get :show, :params => { :id => changeset_id, :include_discussion => true }
     assert_response :success, "cannot get closed changeset with comments"
 
     assert_select "osm[version='#{API_VERSION}'][generator='OpenStreetMap server']", 1
@@ -186,10 +186,10 @@ class ChangesetsControllerTest < ActionController::TestCase
 
   ##
   # check that a changeset that doesn't exist returns an appropriate message
-  def test_read_not_found
+  def test_show_not_found
     [0, -32, 233455644, "afg", "213"].each do |id|
       begin
-        get :read, :params => { :id => id }
+        get :show, :params => { :id => id }
         assert_response :not_found, "should get a not found"
       rescue ActionController::UrlGenerationError => ex
         assert_match(/No route matches/, ex.to_s)
@@ -1483,7 +1483,7 @@ CHANGESET
     end
 
     # get the bounding box back from the changeset
-    get :read, :params => { :id => changeset_id }
+    get :show, :params => { :id => changeset_id }
     assert_response :success, "Couldn't read back changeset."
     assert_select "osm>changeset[min_lon='1.0000000']", 1
     assert_select "osm>changeset[max_lon='1.0000000']", 1
@@ -1498,7 +1498,7 @@ CHANGESET
     end
 
     # get the bounding box back from the changeset
-    get :read, :params => { :id => changeset_id }
+    get :show, :params => { :id => changeset_id }
     assert_response :success, "Couldn't read back changeset for the second time."
     assert_select "osm>changeset[min_lon='1.0000000']", 1
     assert_select "osm>changeset[max_lon='2.0000000']", 1
@@ -1513,7 +1513,7 @@ CHANGESET
     end
 
     # get the bounding box back from the changeset
-    get :read, :params => { :id => changeset_id }
+    get :show, :params => { :id => changeset_id }
     assert_response :success, "Couldn't read back changeset for the third time."
     assert_select "osm>changeset[min_lon='1.0000000']", 1
     assert_select "osm>changeset[max_lon='3.0000000']", 1
@@ -1789,7 +1789,7 @@ CHANGESET
       assert_response :success, "can't create a new node"
       node_id = @response.body.to_i
 
-      get :read, :params => { :id => node_id }
+      get :show, :params => { :id => node_id }
       assert_response :success, "can't read back new node"
       node_doc = XML::Parser.string(@response.body).parse
       node_xml = node_doc.find("//osm/node").first
index 77a6d372b6c52f9fa7063d87d2b0f65694b36c91..e63f04e1196306fdaf7c012c5c1cd1820accedec 100644 (file)
@@ -10,7 +10,7 @@ class NodesControllerTest < ActionController::TestCase
     )
     assert_routing(
       { :path => "/api/0.6/node/1", :method => :get },
-      { :controller => "nodes", :action => "read", :id => "1" }
+      { :controller => "nodes", :action => "show", :id => "1" }
     )
     assert_routing(
       { :path => "/api/0.6/node/1", :method => :put },
@@ -22,7 +22,7 @@ class NodesControllerTest < ActionController::TestCase
     )
     assert_routing(
       { :path => "/api/0.6/nodes", :method => :get },
-      { :controller => "nodes", :action => "nodes" }
+      { :controller => "nodes", :action => "index" }
     )
   end
 
@@ -132,17 +132,17 @@ class NodesControllerTest < ActionController::TestCase
     assert_equal ["NodeTag ", " v: is too long (maximum is 255 characters) (\"#{'x' * 256}\")"], @response.body.split(/[0-9]+,foo:/)
   end
 
-  def test_read
+  def test_show
     # check that a visible node is returned properly
-    get :read, :params => { :id => create(:node).id }
+    get :show, :params => { :id => create(:node).id }
     assert_response :success
 
     # check that an deleted node is not returned
-    get :read, :params => { :id => create(:node, :deleted).id }
+    get :show, :params => { :id => create(:node, :deleted).id }
     assert_response :gone
 
     # check chat a non-existent node is not returned
-    get :read, :params => { :id => 0 }
+    get :show, :params => { :id => 0 }
     assert_response :not_found
   end
 
@@ -427,7 +427,7 @@ class NodesControllerTest < ActionController::TestCase
 
   ##
   # test fetching multiple nodes
-  def test_nodes
+  def test_index
     node1 = create(:node)
     node2 = create(:node, :deleted)
     node3 = create(:node)
@@ -435,15 +435,15 @@ class NodesControllerTest < ActionController::TestCase
     node5 = create(:node, :deleted, :with_history, :version => 2)
 
     # check error when no parameter provided
-    get :nodes
+    get :index
     assert_response :bad_request
 
     # check error when no parameter value provided
-    get :nodes, :params => { :nodes => "" }
+    get :index, :params => { :nodes => "" }
     assert_response :bad_request
 
     # test a working call
-    get :nodes, :params => { :nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id}" }
+    get :index, :params => { :nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id}" }
     assert_response :success
     assert_select "osm" do
       assert_select "node", :count => 5
@@ -455,7 +455,7 @@ class NodesControllerTest < ActionController::TestCase
     end
 
     # check error when a non-existent node is included
-    get :nodes, :params => { :nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id},0" }
+    get :index, :params => { :nodes => "#{node1.id},#{node2.id},#{node3.id},#{node4.id},#{node5.id},0" }
     assert_response :not_found
   end
 
@@ -518,7 +518,7 @@ class NodesControllerTest < ActionController::TestCase
     assert_not_nil checknode, "node not found in data base after upload"
 
     # and grab it using the api
-    get :read, :params => { :id => nodeid }
+    get :show, :params => { :id => nodeid }
     assert_response :success
     apinode = Node.from_xml(@response.body)
     assert_not_nil apinode, "downloaded node is nil, but shouldn't be"
index 53c5072340f77607ccdce89227284ce49659c41c..94d16c8c059d12b4469c12e044c83390995e28cb 100644 (file)
@@ -386,7 +386,7 @@ class OldNodesControllerTest < ActionController::TestCase
   def check_current_version(node_id)
     # get the current version of the node
     current_node = with_controller(NodesController.new) do
-      get :read, :params => { :id => node_id }
+      get :show, :params => { :id => node_id }
       assert_response :success, "cant get current node #{node_id}"
       Node.from_xml(@response.body)
     end
index 51e6c565a315d936a50e0684610517cab1d7b834..9dd9a7165abcf60755a1c99cbd25500fbecb6a36 100644 (file)
@@ -225,7 +225,7 @@ class OldRelationsControllerTest < ActionController::TestCase
   def check_current_version(relation_id)
     # get the current version
     current_relation = with_controller(RelationsController.new) do
-      get :read, :params => { :id => relation_id }
+      get :show, :params => { :id => relation_id }
       assert_response :success, "can't get current relation #{relation_id}"
       Relation.from_xml(@response.body)
     end
index 0dd2d5e3c743ed20422d4dc771da137917e16671..737ca1faf7662176f0fbf883d9c4356706b84169 100644 (file)
@@ -265,7 +265,7 @@ class OldWaysControllerTest < ActionController::TestCase
   def check_current_version(way_id)
     # get the current version
     current_way = with_controller(WaysController.new) do
-      get :read, :params => { :id => way_id }
+      get :show, :params => { :id => way_id }
       assert_response :success, "can't get current way #{way_id}"
       Way.from_xml(@response.body)
     end
index fe35637bdfbf21613907b908d5906b1c18c3f045..a8b0ed2dffed80eddddb8c059453fa18dfac471d 100644 (file)
@@ -14,7 +14,7 @@ class RelationsControllerTest < ActionController::TestCase
     )
     assert_routing(
       { :path => "/api/0.6/relation/1", :method => :get },
-      { :controller => "relations", :action => "read", :id => "1" }
+      { :controller => "relations", :action => "show", :id => "1" }
     )
     assert_routing(
       { :path => "/api/0.6/relation/1", :method => :put },
@@ -26,7 +26,7 @@ class RelationsControllerTest < ActionController::TestCase
     )
     assert_routing(
       { :path => "/api/0.6/relations", :method => :get },
-      { :controller => "relations", :action => "relations" }
+      { :controller => "relations", :action => "index" }
     )
 
     assert_routing(
@@ -44,20 +44,20 @@ class RelationsControllerTest < ActionController::TestCase
   end
 
   # -------------------------------------
-  # Test reading relations.
+  # Test showing relations.
   # -------------------------------------
 
-  def test_read
+  def test_show
     # check that a visible relation is returned properly
-    get :read, :params => { :id => create(:relation).id }
+    get :show, :params => { :id => create(:relation).id }
     assert_response :success
 
     # check that an invisible relation is not returned
-    get :read, :params => { :id => create(:relation, :deleted).id }
+    get :show, :params => { :id => create(:relation, :deleted).id }
     assert_response :gone
 
     # check chat a non-existent relation is not returned
-    get :read, :params => { :id => 0 }
+    get :show, :params => { :id => 0 }
     assert_response :not_found
   end
 
@@ -160,7 +160,7 @@ class RelationsControllerTest < ActionController::TestCase
 
   ##
   # test fetching multiple relations
-  def test_relations
+  def test_index
     relation1 = create(:relation)
     relation2 = create(:relation, :deleted)
     relation3 = create(:relation, :with_history, :version => 2)
@@ -168,15 +168,15 @@ class RelationsControllerTest < ActionController::TestCase
     relation4.old_relations.find_by(:version => 1).redact!(create(:redaction))
 
     # check error when no parameter provided
-    get :relations
+    get :index
     assert_response :bad_request
 
     # check error when no parameter value provided
-    get :relations, :params => { :relations => "" }
+    get :index, :params => { :relations => "" }
     assert_response :bad_request
 
     # test a working call
-    get :relations, :params => { :relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id}" }
+    get :index, :params => { :relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id}" }
     assert_response :success
     assert_select "osm" do
       assert_select "relation", :count => 4
@@ -187,7 +187,7 @@ class RelationsControllerTest < ActionController::TestCase
     end
 
     # check error when a non-existent relation is included
-    get :relations, :params => { :relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id},0" }
+    get :index, :params => { :relations => "#{relation1.id},#{relation2.id},#{relation3.id},#{relation4.id},0" }
     assert_response :not_found
   end
 
@@ -270,7 +270,7 @@ class RelationsControllerTest < ActionController::TestCase
     assert_equal true, checkrelation.visible,
                  "saved relation is not visible"
     # ok the relation is there but can we also retrieve it?
-    get :read, :params => { :id => relationid }
+    get :show, :params => { :id => relationid }
     assert_response :success
 
     ###
@@ -301,7 +301,7 @@ class RelationsControllerTest < ActionController::TestCase
                  "saved relation is not visible"
     # ok the relation is there but can we also retrieve it?
 
-    get :read, :params => { :id => relationid }
+    get :show, :params => { :id => relationid }
     assert_response :success
 
     ###
@@ -331,7 +331,7 @@ class RelationsControllerTest < ActionController::TestCase
                  "saved relation is not visible"
     # ok the relation is there but can we also retrieve it?
 
-    get :read, :params => { :id => relationid }
+    get :show, :params => { :id => relationid }
     assert_response :success
 
     ###
@@ -361,7 +361,7 @@ class RelationsControllerTest < ActionController::TestCase
     assert_equal true, checkrelation.visible,
                  "saved relation is not visible"
     # ok the relation is there but can we also retrieve it?
-    get :read, :params => { :id => relationid }
+    get :show, :params => { :id => relationid }
     assert_response :success
   end
 
@@ -690,7 +690,7 @@ class RelationsControllerTest < ActionController::TestCase
         assert_response :success, "can't update relation for add #{element.class}/bbox test: #{@response.body}"
 
         # get it back and check the ordering
-        get :read, :params => { :id => relation.id }
+        get :show, :params => { :id => relation.id }
         assert_response :success, "can't read back the relation: #{@response.body}"
         check_ordering(relation_xml, @response.body)
       end
@@ -753,7 +753,7 @@ OSM
     relation_id = @response.body.to_i
 
     # get it back and check the ordering
-    get :read, :params => { :id => relation_id }
+    get :show, :params => { :id => relation_id }
     assert_response :success, "can't read back the relation: #{@response.body}"
     check_ordering(doc, @response.body)
 
@@ -773,7 +773,7 @@ OSM
     assert_equal 2, @response.body.to_i
 
     # get it back again and check the ordering again
-    get :read, :params => { :id => relation_id }
+    get :show, :params => { :id => relation_id }
     assert_response :success, "can't read back the relation: #{@response.body}"
     check_ordering(doc, @response.body)
 
@@ -820,7 +820,7 @@ OSM
     relation_id = @response.body.to_i
 
     # get it back and check the ordering
-    get :read, :params => { :id => relation_id }
+    get :show, :params => { :id => relation_id }
     assert_response :success, "can't read back the relation: #{relation_id}"
     check_ordering(doc, @response.body)
   end
@@ -853,7 +853,7 @@ OSM
     relation_id = @response.body.to_i
 
     # check the ordering in the current tables:
-    get :read, :params => { :id => relation_id }
+    get :show, :params => { :id => relation_id }
     assert_response :success, "can't read back the relation: #{@response.body}"
     check_ordering(doc, @response.body)
 
@@ -952,7 +952,7 @@ OSM
 
     # now download the changeset to check its bounding box
     with_controller(ChangesetsController.new) do
-      get :read, :params => { :id => changeset_id }
+      get :show, :params => { :id => changeset_id }
       assert_response :success, "can't re-read changeset for modify test"
       assert_select "osm>changeset", 1, "Changeset element doesn't exist in #{@response.body}"
       assert_select "osm>changeset[id='#{changeset_id}']", 1, "Changeset id=#{changeset_id} doesn't exist in #{@response.body}"
@@ -969,7 +969,7 @@ OSM
   # doc is returned.
   def with_relation(id, ver = nil)
     if ver.nil?
-      get :read, :params => { :id => id }
+      get :show, :params => { :id => id }
     else
       with_controller(OldRelationsController.new) do
         get :version, :params => { :id => id, :version => ver }
@@ -990,7 +990,7 @@ OSM
     version = @response.body.to_i
 
     # now get the new version
-    get :read, :params => { :id => rel_id }
+    get :show, :params => { :id => rel_id }
     assert_response :success
     new_rel = xml_parse(@response.body)
 
@@ -1022,7 +1022,7 @@ OSM
     end
 
     # now get the new version
-    get :read, :params => { :id => rel_id }
+    get :show, :params => { :id => rel_id }
     assert_response :success
     new_rel = xml_parse(@response.body)
 
index 091ce18c4ce299b684c57be43a3161a00e3f7fd0..3c141dce09b5783159b2e265e4923bd3df1e22aa 100644 (file)
@@ -14,7 +14,7 @@ class WaysControllerTest < ActionController::TestCase
     )
     assert_routing(
       { :path => "/api/0.6/way/1", :method => :get },
-      { :controller => "ways", :action => "read", :id => "1" }
+      { :controller => "ways", :action => "show", :id => "1" }
     )
     assert_routing(
       { :path => "/api/0.6/way/1", :method => :put },
@@ -26,25 +26,25 @@ class WaysControllerTest < ActionController::TestCase
     )
     assert_routing(
       { :path => "/api/0.6/ways", :method => :get },
-      { :controller => "ways", :action => "ways" }
+      { :controller => "ways", :action => "index" }
     )
   end
 
   # -------------------------------------
-  # Test reading ways.
+  # Test showing ways.
   # -------------------------------------
 
-  def test_read
+  def test_show
     # check that a visible way is returned properly
-    get :read, :params => { :id => create(:way).id }
+    get :show, :params => { :id => create(:way).id }
     assert_response :success
 
     # check that an invisible way is not returned
-    get :read, :params => { :id => create(:way, :deleted).id }
+    get :show, :params => { :id => create(:way, :deleted).id }
     assert_response :gone
 
     # check chat a non-existent way is not returned
-    get :read, :params => { :id => 0 }
+    get :show, :params => { :id => 0 }
     assert_response :not_found
   end
 
@@ -78,22 +78,22 @@ class WaysControllerTest < ActionController::TestCase
 
   ##
   # test fetching multiple ways
-  def test_ways
+  def test_index
     way1 = create(:way)
     way2 = create(:way, :deleted)
     way3 = create(:way)
     way4 = create(:way)
 
     # check error when no parameter provided
-    get :ways
+    get :index
     assert_response :bad_request
 
     # check error when no parameter value provided
-    get :ways, :params => { :ways => "" }
+    get :index, :params => { :ways => "" }
     assert_response :bad_request
 
     # test a working call
-    get :ways, :params => { :ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id}" }
+    get :index, :params => { :ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id}" }
     assert_response :success
     assert_select "osm" do
       assert_select "way", :count => 4
@@ -104,7 +104,7 @@ class WaysControllerTest < ActionController::TestCase
     end
 
     # check error when a non-existent way is included
-    get :ways, :params => { :ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id},0" }
+    get :index, :params => { :ways => "#{way1.id},#{way2.id},#{way3.id},#{way4.id},0" }
     assert_response :not_found
   end
 
index 74d396b687284fabfd38a9476445323a02014a20..e1603fb0968e6ab5a08a77bfbb9ff7d8f3fa1a16 100644 (file)
@@ -8,14 +8,14 @@ class RichTextTest < ActiveSupport::TestCase
     assert_html r do
       assert_select "a", 1
       assert_select "a[href='http://example.com/']", 1
-      assert_select "a[rel='nofollow']", 1
+      assert_select "a[rel='nofollow noopener noreferer']", 1
     end
 
     r = RichText.new("html", "foo <a href='http://example.com/'>bar</a> baz")
     assert_html r do
       assert_select "a", 1
       assert_select "a[href='http://example.com/']", 1
-      assert_select "a[rel='nofollow']", 1
+      assert_select "a[rel='nofollow noopener noreferer']", 1
     end
 
     r = RichText.new("html", "foo example@example.com bar")
@@ -27,7 +27,7 @@ class RichTextTest < ActiveSupport::TestCase
     assert_html r do
       assert_select "a", 1
       assert_select "a[href='mailto:example@example.com']", 1
-      assert_select "a[rel='nofollow']", 1
+      assert_select "a[rel='nofollow noopener noreferer']", 1
     end
 
     r = RichText.new("html", "foo <div>bar</div> baz")
@@ -64,28 +64,28 @@ class RichTextTest < ActiveSupport::TestCase
     assert_html r do
       assert_select "a", 1
       assert_select "a[href='http://example.com/']", 1
-      assert_select "a[rel='nofollow']", 1
+      assert_select "a[rel='nofollow noopener noreferer']", 1
     end
 
     r = RichText.new("markdown", "foo [bar](http://example.com/) baz")
     assert_html r do
       assert_select "a", 1
       assert_select "a[href='http://example.com/']", 1
-      assert_select "a[rel='nofollow']", 1
+      assert_select "a[rel='nofollow noopener noreferer']", 1
     end
 
     r = RichText.new("markdown", "foo example@example.com bar")
     assert_html r do
       assert_select "a", 1
       assert_select "a[href='mailto:example@example.com']", 1
-      assert_select "a[rel='nofollow']", 1
+      assert_select "a[rel='nofollow noopener noreferer']", 1
     end
 
     r = RichText.new("markdown", "foo [bar](mailto:example@example.com) bar")
     assert_html r do
       assert_select "a", 1
       assert_select "a[href='mailto:example@example.com']", 1
-      assert_select "a[rel='nofollow']", 1
+      assert_select "a[rel='nofollow noopener noreferer']", 1
     end
 
     r = RichText.new("markdown", "foo ![bar](http://example.com/example.png) bar")
@@ -162,7 +162,7 @@ class RichTextTest < ActiveSupport::TestCase
     assert_html r do
       assert_select "a", 1
       assert_select "a[href='http://example.com/']", 1
-      assert_select "a[rel='nofollow']", 1
+      assert_select "a[rel='nofollow noopener noreferer']", 1
     end
 
     r = RichText.new("text", "foo example@example.com bar")
index 7ae801a42f4b00db069be7a0be305257ae9cc732..afacca4b5c7d752edfaf27f6aec96e98e176aa08 100644 (file)
@@ -194,7 +194,9 @@ input::-moz-focus-inner {
 
 
 /* No interactivity except what we specifically allow */
-.layer-osm * {
+.data-layer.osm *,
+.data-layer.notes *,
+.data-layer.keepRight * {
     pointer-events: none;
 }
 
@@ -205,6 +207,8 @@ input::-moz-focus-inner {
 
 /* `.target` objects are interactive */
 /* They can be picked up, clicked, hovered, or things can connect to them */
+.kr_error.target,
+.note.target,
 .node.target,
 .turn .target {
     pointer-events: fill;
@@ -238,8 +242,11 @@ input::-moz-focus-inner {
     pointer-events: none !important;
 }
 
+/* NOTE: when more QA layers are added, replace kr_error with generic QA layer selector */
+/* points, notes & QA */
 
-/* points & notes */
+/* points, notes, markers */
+g.kr_error .stroke,
 g.note .stroke {
     stroke: #222;
     stroke-width: 1;
@@ -247,6 +254,7 @@ g.note .stroke {
     opacity: 0.6;
 }
 
+g.kr_error.active .stroke,
 g.note.active .stroke {
     stroke: #222;
     stroke-width: 1;
@@ -260,6 +268,7 @@ g.point .stroke {
     fill: #fff;
 }
 
+g.kr_error .shadow,
 g.point .shadow,
 g.note .shadow {
     fill: none;
@@ -268,13 +277,14 @@ g.note .shadow {
     stroke-opacity: 0;
 }
 
-g.note.related:not(.selected) .shadow,
+g.kr_error.hover:not(.selected) .shadow,
 g.note.hover:not(.selected) .shadow,
 g.point.related:not(.selected) .shadow,
 g.point.hover:not(.selected) .shadow {
     stroke-opacity: 0.5;
 }
 
+g.kr_error.selected .shadow,
 g.note.selected .shadow,
 g.point.selected .shadow {
     stroke-opacity: 0.7;
@@ -479,7 +489,7 @@ g.vertex.highlighted .shadow {
 
 /* Default - light gray */
 path.area.stroke {
-    stroke: #ddd;
+    stroke: rgb(170, 170, 170);
     stroke-width: 1;
 }
 path.area.fill {
@@ -499,6 +509,7 @@ path.stroke.old-multipolygon {
     stroke-linecap: butt;
 }
 
+
 /* Green things */
 path.stroke.tag-landuse,
 path.stroke.tag-natural,
@@ -551,16 +562,21 @@ path.fill.tag-landuse-grass {
     fill: rgba(140, 208, 95, 0.3);
 }
 
+
 /* Blue things */
+path.stroke.tag-amenity-fountain,
 path.stroke.tag-amenity-swimming_pool,
 path.stroke.tag-leisure-swimming_pool,
-path.stroke.tag-natural-water,
 path.stroke.tag-landuse-aquaculture,
 path.stroke.tag-landuse-basin,
 path.stroke.tag-landuse-harbour,
-path.stroke.tag-landuse-reservoir {
+path.stroke.tag-landuse-reservoir,
+path.stroke.tag-man_made-groyne,
+path.stroke.tag-man_made-breakwater,
+path.stroke.tag-natural-water {
     stroke: rgb(119, 211, 222);
 }
+path.fill.tag-amenity-fountain,
 path.fill.tag-amenity-swimming_pool,
 path.fill.tag-leisure-swimming_pool,
 path.fill.tag-landuse-aquaculture,
@@ -571,6 +587,7 @@ path.fill.tag-natural-water {
     stroke: rgba(119, 211, 222, 0.3);
     fill: rgba(119, 211, 222, 0.3);
 }
+.preset-icon-fill-area.tag-amenity-fountain,
 .preset-icon-fill-area.tag-amenity-swimming_pool,
 .preset-icon-fill-area.tag-leisure-swimming_pool,
 .preset-icon-fill-area.tag-landuse-aquaculture,
@@ -582,17 +599,17 @@ path.fill.tag-natural-water {
     background-color: rgba(119, 211, 222, 0.3);
 }
 .pattern-color-waves,
+.pattern-color-water_standing,
 .pattern-color-pond {
     fill: rgba(119, 211, 222, 0.3);
 }
 
+
 /* Yellow things */
-.pattern-color-beach,
-.pattern-color-sand,
-.pattern-color-scrub {
-    fill: rgba(255, 255, 148, 0.2);
-}
 path.stroke.tag-leisure-pitch.tag-sport-beachvolleyball,
+path.stroke.tag-leisure-pitch.tag-sport-baseball,
+path.stroke.tag-leisure-pitch.tag-sport-softball,
+path.stroke.tag-leisure-track,
 path.stroke.tag-natural-beach,
 path.stroke.tag-natural-sand,
 path.stroke.tag-natural-scrub,
@@ -604,6 +621,9 @@ path.stroke.tag-amenity-university {
     stroke: rgba(255, 255, 148, 0.75);
 }
 path.fill.tag-leisure-pitch.tag-sport-beachvolleyball,
+path.fill.tag-leisure-pitch.tag-sport-baseball,
+path.fill.tag-leisure-pitch.tag-sport-softball,
+path.fill.tag-leisure-track,
 path.fill.tag-natural-beach,
 path.fill.tag-natural-sand,
 path.fill.tag-natural-scrub,
@@ -612,10 +632,13 @@ path.fill.tag-amenity-kindergarten,
 path.fill.tag-amenity-school,
 path.fill.tag-amenity-college,
 path.fill.tag-amenity-university {
-    stroke: rgba(255, 255, 148, 0.15);
-    fill: rgba(255, 255, 148, 0.15);
+    stroke: rgba(255, 255, 148, 0.25);
+    fill: rgba(255, 255, 148, 0.25);
 }
 .preset-icon-fill-area.tag-leisure-pitch.tag-sport-beachvolleyball,
+.preset-icon-fill-area.tag-leisure-pitch.tag-sport-baseball,
+.preset-icon-fill-area.tag-leisure-pitch.tag-sport-softball,
+.preset-icon-fill-area.tag-leisure-track,
 .preset-icon-fill-area.tag-natural-beach,
 .preset-icon-fill-area.tag-natural-sand,
 .preset-icon-fill-area.tag-natural-scrub,
@@ -625,13 +648,16 @@ path.fill.tag-amenity-university {
 .preset-icon-fill-area.tag-amenity-college,
 .preset-icon-fill-area.tag-amenity-university {
     border-color: rgb(232, 232, 0);
-    background-color: rgba(255, 255, 148, 0.15);
+    background-color: rgba(255, 255, 148, 0.25);
 }
+.pattern-color-beach,
+.pattern-color-sand,
+.pattern-color-scrub {
+    fill: rgba(255, 255, 148, 0.2);
+}
+
 
 /* Gold things */
-.pattern-color-construction {
-    fill: rgba(196, 189, 25, 0.3);
-}
 path.stroke.tag-landuse-residential,
 path.stroke.tag-landuse-construction {
     stroke: rgb(196, 189, 25);
@@ -645,6 +671,10 @@ path.fill.tag-landuse-residential {
     border-color: rgb(196, 189, 25);
     background: rgba(196, 189, 25, 0.3);
 }
+.pattern-color-construction {
+    fill: rgba(196, 189, 25, 0.3);
+}
+
 
 /* Orange things */
 path.stroke.tag-landuse-retail,
@@ -670,8 +700,7 @@ path.fill.tag-landuse-military {
     border-color: rgb(214, 136, 26);
     background-color: rgba(214, 136, 26, 0.3);
 }
-.pattern-color-landfill
-{
+.pattern-color-landfill {
     fill: rgba(214, 136, 26, 0.3);
 }
 
@@ -692,14 +721,8 @@ path.fill.tag-power-plant {
     background-color: rgba(228, 164, 245, 0.3);
 }
 
+
 /* Teal things */
-.pattern-color-wetland,
-.pattern-color-wetland_marsh,
-.pattern-color-wetland_swamp,
-.pattern-color-wetland_bog,
-.pattern-color-wetland_reedbed {
-    fill: rgba(153, 225, 170, 0.3);
-}
 path.stroke.tag-natural-wetland {
     stroke: rgb(153, 225, 170);
 }
@@ -707,19 +730,16 @@ path.stroke.tag-natural-wetland {
     border-color: rgb(153, 225, 170);
     background-color: rgba(153, 225, 170, 0.2);
 }
+.pattern-color-wetland,
+.pattern-color-wetland_marsh,
+.pattern-color-wetland_swamp,
+.pattern-color-wetland_bog,
+.pattern-color-wetland_reedbed {
+    fill: rgba(153, 225, 170, 0.3);
+}
+
 
 /* Light Green things */
-.pattern-color-cemetery,
-.pattern-color-cemetery_christian,
-.pattern-color-cemetery_buddhist,
-.pattern-color-cemetery_muslim,
-.pattern-color-cemetery_jewish,
-.pattern-color-orchard,
-.pattern-color-vineyard,
-.pattern-color-meadow,
-.pattern-color-farmland {
-    fill: rgba(191, 232, 63, 0.2);
-}
 path.stroke.tag-landuse-cemetery,
 path.stroke.tag-landuse-orchard,
 path.stroke.tag-landuse-vineyard,
@@ -734,6 +754,18 @@ path.stroke.tag-landuse-farmland {
 .preset-icon-fill-area.tag-landuse-farmland {
     background-color: rgba(191, 232, 63, 0.2);
 }
+.pattern-color-cemetery,
+.pattern-color-cemetery_christian,
+.pattern-color-cemetery_buddhist,
+.pattern-color-cemetery_muslim,
+.pattern-color-cemetery_jewish,
+.pattern-color-orchard,
+.pattern-color-vineyard,
+.pattern-color-meadow,
+.pattern-color-farmland {
+    fill: rgba(191, 232, 63, 0.2);
+}
+
 
 /* Tan things */
 path.stroke.tag-landuse-farmyard {
@@ -751,6 +783,7 @@ path.fill.tag-landuse-farmyard {
     fill: rgba(245, 220, 186, 0.3);
 }
 
+
 /* Dark Gray things */
 path.stroke.tag-amenity-parking,
 path.stroke.tag-leisure-pitch.tag-sport-basketball,
@@ -759,7 +792,7 @@ path.stroke.tag-natural-bare_rock,
 path.stroke.tag-natural-scree,
 path.stroke.tag-landuse-railway,
 path.stroke.tag-landuse-quarry {
-    stroke: #bbb;
+    stroke: rgb(170, 170, 170);
 }
 path.fill.tag-amenity-parking,
 path.fill.tag-leisure-pitch.tag-sport-basketball,
@@ -781,15 +814,15 @@ path.fill.tag-landuse-quarry {
     border-color: rgb(170, 170, 170);
     background-color: rgba(140, 140, 140, 0.5);
 }
-.pattern-color-quarry
-{
+.pattern-color-quarry {
     fill: rgba(140, 140, 140, 0.5);
 }
 
+
 /* Light gray overrides */
 path.stroke.tag-natural-cave_entrance,
 path.stroke.tag-natural-glacier {
-    stroke: #ddd;
+    stroke: rgb(170, 170, 170);
 }
 path.fill.tag-natural-cave_entrance,
 path.fill.tag-natural-glacier {
@@ -803,45 +836,35 @@ path.fill.tag-natural-glacier {
 }
 /* highways */
 
+/* defaults */
 .preset-icon .icon.tag-highway.other-line {
     color: #fff;
     fill: #777;
 }
-path.casing.tag-highway {
+path.line.casing.tag-highway {
     stroke: #444;
 }
-path.stroke.tag-highway {
+path.line.stroke.tag-highway {
     stroke: #ccc;
 }
 
-/* highway areas */
-
-path.stroke.area.tag-highway,
-.low-zoom path.stroke.area.tag-highway {
-    stroke: #fff;
-    stroke-dasharray: none;
-    stroke-width: 1;
-}
-
 /* wide highways */
-
-path.shadow.tag-highway {
+path.line.shadow.tag-highway {
     stroke-width: 20;
 }
-path.casing.tag-highway {
+path.line.casing.tag-highway {
     stroke-width: 10;
 }
-path.stroke.tag-highway {
+path.line.stroke.tag-highway {
     stroke-width: 8;
 }
-
-.low-zoom path.shadow.tag-highway {
+.low-zoom path.line.shadow.tag-highway {
     stroke-width: 16;
 }
-.low-zoom path.casing.tag-highway {
+.low-zoom path.line.casing.tag-highway {
     stroke-width: 7;
 }
-.low-zoom path.stroke.tag-highway {
+.low-zoom path.line.stroke.tag-highway {
     stroke-width: 5;
 }
 
@@ -850,14 +873,14 @@ path.stroke.tag-highway {
     color: #CF2081;
     fill: #70372f;
 }
-path.stroke.tag-highway-motorway,
-path.stroke.tag-highway-motorway_link,
-path.stroke.tag-motorway {
+path.line.stroke.tag-highway-motorway,
+path.line.stroke.tag-highway-motorway_link,
+path.line.stroke.tag-motorway {
     stroke: #CF2081;
 }
-path.casing.tag-highway-motorway,
-path.casing.tag-highway-motorway_link,
-path.casing.tag-motorway {
+path.line.casing.tag-highway-motorway,
+path.line.casing.tag-highway-motorway_link,
+path.line.casing.tag-motorway {
     stroke: #70372f;
 }
 
@@ -866,14 +889,14 @@ path.casing.tag-motorway {
     color: #DD2F22;
     fill: #70372f;
 }
-path.stroke.tag-highway-trunk,
-path.stroke.tag-highway-trunk_link,
-path.stroke.tag-trunk {
+path.line.stroke.tag-highway-trunk,
+path.line.stroke.tag-highway-trunk_link,
+path.line.stroke.tag-trunk {
     stroke: #DD2F22;
 }
-path.casing.tag-highway-trunk,
-path.casing.tag-highway-trunk_link,
-path.casing.tag-trunk {
+path.line.casing.tag-highway-trunk,
+path.line.casing.tag-highway-trunk_link,
+path.line.casing.tag-trunk {
     stroke: #70372f;
 }
 
@@ -882,14 +905,14 @@ path.casing.tag-trunk {
     color: #F99806;
     fill: #70372f;
 }
-path.stroke.tag-highway-primary,
-path.stroke.tag-highway-primary_link,
-path.stroke.tag-primary {
+path.line.stroke.tag-highway-primary,
+path.line.stroke.tag-highway-primary_link,
+path.line.stroke.tag-primary {
     stroke: #F99806;
 }
-path.casing.tag-highway-primary,
-path.casing.tag-highway-primary_link,
-path.casing.tag-primary {
+path.line.casing.tag-highway-primary,
+path.line.casing.tag-highway-primary_link,
+path.line.casing.tag-primary {
     stroke: #70372f;
 }
 
@@ -898,14 +921,14 @@ path.casing.tag-primary {
     color: #F3F312;
     fill: #70372f;
 }
-path.stroke.tag-highway-secondary,
-path.stroke.tag-highway-secondary_link,
-path.stroke.tag-secondary {
+path.line.stroke.tag-highway-secondary,
+path.line.stroke.tag-highway-secondary_link,
+path.line.stroke.tag-secondary {
     stroke: #F3F312;
 }
-path.casing.tag-highway-secondary,
-path.casing.tag-highway-secondary_link,
-path.casing.tag-secondary {
+path.line.casing.tag-highway-secondary,
+path.line.casing.tag-highway-secondary_link,
+path.line.casing.tag-secondary {
     stroke: #70372f;
 }
 
@@ -914,14 +937,14 @@ path.casing.tag-secondary {
     color: #FFF9B3;
     fill: #70372f;
 }
-path.stroke.tag-highway-tertiary,
-path.stroke.tag-highway-tertiary_link,
-path.stroke.tag-tertiary {
+path.line.stroke.tag-highway-tertiary,
+path.line.stroke.tag-highway-tertiary_link,
+path.line.stroke.tag-tertiary {
     stroke: #FFF9B3;
 }
-path.casing.tag-highway-tertiary,
-path.casing.tag-highway-tertiary_link,
-path.casing.tag-tertiary {
+path.line.casing.tag-highway-tertiary,
+path.line.casing.tag-highway-tertiary_link,
+path.line.casing.tag-tertiary {
     stroke: #70372f;
 }
 
@@ -930,14 +953,14 @@ path.casing.tag-tertiary {
     color: #58a9ed;
     fill: #2c5476;
 }
-.legacy-carto path.stroke.tag-highway-motorway,
-.legacy-carto path.stroke.tag-highway-motorway_link,
-.legacy-carto path.stroke.tag-motorway {
+.legacy-carto path.line.stroke.tag-highway-motorway,
+.legacy-carto path.line.stroke.tag-highway-motorway_link,
+.legacy-carto path.line.stroke.tag-motorway {
     stroke: #58a9ed;
 }
-.legacy-carto path.casing.tag-highway-motorway,
-.legacy-carto path.casing.tag-highway-motorway_link,
-.legacy-carto path.casing.tag-motorway {
+.legacy-carto path.line.casing.tag-highway-motorway,
+.legacy-carto path.line.casing.tag-highway-motorway_link,
+.legacy-carto path.line.casing.tag-motorway {
     stroke: #2c5476;
 }
 
@@ -946,14 +969,14 @@ path.casing.tag-tertiary {
     color: #8cd05f;
     fill: #46682f;
 }
-.legacy-carto path.stroke.tag-highway-trunk,
-.legacy-carto path.stroke.tag-highway-trunk_link,
-.legacy-carto path.stroke.tag-trunk {
+.legacy-carto path.line.stroke.tag-highway-trunk,
+.legacy-carto path.line.stroke.tag-highway-trunk_link,
+.legacy-carto path.line.stroke.tag-trunk {
     stroke: #8cd05f;
 }
-.legacy-carto path.casing.tag-highway-trunk,
-.legacy-carto path.casing.tag-highway-trunk_link,
-.legacy-carto path.casing.tag-trunk {
+.legacy-carto path.line.casing.tag-highway-trunk,
+.legacy-carto path.line.casing.tag-highway-trunk_link,
+.legacy-carto path.line.casing.tag-trunk {
     stroke: #46682f;
 }
 
@@ -962,14 +985,14 @@ path.casing.tag-tertiary {
     color: #e06d5f;
     fill: #70372f;
 }
-.legacy-carto path.stroke.tag-highway-primary,
-.legacy-carto path.stroke.tag-highway-primary_link,
-.legacy-carto path.stroke.tag-primary {
+.legacy-carto path.line.stroke.tag-highway-primary,
+.legacy-carto path.line.stroke.tag-highway-primary_link,
+.legacy-carto path.line.stroke.tag-primary {
     stroke: #e06d5f;
 }
-.legacy-carto path.casing.tag-highway-primary,
-.legacy-carto path.casing.tag-highway-primary_link,
-.legacy-carto path.casing.tag-primary {
+.legacy-carto path.line.casing.tag-highway-primary,
+.legacy-carto path.line.casing.tag-highway-primary_link,
+.legacy-carto path.line.casing.tag-primary {
     stroke: #70372f;
 }
 
@@ -978,14 +1001,14 @@ path.casing.tag-tertiary {
     color: #eab056;
     fill: #75582b;
 }
-.legacy-carto path.stroke.tag-highway-secondary,
-.legacy-carto path.stroke.tag-highway-secondary_link,
-.legacy-carto path.stroke.tag-secondary {
+.legacy-carto path.line.stroke.tag-highway-secondary,
+.legacy-carto path.line.stroke.tag-highway-secondary_link,
+.legacy-carto path.line.stroke.tag-secondary {
     stroke: #eab056;
 }
-.legacy-carto path.casing.tag-highway-secondary,
-.legacy-carto path.casing.tag-highway-secondary_link,
-.legacy-carto path.casing.tag-secondary {
+.legacy-carto path.line.casing.tag-highway-secondary,
+.legacy-carto path.line.casing.tag-highway-secondary_link,
+.legacy-carto path.line.casing.tag-secondary {
     stroke: #75582b;
 }
 
@@ -994,14 +1017,14 @@ path.casing.tag-tertiary {
     color: #ffff7e;
     fill: #7f7f3f;
 }
-.legacy-carto path.stroke.tag-highway-tertiary,
-.legacy-carto path.stroke.tag-highway-tertiary_link,
-.legacy-carto path.stroke.tag-tertiary {
+.legacy-carto path.line.stroke.tag-highway-tertiary,
+.legacy-carto path.line.stroke.tag-highway-tertiary_link,
+.legacy-carto path.line.stroke.tag-tertiary {
     stroke: #ffff7e;
 }
-.legacy-carto path.casing.tag-highway-tertiary,
-.legacy-carto path.casing.tag-highway-tertiary_link,
-.legacy-carto path.casing.tag-tertiary {
+.legacy-carto path.line.casing.tag-highway-tertiary,
+.legacy-carto path.line.casing.tag-highway-tertiary_link,
+.legacy-carto path.line.casing.tag-tertiary {
     stroke: #7f7f3f;
 }
 
@@ -1009,12 +1032,12 @@ path.casing.tag-tertiary {
     color: #fff;
     fill: #444;
 }
-path.stroke.tag-highway-residential,
-path.stroke.tag-residential {
+path.line.stroke.tag-highway-residential,
+path.line.stroke.tag-residential {
     stroke: #fff;
 }
-path.casing.tag-highway-residential,
-path.casing.tag-residential {
+path.line.casing.tag-highway-residential,
+path.line.casing.tag-residential {
     stroke: #444;
 }
 
@@ -1022,181 +1045,180 @@ path.casing.tag-residential {
     color: #dca;
     fill: #444;
 }
-path.stroke.tag-highway-unclassified,
-path.stroke.tag-unclassified {
+path.line.stroke.tag-highway-unclassified,
+path.line.stroke.tag-unclassified {
     stroke: #dca;
 }
-path.casing.tag-highway-unclassified,
-path.casing.tag-unclassified {
+path.line.casing.tag-highway-unclassified,
+path.line.casing.tag-unclassified {
     stroke: #444;
 }
 
 
 /* narrow highways */
-
-path.shadow.tag-highway-living_street,
-path.shadow.tag-highway-bus_guideway,
-path.shadow.tag-highway-service,
-path.shadow.tag-highway-track,
-path.shadow.tag-highway-road,
-path.shadow.tag-living_street,
-path.shadow.tag-service,
-path.shadow.tag-track,
-path.shadow.tag-road {
+path.line.shadow.tag-highway-living_street,
+path.line.shadow.tag-highway-bus_guideway,
+path.line.shadow.tag-highway-service,
+path.line.shadow.tag-highway-track,
+path.line.shadow.tag-highway-road,
+path.line.shadow.tag-living_street,
+path.line.shadow.tag-service,
+path.line.shadow.tag-track,
+path.line.shadow.tag-road {
     stroke-width: 16;
 }
-path.casing.tag-highway-living_street,
-path.casing.tag-highway-bus_guideway,
-path.casing.tag-highway-service,
-path.casing.tag-highway-track,
-path.casing.tag-highway-road,
-path.casing.tag-living_street,
-path.casing.tag-service,
-path.casing.tag-track,
-path.casing.tag-road {
+path.line.casing.tag-highway-living_street,
+path.line.casing.tag-highway-bus_guideway,
+path.line.casing.tag-highway-service,
+path.line.casing.tag-highway-track,
+path.line.casing.tag-highway-road,
+path.line.casing.tag-living_street,
+path.line.casing.tag-service,
+path.line.casing.tag-track,
+path.line.casing.tag-road {
     stroke-width: 7;
 }
-path.stroke.tag-highway-living_street,
-path.stroke.tag-highway-bus_guideway,
-path.stroke.tag-highway-service,
-path.stroke.tag-highway-track,
-path.stroke.tag-highway-road,
-path.stroke.tag-living_street,
-path.stroke.tag-service,
-path.stroke.tag-track,
-path.stroke.tag-road {
+path.line.stroke.tag-highway-living_street,
+path.line.stroke.tag-highway-bus_guideway,
+path.line.stroke.tag-highway-service,
+path.line.stroke.tag-highway-track,
+path.line.stroke.tag-highway-road,
+path.line.stroke.tag-living_street,
+path.line.stroke.tag-service,
+path.line.stroke.tag-track,
+path.line.stroke.tag-road {
     stroke-width: 5;
 }
 
-path.shadow.tag-highway-path,
-path.shadow.tag-highway-footway,
-path.shadow.tag-highway-cycleway,
-path.shadow.tag-highway-bridleway,
-path.shadow.tag-highway-corridor,
-path.shadow.tag-highway-pedestrian,
-path.shadow.tag-highway-steps,
-path.shadow.tag-path,
-path.shadow.tag-footway,
-path.shadow.tag-cycleway,
-path.shadow.tag-bridleway,
-path.shadow.tag-corridor,
-path.shadow.tag-pedestrian,
-path.shadow.tag-steps {
+path.line.shadow.tag-highway-path,
+path.line.shadow.tag-highway-footway,
+path.line.shadow.tag-highway-cycleway,
+path.line.shadow.tag-highway-bridleway,
+path.line.shadow.tag-highway-corridor,
+path.line.shadow.tag-highway-pedestrian,
+path.line.shadow.tag-highway-steps,
+path.line.shadow.tag-path,
+path.line.shadow.tag-footway,
+path.line.shadow.tag-cycleway,
+path.line.shadow.tag-bridleway,
+path.line.shadow.tag-corridor,
+path.line.shadow.tag-pedestrian,
+path.line.shadow.tag-steps {
     stroke-width: 16;
 }
-path.casing.tag-highway-path,
-path.casing.tag-highway-footway,
-path.casing.tag-highway-cycleway,
-path.casing.tag-highway-bridleway,
-path.casing.tag-highway-corridor,
-path.casing.tag-highway-pedestrian,
-path.casing.tag-highway-steps,
-path.casing.tag-path,
-path.casing.tag-footway,
-path.casing.tag-cycleway,
-path.casing.tag-bridleway,
-path.casing.tag-corridor,
-path.casing.tag-pedestrian,
-path.casing.tag-steps {
+path.line.casing.tag-highway-path,
+path.line.casing.tag-highway-footway,
+path.line.casing.tag-highway-cycleway,
+path.line.casing.tag-highway-bridleway,
+path.line.casing.tag-highway-corridor,
+path.line.casing.tag-highway-pedestrian,
+path.line.casing.tag-highway-steps,
+path.line.casing.tag-path,
+path.line.casing.tag-footway,
+path.line.casing.tag-cycleway,
+path.line.casing.tag-bridleway,
+path.line.casing.tag-corridor,
+path.line.casing.tag-pedestrian,
+path.line.casing.tag-steps {
     stroke-width: 5;
 }
-path.stroke.tag-highway-path,
-path.stroke.tag-highway-footway,
-path.stroke.tag-highway-cycleway,
-path.stroke.tag-highway-bridleway,
-path.stroke.tag-highway-corridor,
-path.stroke.tag-highway-pedestrian,
-path.stroke.tag-highway-steps,
-path.stroke.tag-path,
-path.stroke.tag-footway,
-path.stroke.tag-cycleway,
-path.stroke.tag-bridleway,
-path.stroke.tag-corridor,
-path.stroke.tag-pedestrian,
-path.stroke.tag-steps {
+path.line.stroke.tag-highway-path,
+path.line.stroke.tag-highway-footway,
+path.line.stroke.tag-highway-cycleway,
+path.line.stroke.tag-highway-bridleway,
+path.line.stroke.tag-highway-corridor,
+path.line.stroke.tag-highway-pedestrian,
+path.line.stroke.tag-highway-steps,
+path.line.stroke.tag-path,
+path.line.stroke.tag-footway,
+path.line.stroke.tag-cycleway,
+path.line.stroke.tag-bridleway,
+path.line.stroke.tag-corridor,
+path.line.stroke.tag-pedestrian,
+path.line.stroke.tag-steps {
     stroke-width: 3;
 }
 
-.low-zoom path.shadow.tag-highway-living_street,
-.low-zoom path.shadow.tag-highway-bus_guideway,
-.low-zoom path.shadow.tag-highway-service,
-.low-zoom path.shadow.tag-highway-track,
-.low-zoom path.shadow.tag-highway-road,
-.low-zoom path.shadow.tag-living_street,
-.low-zoom path.shadow.tag-service,
-.low-zoom path.shadow.tag-track,
-.low-zoom path.shadow.tag-road {
+.low-zoom path.line.shadow.tag-highway-living_street,
+.low-zoom path.line.shadow.tag-highway-bus_guideway,
+.low-zoom path.line.shadow.tag-highway-service,
+.low-zoom path.line.shadow.tag-highway-track,
+.low-zoom path.line.shadow.tag-highway-road,
+.low-zoom path.line.shadow.tag-living_street,
+.low-zoom path.line.shadow.tag-service,
+.low-zoom path.line.shadow.tag-track,
+.low-zoom path.line.shadow.tag-road {
     stroke-width: 12;
 }
-.low-zoom path.casing.tag-highway-living_street,
-.low-zoom path.casing.tag-highway-bus_guideway,
-.low-zoom path.casing.tag-highway-service,
-.low-zoom path.casing.tag-highway-track,
-.low-zoom path.casing.tag-highway-road,
-.low-zoom path.casing.tag-living_street,
-.low-zoom path.casing.tag-service,
-.low-zoom path.casing.tag-track,
-.low-zoom path.casing.tag-road {
+.low-zoom path.line.casing.tag-highway-living_street,
+.low-zoom path.line.casing.tag-highway-bus_guideway,
+.low-zoom path.line.casing.tag-highway-service,
+.low-zoom path.line.casing.tag-highway-track,
+.low-zoom path.line.casing.tag-highway-road,
+.low-zoom path.line.casing.tag-living_street,
+.low-zoom path.line.casing.tag-service,
+.low-zoom path.line.casing.tag-track,
+.low-zoom path.line.casing.tag-road {
     stroke-width: 5;
 }
-.low-zoom path.stroke.tag-highway-living_street,
-.low-zoom path.stroke.tag-highway-bus_guideway,
-.low-zoom path.stroke.tag-highway-service,
-.low-zoom path.stroke.tag-highway-track,
-.low-zoom path.stroke.tag-highway-road,
-.low-zoom path.stroke.tag-living_street,
-.low-zoom path.stroke.tag-service,
-.low-zoom path.stroke.tag-track,
-.low-zoom path.stroke.tag-road {
+.low-zoom path.line.stroke.tag-highway-living_street,
+.low-zoom path.line.stroke.tag-highway-bus_guideway,
+.low-zoom path.line.stroke.tag-highway-service,
+.low-zoom path.line.stroke.tag-highway-track,
+.low-zoom path.line.stroke.tag-highway-road,
+.low-zoom path.line.stroke.tag-living_street,
+.low-zoom path.line.stroke.tag-service,
+.low-zoom path.line.stroke.tag-track,
+.low-zoom path.line.stroke.tag-road {
     stroke-width: 3;
 }
 
-.low-zoom path.shadow.tag-highway-path,
-.low-zoom path.shadow.tag-highway-footway,
-.low-zoom path.shadow.tag-highway-cycleway,
-.low-zoom path.shadow.tag-highway-bridleway,
-.low-zoom path.shadow.tag-highway-corridor,
-.low-zoom path.shadow.tag-highway-pedestrian,
-.low-zoom path.shadow.tag-highway-steps,
-.low-zoom path.shadow.tag-path,
-.low-zoom path.shadow.tag-footway,
-.low-zoom path.shadow.tag-cycleway,
-.low-zoom path.shadow.tag-bridleway,
-.low-zoom path.shadow.tag-corridor,
-.low-zoom path.shadow.tag-pedestrian,
-.low-zoom path.shadow.tag-steps {
+.low-zoom path.line.shadow.tag-highway-path,
+.low-zoom path.line.shadow.tag-highway-footway,
+.low-zoom path.line.shadow.tag-highway-cycleway,
+.low-zoom path.line.shadow.tag-highway-bridleway,
+.low-zoom path.line.shadow.tag-highway-corridor,
+.low-zoom path.line.shadow.tag-highway-pedestrian,
+.low-zoom path.line.shadow.tag-highway-steps,
+.low-zoom path.line.shadow.tag-path,
+.low-zoom path.line.shadow.tag-footway,
+.low-zoom path.line.shadow.tag-cycleway,
+.low-zoom path.line.shadow.tag-bridleway,
+.low-zoom path.line.shadow.tag-corridor,
+.low-zoom path.line.shadow.tag-pedestrian,
+.low-zoom path.line.shadow.tag-steps {
     stroke-width: 12;
 }
-.low-zoom path.casing.tag-highway-path,
-.low-zoom path.casing.tag-highway-footway,
-.low-zoom path.casing.tag-highway-cycleway,
-.low-zoom path.casing.tag-highway-bridleway,
-.low-zoom path.casing.tag-highway-corridor,
-.low-zoom path.casing.tag-highway-pedestrian,
-.low-zoom path.casing.tag-highway-steps,
-.low-zoom path.casing.tag-path,
-.low-zoom path.casing.tag-footway,
-.low-zoom path.casing.tag-cycleway,
-.low-zoom path.casing.tag-bridleway,
-.low-zoom path.casing.tag-corridor,
-.low-zoom path.casing.tag-pedestrian,
-.low-zoom path.casing.tag-steps {
+.low-zoom path.line.casing.tag-highway-path,
+.low-zoom path.line.casing.tag-highway-footway,
+.low-zoom path.line.casing.tag-highway-cycleway,
+.low-zoom path.line.casing.tag-highway-bridleway,
+.low-zoom path.line.casing.tag-highway-corridor,
+.low-zoom path.line.casing.tag-highway-pedestrian,
+.low-zoom path.line.casing.tag-highway-steps,
+.low-zoom path.line.casing.tag-path,
+.low-zoom path.line.casing.tag-footway,
+.low-zoom path.line.casing.tag-cycleway,
+.low-zoom path.line.casing.tag-bridleway,
+.low-zoom path.line.casing.tag-corridor,
+.low-zoom path.line.casing.tag-pedestrian,
+.low-zoom path.line.casing.tag-steps {
     stroke-width: 3;
 }
-.low-zoom path.stroke.tag-highway-path,
-.low-zoom path.stroke.tag-highway-footway,
-.low-zoom path.stroke.tag-highway-cycleway,
-.low-zoom path.stroke.tag-highway-bridleway,
-.low-zoom path.stroke.tag-highway-corridor,
-.low-zoom path.stroke.tag-highway-pedestrian,
-.low-zoom path.stroke.tag-highway-steps,
-.low-zoom path.stroke.tag-path,
-.low-zoom path.stroke.tag-footway,
-.low-zoom path.stroke.tag-cycleway,
-.low-zoom path.stroke.tag-bridleway,
-.low-zoom path.stroke.tag-corridor,
-.low-zoom path.stroke.tag-pedestrian,
-.low-zoom path.stroke.tag-steps {
+.low-zoom path.line.stroke.tag-highway-path,
+.low-zoom path.line.stroke.tag-highway-footway,
+.low-zoom path.line.stroke.tag-highway-cycleway,
+.low-zoom path.line.stroke.tag-highway-bridleway,
+.low-zoom path.line.stroke.tag-highway-corridor,
+.low-zoom path.line.stroke.tag-highway-pedestrian,
+.low-zoom path.line.stroke.tag-highway-steps,
+.low-zoom path.line.stroke.tag-path,
+.low-zoom path.line.stroke.tag-footway,
+.low-zoom path.line.stroke.tag-cycleway,
+.low-zoom path.line.stroke.tag-bridleway,
+.low-zoom path.line.stroke.tag-corridor,
+.low-zoom path.line.stroke.tag-pedestrian,
+.low-zoom path.line.stroke.tag-steps {
     stroke-width: 1;
 }
 
@@ -1205,12 +1227,12 @@ path.stroke.tag-steps {
     color: #bbb;
     fill: #ddd;
 }
-path.stroke.tag-highway-living_street,
-path.stroke.tag-living_street {
+path.line.stroke.tag-highway-living_street,
+path.line.stroke.tag-living_street {
     stroke: #ccc;
 }
-path.casing.tag-highway-living_street,
-path.casing.tag-living_street {
+path.line.casing.tag-highway-living_street,
+path.line.casing.tag-living_street {
     stroke: #fff;
 }
 
@@ -1219,27 +1241,27 @@ path.casing.tag-living_street {
     color: #8cd05f;
     fill: #fff;
 }
-path.stroke.tag-highway-corridor,
-path.stroke.tag-highway-pedestrian,
-path.stroke.tag-corridor,
-path.stroke.tag-pedestrian {
+path.line.stroke.tag-highway-corridor,
+path.line.stroke.tag-highway-pedestrian,
+path.line.stroke.tag-corridor,
+path.line.stroke.tag-pedestrian {
     stroke: #fff;
     stroke-dasharray: 2, 8;
 }
-.low-zoom path.stroke.tag-highway-corridor,
-.low-zoom path.stroke.tag-highway-pedestrian,
-.low-zoom path.stroke.tag-corridor,
-.low-zoom path.stroke.tag-pedestrian {
+.low-zoom path.line.stroke.tag-highway-corridor,
+.low-zoom path.line.stroke.tag-highway-pedestrian,
+.low-zoom path.line.stroke.tag-corridor,
+.low-zoom path.line.stroke.tag-pedestrian {
     stroke-dasharray: 1, 4;
 }
-path.casing.tag-highway-corridor,
-path.casing.tag-highway-pedestrian,
-path.casing.tag-corridor,
-path.casing.tag-pedestrian,
-path.casing.tag-highway-corridor.tag-unpaved,
-path.casing.tag-highway-pedestrian.tag-unpaved,
-path.casing.tag-corridor.tag-unpaved,
-path.casing.tag-pedestrian.tag-unpaved {
+path.line.casing.tag-highway-corridor,
+path.line.casing.tag-highway-pedestrian,
+path.line.casing.tag-corridor,
+path.line.casing.tag-pedestrian,
+path.line.casing.tag-highway-corridor.tag-unpaved,
+path.line.casing.tag-highway-pedestrian.tag-unpaved,
+path.line.casing.tag-corridor.tag-unpaved,
+path.line.casing.tag-pedestrian.tag-unpaved {
     stroke: #8cd05f;
     stroke-linecap: round;
     stroke-dasharray: none;
@@ -1249,12 +1271,12 @@ path.casing.tag-pedestrian.tag-unpaved {
     color: #9e9e9e;
     fill: #666;
 }
-path.stroke.tag-highway-road,
-path.stroke.tag-road {
+path.line.stroke.tag-highway-road,
+path.line.stroke.tag-road {
     stroke: #9e9e9e;
 }
-path.casing.tag-highway-road,
-path.casing.tag-road {
+path.line.casing.tag-highway-road,
+path.line.casing.tag-road {
     stroke: #666;
 }
 
@@ -1262,12 +1284,12 @@ path.casing.tag-road {
     color: #fff;
     fill: #666;
 }
-path.stroke.tag-highway-service,
-path.stroke.tag-service {
+path.line.stroke.tag-highway-service,
+path.line.stroke.tag-service {
     stroke: #fff;
 }
-path.casing.tag-highway-service,
-path.casing.tag-service {
+path.line.casing.tag-highway-service,
+path.line.casing.tag-service {
     stroke: #666;
 }
 
@@ -1278,14 +1300,14 @@ path.casing.tag-service {
     color: #dca;
     fill: #666;
 }
-path.stroke.tag-highway-bus_guideway,
-path.stroke.tag-highway-service.tag-service,
-path.stroke.tag-service.tag-service {
+path.line.stroke.tag-highway-bus_guideway,
+path.line.stroke.tag-highway-service.tag-service,
+path.line.stroke.tag-service.tag-service {
     stroke: #dca;
 }
-path.casing.tag-highway-bus_guideway,
-path.casing.tag-highway-service.tag-service,
-path.casing.tag-service.tag-service {
+path.line.casing.tag-highway-bus_guideway,
+path.line.casing.tag-highway-service.tag-service,
+path.line.casing.tag-service.tag-service {
     stroke: #666;
 }
 
@@ -1293,42 +1315,42 @@ path.casing.tag-service.tag-service {
     color: #eaeaea;
     fill: #c5b59f;
 }
-path.stroke.tag-highway-track,
-path.stroke.tag-track {
+path.line.stroke.tag-highway-track,
+path.line.stroke.tag-track {
     stroke: #c5b59f;
 }
-path.casing.tag-highway-track,
-path.casing.tag-track {
+path.line.casing.tag-highway-track,
+path.line.casing.tag-track {
     stroke: #746f6f;
 }
 
-path.stroke.tag-highway-path,
-path.stroke.tag-highway-footway,
-path.stroke.tag-highway-cycleway,
-path.stroke.tag-highway-bridleway {
+path.line.stroke.tag-highway-path,
+path.line.stroke.tag-highway-footway,
+path.line.stroke.tag-highway-cycleway,
+path.line.stroke.tag-highway-bridleway {
     stroke-linecap: butt;
     stroke-dasharray: 6, 6;
 }
-.low-zoom path.stroke.tag-highway-path,
-.low-zoom path.stroke.tag-highway-footway,
-.low-zoom path.stroke.tag-highway-cycleway,
-.low-zoom path.stroke.tag-highway-bridleway {
+.low-zoom path.line.stroke.tag-highway-path,
+.low-zoom path.line.stroke.tag-highway-footway,
+.low-zoom path.line.stroke.tag-highway-cycleway,
+.low-zoom path.line.stroke.tag-highway-bridleway {
     stroke-linecap: butt;
     stroke-dasharray: 3, 3;
 }
 
-path.casing.tag-highway-path,
-path.casing.tag-highway-path.tag-unpaved {
+path.line.casing.tag-highway-path,
+path.line.casing.tag-highway-path.tag-unpaved {
     stroke: #dca;
     stroke-linecap: round;
     stroke-dasharray: none;
 }
-path.casing.tag-highway-footway,
-path.casing.tag-highway-cycleway,
-path.casing.tag-highway-bridleway,
-path.casing.tag-highway-footway.tag-unpaved,
-path.casing.tag-highway-cycleway.tag-unpaved,
-path.casing.tag-highway-bridleway.tag-unpaved {
+path.line.casing.tag-highway-footway,
+path.line.casing.tag-highway-cycleway,
+path.line.casing.tag-highway-bridleway,
+path.line.casing.tag-highway-footway.tag-unpaved,
+path.line.casing.tag-highway-cycleway.tag-unpaved,
+path.line.casing.tag-highway-bridleway.tag-unpaved {
     stroke: #fff;
     stroke-linecap: round;
     stroke-dasharray: none;
@@ -1339,7 +1361,7 @@ path.casing.tag-highway-bridleway.tag-unpaved {
     color: #988;
     fill: #dca;
 }
-path.stroke.tag-highway-path {
+path.line.stroke.tag-highway-path {
     stroke: #988;
 }
 
@@ -1349,7 +1371,7 @@ path.stroke.tag-highway-path {
     color: #988;
     fill: #fff;
 }
-path.stroke.tag-highway-footway {
+path.line.stroke.tag-highway-footway {
     stroke: #988;
 }
 
@@ -1359,7 +1381,7 @@ path.stroke.tag-highway-footway {
     color: #58a9ed;
     fill: #fff;
 }
-path.stroke.tag-highway-cycleway {
+path.line.stroke.tag-highway-cycleway {
     stroke: #58a9ed;
 }
 
@@ -1368,7 +1390,7 @@ path.stroke.tag-highway-cycleway {
     color: #e06d5f;
     fill: #fff;
 }
-path.stroke.tag-highway-bridleway {
+path.line.stroke.tag-highway-bridleway {
     stroke: #e06d5f;
 }
 
@@ -1376,16 +1398,16 @@ path.stroke.tag-highway-bridleway {
     color: #81d25c;
     fill: #fff;
 }
-path.stroke.tag-highway-steps {
+path.line.stroke.tag-highway-steps {
     stroke: #81d25c;
     stroke-linecap: butt;
     stroke-dasharray: 3, 3;
 }
-.low-zoom path.stroke.tag-highway-steps {
+.low-zoom path.line.stroke.tag-highway-steps {
     stroke-dasharray: 2, 2;
 }
-path.casing.tag-highway-steps,
-path.casing.tag-highway-steps.tag-unpaved {
+path.line.casing.tag-highway-steps,
+path.line.casing.tag-highway-steps.tag-unpaved {
     stroke: #fff;
     stroke-linecap: round;
     stroke-dasharray: none;
@@ -1407,37 +1429,41 @@ g.midpoint.tag-highway-bridleway .fill {
 /* aeroways */
 
 /* areas */
-path.stroke.area.tag-aeroway,
-.low-zoom path.stroke.area.tag-aeroway {
+path.area.stroke.tag-aeroway,
+.low-zoom path.area.stroke.tag-aeroway {
     stroke: #fff;
     stroke-dasharray: none;
     stroke-width: 1;
 }
+path.area.fill.tag-aeroway-runway {
+    stroke: rgba(0, 0, 0, 0.6);
+    fill: rgba(0, 0, 0, 0.6);
+}
 
+/* lines */
 /* narrow aeroways (taxiway) */
-path.shadow.tag-aeroway-taxiway,
-path.shadow.tag-taxiway {
+path.line.shadow.tag-aeroway-taxiway,
+path.line.shadow.tag-taxiway {
     stroke-width: 16;
 }
-path.casing.tag-aeroway-taxiway,
-path.casing.tag-taxiway {
+path.line.casing.tag-aeroway-taxiway,
+path.line.casing.tag-taxiway {
     stroke-width: 7;
 }
-path.stroke.tag-aeroway-taxiway,
-path.stroke.tag-taxiway {
+path.line.stroke.tag-aeroway-taxiway,
+path.line.stroke.tag-taxiway {
     stroke-width: 5;
 }
-
-.low-zoom path.shadow.tag-aeroway-taxiway,
-.low-zoom path.shadow.tag-taxiway {
+.low-zoom path.line.shadow.tag-aeroway-taxiway,
+.low-zoom path.line.shadow.tag-taxiway {
     stroke-width: 12;
 }
-.low-zoom path.casing.tag-aeroway-taxiway,
-.low-zoom path.casing.tag-taxiway {
+.low-zoom path.line.casing.tag-aeroway-taxiway,
+.low-zoom path.line.casing.tag-taxiway {
     stroke-width: 5;
 }
-.low-zoom path.stroke.tag-aeroway-taxiway,
-.low-zoom path.stroke.tag-taxiway {
+.low-zoom path.line.stroke.tag-aeroway-taxiway,
+.low-zoom path.line.stroke.tag-taxiway {
     stroke-width: 3;
 }
 
@@ -1446,54 +1472,49 @@ path.stroke.tag-taxiway {
     color: #ff0;
     fill: #666;
 }
-path.stroke.tag-aeroway-taxiway,
-path.stroke.tag-taxiway {
+path.line.stroke.tag-aeroway-taxiway,
+path.line.stroke.tag-taxiway {
     stroke: #ff0;
 }
-path.casing.tag-aeroway-taxiway,
-path.casing.tag-taxiway {
+path.line.casing.tag-aeroway-taxiway,
+path.line.casing.tag-taxiway {
     stroke: #666;
 }
 
-
 /* wide aeroways (runway) */
 .preset-icon .icon.tag-aeroway-runway,
 .preset-icon .icon.tag-runway {
     color: #444;
     fill: #000;
 }
-path.shadow.tag-aeroway-runway {
+path.line.shadow.tag-aeroway-runway {
     stroke-width: 20;
 }
-path.casing.tag-aeroway-runway {
+path.line.casing.tag-aeroway-runway {
     stroke-width: 10;
     stroke: #000;
     stroke-linecap: square;
 }
-path.stroke.tag-aeroway-runway {
+path.line.stroke.tag-aeroway-runway {
     stroke: #fff;
     stroke-width: 2;
     stroke-linecap: butt;
     stroke-dasharray: 24, 48;
 }
-
-.low-zoom path.shadow.tag-aeroway-runway {
+.low-zoom path.line.shadow.tag-aeroway-runway {
     stroke-width: 16;
 }
-.low-zoom path.casing.tag-aeroway-runway {
+.low-zoom path.line.casing.tag-aeroway-runway {
     stroke-width: 7;
 }
-.low-zoom path.stroke.tag-aeroway-runway {
+.low-zoom path.line.stroke.tag-aeroway-runway {
     stroke-width: 2;
     stroke-dasharray: 12, 24;
 }
 
-path.fill.tag-aeroway-runway {
-    stroke: rgba(0, 0, 0, 0.6);
-    fill: rgba(0, 0, 0, 0.6);
-}
-
 /* railways */
+
+/* defaults */
 .preset-icon .icon.tag-railway.other-line {
     color: #fff;
     fill: #777;
@@ -1503,49 +1524,36 @@ path.fill.tag-aeroway-runway {
     fill: #eee;
 }
 
-/* railway areas */
-path.stroke.area.tag-railway,
-.low-zoom path.stroke.area.tag-railway {
-    stroke: white;
-    stroke-width: 1;
-    stroke-dasharray: none;
-}
-
-path.casing.area.tag-railway,
-.low-zoom path.casing.area.tag-railway {
-    stroke: none;
-}
-
+/* lines */
 /* narrow widths */
-path.shadow.tag-railway {
+path.line.shadow.tag-railway {
     stroke-width: 16;
 }
-path.casing.tag-railway {
+path.line.casing.tag-railway {
     stroke-width: 7;
 }
-path.stroke.tag-railway {
+path.line.stroke.tag-railway {
     stroke-width: 2;
     stroke-linecap: butt;
     stroke-dasharray: 12,12;
 }
-
-.low-zoom path.shadow.tag-railway {
+.low-zoom path.line.shadow.tag-railway {
     stroke-width: 12;
 }
-.low-zoom path.casing.tag-railway {
+.low-zoom path.line.casing.tag-railway {
     stroke-width: 5;
 }
-.low-zoom path.stroke.tag-railway {
+.low-zoom path.line.stroke.tag-railway {
     stroke-width: 2;
     stroke-dasharray: 6,6;
 }
 
 
 /* styles */
-path.casing.tag-railway {
+path.line.casing.tag-railway {
     stroke: #555;
 }
-path.stroke.tag-railway {
+path.line.stroke.tag-railway {
     stroke: #eee;
 }
 
@@ -1555,12 +1563,12 @@ path.stroke.tag-railway {
     color: #999;
     fill: #eee;
 }
-path.casing.tag-railway-disused,
-path.casing.tag-railway-abandoned {
+path.line.casing.tag-railway-disused,
+path.line.casing.tag-railway-abandoned {
     stroke: #999;
 }
-path.stroke.tag-railway-disused,
-path.stroke.tag-railway-abandoned {
+path.line.stroke.tag-railway-disused,
+path.line.stroke.tag-railway-abandoned {
     stroke: #eee;
 }
 
@@ -1569,13 +1577,15 @@ path.stroke.tag-railway-abandoned {
     color: #222;
     fill: #bbb;
 }
-path.casing.tag-railway-subway {
+path.line.casing.tag-railway-subway {
     stroke: #222;
 }
-path.stroke.tag-railway-subway {
+path.line.stroke.tag-railway-subway {
     stroke: #bbb;
 }
 /* waterways */
+
+/* defaults */
 .preset-icon .icon.tag-waterway.other-line {
     color: #77d3de;
     fill: #77d3de;
@@ -1591,54 +1601,85 @@ path.fill.tag-waterway {
     stroke: rgba(119, 211, 222, 0.3);
     fill: rgba(119, 211, 222, 0.3);
 }
-path.casing.tag-waterway {
+path.line.casing.tag-waterway {
     stroke: #3d6c71;
 }
-path.stroke.tag-waterway {
+path.line.stroke.tag-waterway {
+    stroke: #77d3de;
+}
+
+/* areas */
+path.area.stroke.tag-waterway-dock,
+path.area.stroke.tag-waterway-boatyard,
+path.area.stroke.tag-waterway-fuel {
+    stroke: white;
+    stroke-width: 1;
+}
+path.area.casing.tag-waterway-dock,
+path.area.casing.tag-waterway-boatyard,
+path.area.casing.tag-waterway-fuel {
+    stroke: none;
+}
+path.area.fill.tag-waterway-dock,
+path.area.fill.tag-waterway-boatyard,
+path.area.fill.tag-waterway-fuel {
+    stroke: rgba(255, 255, 255, 0.3);
+    fill: rgba(255, 255, 255, 0.3);
+}
+
+/* lines */
+path.fill.tag-waterway {
+    stroke: rgba(119, 211, 222, 0.3);
+    fill: rgba(119, 211, 222, 0.3);
+}
+path.line.casing.tag-waterway {
+    stroke: #3d6c71;
+}
+path.line.stroke.tag-waterway {
     stroke: #77d3de;
 }
 
 
 /* narrow waterways (default) */
-path.shadow.tag-waterway {
+path.line.shadow.tag-waterway {
     stroke-width: 16;
 }
-path.casing.tag-waterway {
+path.line.casing.tag-waterway {
     stroke-width: 7;
 }
-path.stroke.tag-waterway {
+path.line.stroke.tag-waterway {
     stroke-width: 5;
 }
 
-.low-zoom path.shadow.tag-waterway {
+.low-zoom path.line.shadow.tag-waterway {
     stroke-width: 12;
 }
-.low-zoom path.casing.tag-waterway {
+.low-zoom path.line.casing.tag-waterway {
     stroke-width: 5;
 }
-.low-zoom path.stroke.tag-waterway {
+.low-zoom path.line.stroke.tag-waterway {
     stroke-width: 3;
 }
 
 
 /* wide waterways (river) */
-path.shadow.tag-waterway-river {
+path.line.shadow.tag-waterway-river {
     stroke-width: 20;
 }
-path.casing.tag-waterway-river {
+path.line.casing.tag-waterway-river {
     stroke-width: 10;
 }
-path.stroke.tag-waterway-river {
+path.line.stroke.tag-waterway-river {
     stroke-width: 8;
 }
 
-.low-zoom path.shadow.tag-waterway-river {
+.low-zoom path.line.shadow.tag-waterway-river {
     stroke-width: 16;
 }
-.low-zoom path.casing.tag-waterway-river {
+.low-zoom path.line.casing.tag-waterway-river {
     stroke-width: 7;
 }
-.low-zoom path.stroke.tag-waterway-river {
+.low-zoom path.line.stroke.tag-waterway-river {
     stroke-width: 5;
 }
 
@@ -1647,53 +1688,36 @@ path.stroke.tag-waterway-river {
 .preset-icon .icon.tag-waterway-ditch {
     color: #8eabf3;
 }
-path.stroke.tag-waterway-ditch {
+path.line.stroke.tag-waterway-ditch {
     stroke: #8eabf3;
 }
 
 
-/* waterway areas */
-path.area.stroke.tag-waterway-dock,
-path.area.stroke.tag-waterway-boatyard,
-path.area.stroke.tag-waterway-fuel {
-    stroke: white;
-    stroke-width: 1;
-}
-path.area.casing.tag-waterway-dock,
-path.area.casing.tag-waterway-boatyard,
-path.area.casing.tag-waterway-fuel {
-    stroke: none;
-}
-path.area.fill.tag-waterway-dock,
-path.area.fill.tag-waterway-boatyard,
-path.area.fill.tag-waterway-fuel {
-    stroke: rgba(255, 255, 255, 0.3);
-    fill: rgba(255, 255, 255, 0.3);
-}
-
 /* ferry routes  */
 .preset-icon .icon.tag-route-ferry {
     color: #58a9ed;
     fill: #fff;
 }
-path.shadow.tag-route-ferry {
+path.line.shadow.tag-route-ferry {
     stroke-width: 16;
 }
-path.stroke.tag-route-ferry {
+path.line.stroke.tag-route-ferry {
     stroke-width: 3;
     stroke-linecap: butt;
     stroke-dasharray: 12,8;
 }
-.low-zoom path.shadow.tag-route-ferry {
+.low-zoom path.line.shadow.tag-route-ferry {
     stroke-width: 12;
 }
-.low-zoom path.stroke.tag-route-ferry {
+.low-zoom path.line.stroke.tag-route-ferry {
     stroke-width: 2;
     stroke-dasharray: 6,4;
 }
-path.stroke.tag-route-ferry {
+path.line.stroke.tag-route-ferry {
     stroke: #58a9ed;
 }
+
+
 /* power and pipeline */
 .preset-icon .icon.tag-man_made-pipeline,
 .preset-icon .icon.tag-power {
@@ -1702,81 +1726,82 @@ path.stroke.tag-route-ferry {
 }
 
 /* power */
-
-path.stroke.tag-power {
+path.line.stroke.tag-power {
     stroke: #939393;
     stroke-width: 2;
 }
-path.casing.tag-power {
+path.line.casing.tag-power {
     stroke: none;
 }
 
 /* pipeline */
-
-path.stroke.tag-man_made-pipeline {
-    stroke: #CBD0D8;
+path.line.stroke.tag-man_made-pipeline {
+    stroke: #cbd0d8;
     stroke-linecap: butt;
     stroke-width: 3;
     stroke-dasharray: 80, 1.25;
 }
-path.casing.tag-man_made-pipeline {
+path.line.casing.tag-man_made-pipeline {
     stroke: #666;
     stroke-width: 4.5;
 }
-.low-zoom path.stroke.tag-man_made-pipeline {
+.low-zoom path.line.stroke.tag-man_made-pipeline {
     stroke-dasharray: 40, 1;
 }
 
 /* boundaries */
-path.stroke.tag-boundary {
+path.line.stroke.tag-boundary {
     stroke: #fff;
     stroke-width: 2;
     stroke-linecap: butt;
     stroke-dasharray: 20, 5, 5, 5;
 }
-path.casing.tag-boundary {
-    stroke: #82B5FE;
+path.line.casing.tag-boundary {
+    stroke: #82b5fe;
     stroke-width: 6;
 }
 
-path.casing.tag-boundary-protected_area,
-path.casing.tag-boundary-national_park {
+path.line.casing.tag-boundary-protected_area,
+path.line.casing.tag-boundary-national_park {
     stroke: #b0e298;
 }
 
 
 /* Tree Rows */
-path.shadow.tag-natural-tree_row {
+path.line.shadow.tag-natural-tree_row {
     stroke-width: 16;
 }
-path.casing.tag-natural-tree_row {
+path.line.casing.tag-natural-tree_row {
     stroke-width: 7;
 }
-path.stroke.tag-natural-tree_row {
+path.line.stroke.tag-natural-tree_row {
     stroke-width: 5;
 }
-
-.low-zoom path.shadow.tag-natural-tree_row {
+.low-zoom path.line.shadow.tag-natural-tree_row {
     stroke-width: 12;
 }
-.low-zoom path.casing.tag-natural-tree_row {
+.low-zoom path.line.casing.tag-natural-tree_row {
     stroke-width: 5;
 }
-.low-zoom path.stroke.tag-natural-tree_row {
+.low-zoom path.line.stroke.tag-natural-tree_row {
     stroke-width: 3;
 }
 
 
-/* barriers */
-path.stroke.tag-barrier:not(.tag-barrier-hedge) {
+/* barriers and similar */
+path.line.stroke.tag-barrier:not(.tag-barrier-hedge) {
     stroke: #ddd;
 }
-path.stroke.tag-barrier {
+path.line.stroke.tag-barrier,
+path.stroke.tag-man_made-groyne,
+path.stroke.tag-man_made-breakwater {
     stroke-width: 3px;
     stroke-linecap: round;
     stroke-dasharray: 15, 5, 1, 5;
 }
-.low-zoom path.stroke.tag-barrier {
+.low-zoom path.line.stroke.tag-barrier,
+.low-zoom path.stroke.tag-man_made-groyne,
+.low-zoom path.stroke.tag-man_made-breakwater {
     stroke-width: 2px;
     stroke-linecap: butt;
     stroke-dasharray: 8, 2, 2, 2;
@@ -1784,88 +1809,87 @@ path.stroke.tag-barrier {
 
 
 /* bridges */
-path.casing.tag-bridge {
+path.line.casing.tag-bridge {
     stroke-opacity: 0.6;
     stroke: #000 !important;
     stroke-linecap: butt;
     stroke-dasharray: none;
 }
-
-path.shadow.tag-bridge {
+path.line.shadow.tag-bridge {
     stroke-width: 24;
 }
-path.casing.tag-bridge {
+path.line.casing.tag-bridge {
     stroke-width: 16;
 }
-.low-zoom path.shadow.tag-bridge {
+.low-zoom path.line.shadow.tag-bridge {
     stroke-width: 16;
 }
-.low-zoom path.casing.tag-bridge {
+.low-zoom path.line.casing.tag-bridge {
     stroke-width: 10;
 }
 
-path.shadow.line.tag-railway.tag-bridge,
-path.shadow.tag-highway-living_street.tag-bridge,
-path.shadow.tag-highway-path.tag-bridge,
-path.shadow.tag-highway-corridor.tag-bridge,
-path.shadow.line.tag-highway-pedestrian.tag-bridge,
-path.shadow.tag-highway-service.tag-bridge,
-path.shadow.tag-highway-track.tag-bridge,
-path.shadow.tag-highway-steps.tag-bridge,
-path.shadow.tag-highway-footway.tag-bridge,
-path.shadow.tag-highway-cycleway.tag-bridge,
-path.shadow.tag-highway-bridleway.tag-bridge {
+path.line.shadow.tag-railway.tag-bridge,
+path.line.shadow.tag-highway-living_street.tag-bridge,
+path.line.shadow.tag-highway-path.tag-bridge,
+path.line.shadow.tag-highway-corridor.tag-bridge,
+path.line.shadow.tag-highway-pedestrian.tag-bridge,
+path.line.shadow.tag-highway-service.tag-bridge,
+path.line.shadow.tag-highway-track.tag-bridge,
+path.line.shadow.tag-highway-steps.tag-bridge,
+path.line.shadow.tag-highway-footway.tag-bridge,
+path.line.shadow.tag-highway-cycleway.tag-bridge,
+path.line.shadow.tag-highway-bridleway.tag-bridge {
     stroke-width: 18;
 }
-path.casing.line.tag-railway.tag-bridge,
-path.casing.tag-highway-living_street.tag-bridge,
-path.casing.tag-highway-path.tag-bridge,
-path.casing.tag-highway-corridor.tag-bridge,
-path.casing.line.tag-highway-pedestrian.tag-bridge,
-path.casing.tag-highway-service.tag-bridge,
-path.casing.tag-highway-track.tag-bridge,
-path.casing.tag-highway-steps.tag-bridge,
-path.casing.tag-highway-footway.tag-bridge,
-path.casing.tag-highway-cycleway.tag-bridge,
-path.casing.tag-highway-bridleway.tag-bridge {
+path.line.casing.tag-railway.tag-bridge,
+path.line.casing.tag-highway-living_street.tag-bridge,
+path.line.casing.tag-highway-path.tag-bridge,
+path.line.casing.tag-highway-corridor.tag-bridge,
+path.line.casing.tag-highway-pedestrian.tag-bridge,
+path.line.casing.tag-highway-service.tag-bridge,
+path.line.casing.tag-highway-track.tag-bridge,
+path.line.casing.tag-highway-steps.tag-bridge,
+path.line.casing.tag-highway-footway.tag-bridge,
+path.line.casing.tag-highway-cycleway.tag-bridge,
+path.line.casing.tag-highway-bridleway.tag-bridge {
     stroke-width: 10;
 }
 
-.low-zoom path.shadow.line.tag-railway.tag-bridge,
-.low-zoom path.shadow.tag-highway-living_street.tag-bridge,
-.low-zoom path.shadow.tag-highway-path.tag-bridge,
-.low-zoom path.shadow.tag-highway-corridor.tag-bridge,
-.low-zoom path.shadow.line.tag-highway-pedestrian.tag-bridge,
-.low-zoom path.shadow.tag-highway-service.tag-bridge,
-.low-zoom path.shadow.tag-highway-track.tag-bridge,
-.low-zoom path.shadow.tag-highway-steps.tag-bridge,
-.low-zoom path.shadow.tag-highway-footway.tag-bridge,
-.low-zoom path.shadow.tag-highway-cycleway.tag-bridge,
-.low-zoom path.shadow.tag-highway-bridleway.tag-bridge {
+.low-zoom path.line.shadow.tag-railway.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-living_street.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-path.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-corridor.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-pedestrian.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-service.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-track.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-steps.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-footway.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-cycleway.tag-bridge,
+.low-zoom path.line.shadow.tag-highway-bridleway.tag-bridge {
     stroke-width: 14;
 }
-.low-zoom path.casing.line.tag-railway.tag-bridge,
-.low-zoom path.casing.tag-highway-living_street.tag-bridge,
-.low-zoom path.casing.tag-highway-path.tag-bridge,
-.low-zoom path.casing.tag-highway-corridor.tag-bridge,
-.low-zoom path.casing.line.tag-highway-pedestrian.tag-bridge,
-.low-zoom path.casing.tag-highway-service.tag-bridge,
-.low-zoom path.casing.tag-highway-track.tag-bridge,
-.low-zoom path.casing.tag-highway-steps.tag-bridge,
-.low-zoom path.casing.tag-highway-footway.tag-bridge,
-.low-zoom path.casing.tag-highway-cycleway.tag-bridge,
-.low-zoom path.casing.tag-highway-bridleway.tag-bridge {
+.low-zoom path.line.casing.tag-railway.tag-bridge,
+.low-zoom path.line.casing.tag-highway-living_street.tag-bridge,
+.low-zoom path.line.casing.tag-highway-path.tag-bridge,
+.low-zoom path.line.casing.tag-highway-corridor.tag-bridge,
+.low-zoom path.line.casing.tag-highway-pedestrian.tag-bridge,
+.low-zoom path.line.casing.tag-highway-service.tag-bridge,
+.low-zoom path.line.casing.tag-highway-track.tag-bridge,
+.low-zoom path.line.casing.tag-highway-steps.tag-bridge,
+.low-zoom path.line.casing.tag-highway-footway.tag-bridge,
+.low-zoom path.line.casing.tag-highway-cycleway.tag-bridge,
+.low-zoom path.line.casing.tag-highway-bridleway.tag-bridge {
     stroke-width: 6;
 }
 
 
 /* tunnels */
-path.stroke.tag-tunnel,
+path.line.stroke.tag-tunnel,
 path.line.stroke.tag-location-underground,
 path.line.stroke.tag-location-underwater {
     stroke-opacity: 0.3;
 }
-path.casing.tag-tunnel,
+path.line.casing.tag-tunnel,
 path.line.casing.tag-location-underground,
 path.line.stroke.tag-location-underwater {
     stroke-opacity: 0.5;
@@ -1875,12 +1899,12 @@ path.line.stroke.tag-location-underwater {
 
 
 /* embankments / cuttings */
-path.shadow.tag-embankment,
-path.shadow.tag-cutting {
+path.line.shadow.tag-embankment,
+path.line.shadow.tag-cutting {
     stroke-width: 28;
 }
-path.casing.tag-embankment,
-path.casing.tag-cutting {
+path.line.casing.tag-embankment,
+path.line.casing.tag-cutting {
     stroke-opacity: 0.5;
     stroke: #000;
     stroke-width: 22;
@@ -1888,46 +1912,81 @@ path.casing.tag-cutting {
     stroke-linecap: butt;
 }
 
-.low-zoom path.shadow.tag-embankment,
-.low-zoom path.shadow.tag-cutting {
+.low-zoom path.line.shadow.tag-embankment,
+.low-zoom path.line.shadow.tag-cutting {
     stroke-width: 14;
 }
-.low-zoom path.casing.tag-embankment,
-.low-zoom path.casing.tag-cutting {
+.low-zoom path.line.casing.tag-embankment,
+.low-zoom path.line.casing.tag-cutting {
     stroke-width: 10;
 }
 
 
 /* Surface - unpaved */
-path.casing.tag-unpaved {
+path.line.casing.tag-unpaved {
     stroke: #ccc;
     stroke-linecap: butt;
     stroke-dasharray: 4, 3;
 }
-.low-zoom path.casing.tag-unpaved {
+.low-zoom path.line.casing.tag-unpaved {
     stroke-dasharray: 3, 2;
 }
-path.casing.tag-bridge.tag-unpaved {
+path.line.casing.tag-bridge.tag-unpaved {
     stroke: #000;
     stroke-dasharray: 4, 3;
 }
-.low-zoom path.casing.tag-bridge.tag-unpaved {
+.low-zoom path.line.casing.tag-bridge.tag-unpaved {
     stroke: #000;
     stroke-dasharray: 3, 2;
 }
 
 
-/* Status (e.g. construction, proposed, abandoned) */
-path.stroke.tag-status,
-path.casing.tag-status {
+/* Status (e.g. proposed, abandoned) */
+path.area.stroke.tag-status,
+path.line.stroke.tag-status,
+path.area.casing.tag-status,
+path.line.casing.tag-status {
     stroke-linecap: butt;
     stroke-dasharray: 7, 3;
 }
-.low-zoom path.stroke.tag-status,
-.low-zoom path.casing.tag-status {
+.low-zoom path.area.stroke.tag-status,
+.low-zoom path.line.stroke.tag-status,
+.low-zoom path.area.casing.tag-status,
+.low-zoom path.line.casing.tag-status {
     stroke-dasharray: 5, 2;
 }
 
+/* Road Closed Status */
+.preset-icon .icon.iD-highway-construction {
+    color: #fc6c14;
+    fill: #fff;
+}
+path.line.shadow.tag-status.tag-status-construction {
+    stroke-width: 20;
+}
+path.line.casing.tag-status.tag-status-construction {
+    stroke: #fff;
+    stroke-width: 10;
+    stroke-linecap: butt;
+    stroke-dasharray: none
+}
+path.line.stroke.tag-status.tag-status-construction {
+    stroke: #fc6c14;
+    stroke-width: 8;
+    stroke-linecap: butt;
+    stroke-dasharray: 10, 10;
+}
+.low-zoom path.line.shadow.tag-status.tag-status-construction {
+    stroke-width: 16;
+}
+.low-zoom path.line.casing.tag-status.tag-status-construction {
+    stroke-width: 7;
+}
+.low-zoom path.line.stroke.tag-status.tag-status-construction {
+    stroke-width: 5;
+    stroke-dasharray: 8, 8;
+}
+
 
 /* Buildings */
 path.stroke.tag-building {
@@ -1963,53 +2022,53 @@ path.fill.tag-building {
     background-color: #dca;
 }
 
-path.shadow.tag-public_transport-platform,
-path.shadow.tag-railway-platform,
-path.shadow.tag-man_made-pier,
-path.shadow.tag-footway.tag-footway-crossing,
-path.shadow.tag-crossing {
+path.line.shadow.tag-public_transport-platform,
+path.line.shadow.tag-railway-platform,
+path.line.shadow.tag-man_made-pier,
+path.line.shadow.tag-footway.tag-footway-crossing,
+path.line.shadow.tag-crossing {
     stroke-width: 16;
 }
-path.casing.tag-public_transport-platform,
-path.casing.tag-railway-platform,
-path.casing.tag-man_made-pier,
-path.casing.tag-footway.tag-footway-crossing,
-path.casing.tag-crossing {
+path.line.casing.tag-public_transport-platform,
+path.line.casing.tag-railway-platform,
+path.line.casing.tag-man_made-pier,
+path.line.casing.tag-footway.tag-footway-crossing,
+path.line.casing.tag-crossing {
     stroke: #dca;
     stroke-width: 5;
     stroke-linecap: round;
     stroke-dasharray: none;
 }
-path.stroke.tag-public_transport-platform,
-path.stroke.tag-railway-platform,
-path.stroke.tag-man_made-pier,
-path.stroke.tag-footway.tag-footway-crossing,
-path.stroke.tag-crossing {
+path.line.stroke.tag-public_transport-platform,
+path.line.stroke.tag-railway-platform,
+path.line.stroke.tag-man_made-pier,
+path.line.stroke.tag-footway.tag-footway-crossing,
+path.line.stroke.tag-crossing {
     stroke: #988;
     stroke-width: 3;
     stroke-linecap: butt;
     stroke-dasharray: 6, 6;
 }
 
-.low-zoom path.shadow.tag-public_transport-platform,
-.low-zoom path.shadow.tag-railway-platform,
-.low-zoom path.shadow.tag-man_made-pier,
-.low-zoom path.shadow.tag-footway.tag-footway-crossing,
-.low-zoom path.shadow.tag-crossing {
+.low-zoom path.line.shadow.tag-public_transport-platform,
+.low-zoom path.line.shadow.tag-railway-platform,
+.low-zoom path.line.shadow.tag-man_made-pier,
+.low-zoom path.line.shadow.tag-footway.tag-footway-crossing,
+.low-zoom path.line.shadow.tag-crossing {
     stroke-width: 12;
 }
-.low-zoom path.casing.tag-public_transport-platform,
-.low-zoom path.casing.tag-railway-platform,
-.low-zoom path.casing.tag-man_made-pier,
-.low-zoom path.casing.tag-footway.tag-footway-crossing,
-.low-zoom path.casing.tag-crossing {
+.low-zoom path.line.casing.tag-public_transport-platform,
+.low-zoom path.line.casing.tag-railway-platform,
+.low-zoom path.line.casing.tag-man_made-pier,
+.low-zoom path.line.casing.tag-footway.tag-footway-crossing,
+.low-zoom path.line.casing.tag-crossing {
     stroke-width: 3;
 }
-.low-zoom path.stroke.tag-public_transport-platform,
-.low-zoom path.stroke.tag-railway-platform,
-.low-zoom path.stroke.tag-man_made-pier,
-.low-zoom path.stroke.tag-footway.tag-footway-crossing,
-.low-zoom path.stroke.tag-crossing {
+.low-zoom path.line.stroke.tag-public_transport-platform,
+.low-zoom path.line.stroke.tag-railway-platform,
+.low-zoom path.line.stroke.tag-man_made-pier,
+.low-zoom path.line.stroke.tag-footway.tag-footway-crossing,
+.low-zoom path.line.stroke.tag-crossing {
     stroke-width: 1;
     stroke-linecap: butt;
     stroke-dasharray: 3, 3;
@@ -2032,56 +2091,56 @@ g.midpoint.tag-crossing .fill {
     color: #444;
     fill: #dca;
 }
-path.casing.tag-crossing.tag-crossing-marked,
-path.casing.tag-crossing.tag-crossing-zebra {
+path.line.casing.tag-crossing.tag-crossing-marked,
+path.line.casing.tag-crossing.tag-crossing-zebra {
     stroke: #dca;
 }
-path.stroke.tag-crossing.tag-crossing-marked,
-path.stroke.tag-crossing.tag-crossing-zebra {
+path.line.stroke.tag-crossing.tag-crossing-marked,
+path.line.stroke.tag-crossing.tag-crossing-zebra {
     stroke: #444;
     stroke-dasharray: 6, 4;
 }
-.low-zoom path.stroke.tag-crossing.tag-crossing-marked,
-.low-zoom path.stroke.tag-crossing.tag-crossing-zebra {
+.low-zoom path.line.stroke.tag-crossing.tag-crossing-marked,
+.low-zoom path.line.stroke.tag-crossing.tag-crossing-zebra {
     stroke-dasharray: 3, 2;
 }
 
 /* Attractions */
-path.shadow.tag-attraction-summer_toboggan,
-path.shadow.tag-attraction-water_slide {
+path.line.shadow.tag-attraction-summer_toboggan,
+path.line.shadow.tag-attraction-water_slide {
        stroke-width: 16;
 }
-path.casing.tag-attraction-summer_toboggan,
-path.casing.tag-attraction-water_slide {
+path.line.casing.tag-attraction-summer_toboggan,
+path.line.casing.tag-attraction-water_slide {
        stroke-width: 7;
 }
-path.stroke.tag-attraction-summer_toboggan,
-path.stroke.tag-attraction-water_slide {
+path.line.stroke.tag-attraction-summer_toboggan,
+path.line.stroke.tag-attraction-water_slide {
        stroke-width: 5;
 }
-.low-zoom path.shadow.tag-attraction-summer_toboggan,
-.low-zoom path.shadow.tag-attraction-water_slide {
+.low-zoom path.line.shadow.tag-attraction-summer_toboggan,
+.low-zoom path.line.shadow.tag-attraction-water_slide {
     stroke-width: 12;
 }
-.low-zoom path.casing.tag-attraction-summer_toboggan,
-.low-zoom path.casing.tag-attraction-water_slide {
+.low-zoom path.line.casing.tag-attraction-summer_toboggan,
+.low-zoom path.line.casing.tag-attraction-water_slide {
     stroke-width: 5;
 }
-.low-zoom path.stroke.tag-attraction-summer_toboggan,
-.low-zoom path.stroke.tag-attraction-water_slide {
+.low-zoom path.line.stroke.tag-attraction-summer_toboggan,
+.low-zoom path.line.stroke.tag-attraction-water_slide {
        stroke-width: 3;
 }
-path.stroke.tag-attraction-summer_toboggan {
+path.line.stroke.tag-attraction-summer_toboggan {
     stroke: #9e9e9e;
 }
-path.casing.tag-attraction-summer_toboggan {
+path.line.casing.tag-attraction-summer_toboggan {
     stroke: #666;
 }
 
-path.stroke.tag-attraction-water_slide {
+path.line.stroke.tag-attraction-water_slide {
     stroke: #aae0cb;
 }
-path.casing.tag-attraction-water_slide {
+path.line.casing.tag-attraction-water_slide {
     stroke: #3d6c71;
 }
 /* Cursors */
@@ -2182,10 +2241,15 @@ path.casing.tag-attraction-water_slide {
     cursor: url(<%= asset_path("iD/img/cursor-draw.png") %>) 9 9, crosshair; /* FF */
 }
 
+.mode-browse .note,
+.mode-browse .kr_error,
+.mode-select .note,
+.mode-select .kr_error,
 .turn rect,
 .turn circle {
     cursor: pointer;
 }
+
 /* photo viewer div */
 #photoviewer {
     position: absolute;
@@ -2539,41 +2603,29 @@ label.streetside-hires {
     color: #fff;
 }
 
-/* OSM Notes Layer */
-.layer-notes {
-    pointer-events: none;
-}
-.layer-notes .note * {
-    pointer-events: none;
-}
-.mode-browse .layer-notes .note .note-fill,
-.mode-select .layer-notes .note .note-fill,
-.mode-select-data .layer-notes .note .note-fill,
-.mode-select-note .layer-notes .note .note-fill {
-    pointer-events: visible;
-    cursor: pointer; /* Opera */
-    cursor: url(<%= asset_path("iD/img/cursor-select-point.png") %>), pointer; /* FF */
-}
+/* OSM Notes and KeepRight Layers */
 
-.note-header-icon .note-shadow,
-.layer-notes .note .note-shadow {
-    color: #000;
+.kr_error-header-icon .kr_error-fill,
+.layer-keepRight .kr_error .kr_error-fill {
+    stroke: #333;
+    stroke-width: 1.3px;  /* NOTE: likely a better way to scale the icon stroke */
 }
+
 .note-header-icon .note-fill,
 .layer-notes .note .note-fill {
-    color: #ff3300;
+    color: #f30;
     stroke: #333;
     stroke-width: 40px;
 }
 .note-header-icon.new .note-fill,
 .layer-notes .note.new .note-fill {
-    color: #ffee00;
+    color: #fe0;
     stroke: #333;
     stroke-width: 40px;
 }
 .note-header-icon.closed .note-fill,
 .layer-notes .note.closed .note-fill {
-    color: #55dd00;
+    color: #5d0;
     stroke: #333;
     stroke-width: 40px;
 }
@@ -2594,8 +2646,81 @@ label.streetside-hires {
 }
 
 
-/* Custom Map Data (geojson, gpx, kml, vector tile) */
+/* Keep Right Errors
+------------------------------------------------------- */
+.kr_error_type_20,     /* multiple nodes on same spot */
+.kr_error_type_40,     /* impossible oneways */
+.kr_error_type_210,    /* self intersecting ways */
+.kr_error_type_270,    /* unusual motorway connection */
+.kr_error_type_310,    /* roundabout issues */
+.kr_error_type_320,    /* improper _link */
+.kr_error_type_350 {   /* improper bridge tag */
+    color: #ff9;
+}
+
+.kr_error_type_50 {    /* almost junctions */
+    color: #88f;
+}
+
+.kr_error_type_60,     /* deprecated tags */
+.kr_error_type_70,     /* tagging issues */
+.kr_error_type_90,     /* motorway without ref */
+.kr_error_type_100,    /* place of worship without religion */
+.kr_error_type_110,    /* poi without name */
+.kr_error_type_150,    /* railway crossing without tag */
+.kr_error_type_220,    /* misspelled tag */
+.kr_error_type_380 {   /* non-physical sport tag */
+    color: #5d0;
+}
 
+.kr_error_type_130 {   /* disconnected ways */
+    color: #fa3;
+}
+
+.kr_error_type_170 {   /* FIXME tag */
+    color: #ff0;
+}
+
+.kr_error_type_190 {   /* intersection without junction */
+    color: #f33;
+}
+
+.kr_error_type_200 {   /* overlapping ways */
+    color: #fdbf6f;
+}
+
+.kr_error_type_160,    /* railway layer conflict */
+.kr_error_type_230 {   /* layer conflict */
+    color: #b60;
+}
+
+.kr_error_type_280 {   /* boundary issues */
+    color: #5f47a0;
+}
+
+.kr_error_type_180,    /* relation without type */
+.kr_error_type_290 {   /* turn restriction issues */
+    color: #ace;
+}
+
+.kr_error_type_300,    /* missing maxspeed */
+.kr_error_type_390 {   /* missing tracktype */
+    color: #090;
+}
+
+.kr_error_type_360,    /* language unknown */
+.kr_error_type_370,    /* doubled places */
+.kr_error_type_410 {   /* website issues */
+    color: #f9b;
+}
+
+.kr_error_type_120,    /* way without nodes */
+.kr_error_type_400 {   /* geometry / turn angles */
+    color: #c35;
+}
+
+
+/* Custom Map Data (geojson, gpx, kml, vector tile) */
 .layer-mapdata {
     pointer-events: none;
 }
@@ -3155,6 +3280,7 @@ button[disabled].action:hover {
     align-items: center;
     padding: 0 10px;
     min-width: 30px;
+    white-space: nowrap;
 }
 .tool-group button .icon {
     flex: 0 0 20px;
@@ -3289,6 +3415,7 @@ button.add-note svg.icon {
 .field-help-title button.close,
 .sidebar-component .header button.data-editor-close,
 .sidebar-component .header button.note-editor-close,
+.sidebar-component .header button.keepRight-editor-close,
 .entity-editor-pane .header button.preset-close,
 .preset-list-pane .header button.preset-choose {
     position: absolute;
@@ -3298,6 +3425,7 @@ button.add-note svg.icon {
 [dir='rtl'] .field-help-title button.close,
 [dir='rtl'] .sidebar-component .header button.data-editor-close,
 [dir='rtl'] .sidebar-component .header button.note-editor-close,
+[dir='rtl'] .sidebar-component .header button.keepRight-editor-close,
 [dir='rtl'] .entity-editor-pane .header button.preset-close,
 [dir='rtl'] .preset-list-pane .header button.preset-choose {
     left: 0;
@@ -3351,6 +3479,19 @@ button.add-note svg.icon {
     justify-content: center;
 }
 
+.header-container {
+    display: flex;
+    justify-content: space-between;
+}
+
+.header-block-outer {
+    width: 20%;
+}
+
+.header-block-close {
+    display: flex;
+    justify-content: flex-end;
+}
 
 /* Hide/Toggle collapsable sections (aka Disclosure)
 ------------------------------------------------------- */
@@ -3472,10 +3613,6 @@ a.hide-toggle {
     bottom: 0;
 }
 
-.inspector-border {
-    border-bottom: 1px solid #ccc
-}
-
 .feature-list-pane .inspector-body,
 .preset-list-pane .inspector-body {
     top: 120px;
@@ -3486,7 +3623,7 @@ a.hide-toggle {
 }
 
 .inspector-inner {
-    padding: 20px;
+    padding: 20px 20px 5px 20px;
     position: relative;
 }
 
@@ -3539,6 +3676,10 @@ a.hide-toggle {
     border-radius: 2px;
 }
 
+[dir='rtl'] .geocode-item {
+    left: -25%;
+}
+
 .geocode-item:hover {
     background-color: #aaa;
 }
@@ -3845,11 +3986,30 @@ img.tag-reference-wiki-image {
 }
 
 
+/* Quick links
+------------------------------------------------------- */
+.quick-links {
+    display: flex;
+    flex-flow: row wrap;
+    justify-content: flex-end;
+    padding: 0 20px;
+}
+.quick-link {
+    margin: 0 5px;
+}
+
+.data-editor .quick-links,
+.keepRight-editor .quick-links,
+.note-editor .quick-links {
+    padding: 5px 0 0 0;
+}
+
+
 /* Entity/Preset Editor
 ------------------------------------------------------- */
 .preset-editor {
     overflow: hidden;
-    padding-bottom: 10px;
+    padding: 10px 0px 5px 0px;
 }
 .preset-editor a.hide-toggle {
     margin: 0 20px 5px 20px;
@@ -4089,52 +4249,73 @@ img.tag-reference-wiki-image {
 .form-field-input-combo > input:only-of-type {
     border-radius: 0 0 4px 4px;
 }
+.form-field-input-combo.empty-combobox input,
+.form-field-input-multicombo .empty-combobox input {
+    padding-right: 10px;
+    padding-left: 10px;
+}
+.form-field-input-combo.empty-combobox .combobox-caret,
+.form-field-input-multicombo .empty-combobox .combobox-caret {
+    display: none;
+}
 
 .form-field-input-multicombo ul.chiplist {
-    padding: 5px 0 5px 10px;
+    padding: 5px 7px 5px 7px;
     background: #fff;
     display: block;
     border-radius: 0 0 4px 4px;
 }
 
 .form-field-input-multicombo li.chips {
-    display: inline-flex;
-    flex-flow: row nowrap;
-    align-items: center;
     background-color: #eff2f7;
     border: 1px solid #ccd5e3;
-    border-radius: 4px;
     line-height: 25px;
-    padding: 2px 5px;
+    padding: 2px 0px 2px 5px;
+}
+.form-field-input-multicombo li {
+    display: inline-flex;
+    flex-flow: row nowrap;
+    align-items: center;
     margin: 3px;
+    border-radius: 4px;
 }
 
 .form-field-input-multicombo a {
     font-family: Arial, Helvetica, sans-serif !important;
     font-size: 16px !important;
-    line-height: 24px;
+    line-height: 22px;
     float: right;
-    margin: 1px 0 0 5px;
-    padding: 0;
+    padding: 0px 5px 0px 5px;
+    margin: 0;
     cursor: pointer;
     color: #a6b4ce;
 }
 
-.form-field-input-multicombo input {
+.form-field-input-multicombo .input-wrap {
     border: 1px solid #ddd;
     width: 100px;
-    margin: 3px;
     height: 31px;
 }
-
-.form-field-input-multicombo .combobox-caret {
-    margin: 3px 3px 3px -30px;
+.form-field-input-multicombo input {
+    border: none;
+    width: 100%;
+    height: 100%;
 }
 
 .form-field-input-multicombo input:focus {
     border-radius: 4px !important;
 }
 
+.form-field-input-multicombo .full-line-chips li {
+    display: block;
+}
+.form-field-input-multicombo .full-line-chips li:not(:last-child) {
+    margin-bottom: 6px;
+}
+.form-field-input-multicombo .full-line-chips .input-wrap {
+    width: auto;
+}
+
 
 /* Field - Text / Numeric
 ------------------------------------------------------- */
@@ -4596,6 +4777,7 @@ div.combobox {
     margin-left: -30px;
     vertical-align: top;
     cursor: pointer;
+    pointer-events: none;
 }
 [dir='rtl'] .combobox-caret {
   margin-left: 0;
@@ -4774,7 +4956,7 @@ div.combobox {
 }
 .tag-row .key-wrap,
 .tag-row .value-wrap {
-    flex: 1 1 auto;
+    flex: 1 1 50%;
 }
 
 .tag-row.readonly,
@@ -4871,22 +5053,6 @@ div.combobox {
     border-right-width: 0;
 }
 
-/* Adding form fields to tag editor */
-.raw-tag-editor .add-tag {
-    width: 40%;
-    height: 30px;
-    border-top: 0;
-    background: rgba(0,0,0,.5);
-    border-radius: 0 0 4px 4px;
-}
-.raw-tag-editor .add-tag:focus,
-.raw-tag-editor .add-tag:hover {
-    background: rgba(0,0,0,.8);
-}
-.raw-tag-editor .add-tag .label {
-    display: none;
-}
-
 /* Tag reference */
 .tag-reference-loading {
     background-color: #f5f5f5;
@@ -4943,6 +5109,12 @@ div.combobox {
     padding-left: 10px;
 }
 
+[dir='rtl'] .raw-member-editor .member-row .member-entity-name,
+[dir='rtl'] .raw-membership-editor .member-row .member-entity-name {
+    padding-left:0;
+    padding-right: 10px;
+}
+
 .form-field-input-member > input.member-role {
     border-radius: 0 0 0 4px;
 }
@@ -4965,18 +5137,6 @@ div.combobox {
     border: 0;
 }
 
-.add-relation {
-    width: 40%;
-    height: 30px;
-    background: rgba(0,0,0,.5);
-    border-radius: 4px;
-    margin-top: 10px;
-}
-.add-relation:focus,
-.add-relation:hover {
-    background: rgba(0,0,0,.8);
-}
-
 /* preserve extra space at bottom of inspector to allow for dropdown options - #5280 */
 .raw-membership-editor.inspector-inner {
     margin-bottom: 150px;
@@ -4991,6 +5151,38 @@ input.key-trap {
 }
 
 
+/* add tag, add relation buttons */
+.add-row {
+    display: flex;
+    width: 100%;
+    flex-flow: row nowrap;
+}
+.add-row .add-tag,
+.add-row .add-relation,
+.add-row .space-value {
+    flex: 1 1 50%;
+}
+.add-row .space-buttons {
+    flex: 0 0 62px;
+}
+.add-row button {
+    height: 30px;
+    background: rgba(0,0,0,.5);
+}
+.add-row button:focus,
+.add-row button:hover {
+    background: rgba(0,0,0,.8);
+}
+
+.add-tag {
+    border-radius: 0 0 4px 4px;
+}
+.add-relation {
+    margin-top: 10px;
+    border-radius: 4px;
+}
+
+
 /* Inspector (hover styles)
 ------------------------------------------------------- */
 .inspector-hover .form-field-input-wrap .label,
@@ -5031,18 +5223,18 @@ input.key-trap {
 .inspector-hover .preset-list-button-wrap .tag-reference-button,
 .inspector-hover label input[type="checkbox"],
 .inspector-hover label input[type="radio"],
-.inspector-hover .form-field-input-multicombo .combobox-input,
+.inspector-hover .form-field-input-multicombo .input-wrap,
 .inspector-hover .form-field-input-radio label,
 .inspector-hover .form-field-input-radio label span,
 .inspector-hover .form-field-input-radio label.remove .icon,
-.inspector-hover .inspector-inner .add-tag,
-.inspector-hover .inspector-inner .add-relation {
+.inspector-hover .inspector-inner .add-row {
     display: none;
 }
 
 /* hide but preserve in layout */
 .inspector-hover .combobox-caret,
 .inspector-hover .header button,
+.inspector-hover .quick-links,
 .inspector-hover .form-field-input-multicombo .chips .remove,
 .inspector-hover .hide-toggle:before,
 .inspector-hover .more-fields,
@@ -5119,9 +5311,10 @@ input.key-trap {
 }
 
 
-/* OSM Note Editor
+/* OSM Note / KeepRight Editors
 ------------------------------------------------------- */
-.note-header {
+.note-header,
+.kr_error-header {
     background-color: #f6f6f6;
     border-radius: 5px;
     border: 1px solid #ccc;
@@ -5130,7 +5323,8 @@ input.key-trap {
     align-items: center;
 }
 
-.note-header-icon {
+.note-header-icon,
+.kr_error-header-icon {
     background-color: #fff;
     padding: 10px;
     flex: 0 0 62px;
@@ -5140,18 +5334,21 @@ input.key-trap {
     border-right: 1px solid #ccc;
     border-radius: 5px 0 0 5px;
 }
-[dir='rtl'] .note-header-icon {
+[dir='rtl'] .note-header-icon,
+[dir='rtl'] .kr_error-header-icon {
     border-right: unset;
     border-left: 1px solid #ccc;
     border-radius: 0 5px 5px 0;
 }
 
-.note-header-icon .icon-wrap {
+.note-header-icon .icon-wrap,
+.kr_error-header-icon .icon-wrap {
     position: absolute;
     top: 0px;
 }
 
-.note-header-label {
+.note-header-label,
+.kr_error-header-label {
     background-color: #f6f6f6;
     padding: 0 15px;
     flex: 1 1 100%;
@@ -5159,7 +5356,8 @@ input.key-trap {
     font-weight: bold;
     border-radius: 0 5px 5px 0;
 }
-[dir='rtl'] .note-header-label {
+[dir='rtl'] .note-header-label,
+[dir='rtl'] .kr_error-header-label {
     border-radius: 5px 0 0 5px;
 }
 
@@ -5225,17 +5423,24 @@ input.key-trap {
     border-left: none;
 }
 
-.note-save {
+.note-save,
+.keepRight-save {
+    padding-top: 20px;
+}
+.kr_error-details,
+.kr_error-comment-container {
     padding: 10px;
 }
 
-.note-save #new-comment-input {
+.keepRight-save .new-comment-input,
+.note-save .new-comment-input {
     width: 100%;
     height: 100px;
     max-height: 300px;
     min-height: 100px;
 }
 
+.keepRight-save .detail-section,
 .note-save .detail-section {
     margin: 10px 0;
 }
@@ -5244,6 +5449,21 @@ input.key-trap {
     float: right;
 }
 
+.kr_error-details-container {
+    background: #ececec;
+    padding: 10px;
+    margin-top: 20px;
+    border-radius: 4px;
+    border: 1px solid #ccc;
+}
+
+.kr_error-details-description {
+    margin-bottom: 10px;
+}
+.kr_error-details-description-text::first-letter {
+    text-transform: capitalize;
+}
+
 
 /* Custom Data Editor
 ------------------------------------------------------- */
@@ -6732,13 +6952,11 @@ img.tile-debug {
 }
 
 .modal-shortcuts .shortcut-keys {
-    padding-right: 10px;
+    padding: 0 10px;
     color: #767676;
     text-align: right;
 }
 [dir='rtl'] .modal-shortcuts .shortcut-keys {
-    padding-right: auto;
-    padding-left: 10px;
     text-align: left;
 }
 
@@ -6778,6 +6996,7 @@ svg.mouseclick use.right {
 ------------------------------------------------------- */
 .settings-modal textarea {
     height: 70px;
+    width: 100%;
 }
 
 .settings-custom-background .instructions-template {
@@ -6856,6 +7075,10 @@ svg.mouseclick use.right {
     background: #ffb;
 }
 
+.mode-save .error-section {
+    background: #ffa5a5;
+}
+
 .mode-save .warning-section .changeset-list button {
     border-left: 1px solid #ccc;
 }
@@ -6984,29 +7207,24 @@ svg.mouseclick use.right {
     font-size: 12px;
     white-space: initial;
 }
-
 .tooltip.in {
     opacity: 0.9;
     z-index: 1030;
     height: auto;
     display: block;
 }
-
 .tooltip.top {
     margin-top: -20px;
     text-align: center;
 }
-
 .tooltip.right {
     margin-left: 20px;
     text-align: left;
 }
-
 .tooltip.bottom {
     margin-top: 20px;
     text-align: center;
 }
-
 .tooltip.left {
     margin-left: -20px;
     text-align: right;
@@ -7031,7 +7249,6 @@ svg.mouseclick use.right {
     position: absolute;
     background: transparent;
 }
-
 .tail::after {
     content: "";
     position: absolute;
@@ -7078,7 +7295,6 @@ svg.mouseclick use.right {
     border-color: transparent;
     border-style: solid;
 }
-
 .tooltip.top .tooltip-arrow {
     bottom: -5px;
     left: 50%;
@@ -7086,7 +7302,6 @@ svg.mouseclick use.right {
     border-top-color: #fff;
     border-width: 5px 5px 0;
 }
-
 .tooltip.right .tooltip-arrow {
     top: 50%;
     left: -5px;
@@ -7094,7 +7309,6 @@ svg.mouseclick use.right {
     border-right-color: #fff;
     border-width: 5px 5px 5px 0;
 }
-
 .tooltip.left .tooltip-arrow {
     top: 50%;
     right: -5px;
@@ -7102,7 +7316,6 @@ svg.mouseclick use.right {
     border-left-color: #fff;
     border-width: 5px 0 5px 5px;
 }
-
 .tooltip.bottom .tooltip-arrow {
     top: -5px;
     left: 50%;
@@ -7113,7 +7326,7 @@ svg.mouseclick use.right {
 
 .tooltip-heading {
     font-weight: bold;
-    background: #F6F6F6;
+    background: #f6f6f6;
     padding: 10px;
     margin: -10px -10px 10px -10px;
     border-radius: 3px 3px 0 0;
@@ -7121,52 +7334,50 @@ svg.mouseclick use.right {
 }
 
 .keyhint-wrap {
-    background: #F6F6F6;
+    background: #f6f6f6;
     padding: 10px;
     margin: 10px -10px -10px -10px;
     border-radius: 0 0 3px 3px;
 }
-
 .tooltip-inner .keyhint {
     font-weight: bold;
     margin-left: 5px;
 }
 
-/* Exceptions for tooltip layouts */
+[dir='rtl'] .tooltip-inner .keyhint {
+    margin-left: 0;
+    margin-right: 5px;
+}
 
-/* make tooltips in panels dark */
+/* dark tooltips for sidebar / panels */
 .map-pane .tooltip.top .tooltip-arrow,
-.entity-editor-pane .tooltip.top .tooltip-arrow,
-.warning-section .tooltip.top .tooltip-arrow {
+#sidebar .tooltip.top .tooltip-arrow {
     border-top-color: #000;
 }
-
 .map-pane .tooltip.bottom .tooltip-arrow,
-.entity-editor-pane .tooltip.bottom .tooltip-arrow,
-.warning-section .tooltip.bottom .tooltip-arrow {
+#sidebar .tooltip.bottom .tooltip-arrow {
     border-bottom-color: #000;
 }
-
 .map-pane .tooltip.left .tooltip-arrow,
-.entity-editor-pane .tooltip.left .tooltip-arrow,
-.warning-section .tooltip.left .tooltip-arrow {
+#sidebar .tooltip.left .tooltip-arrow {
     border-left-color: #000;
 }
-
 .map-pane .tooltip.right .tooltip-arrow,
-.entity-editor-pane .tooltip.right .tooltip-arrow,
-.warning-section .tooltip.right .tooltip-arrow {
+#sidebar .tooltip.right .tooltip-arrow {
     border-right-color: #000;
 }
-
 .map-pane .tooltip-inner,
 .map-pane .tooltip-heading,
 .map-pane .keyhint-wrap,
-.entity-editor-pane .tooltip-inner,
-.warning-section .tooltip-inner {
+#sidebar .tooltip-inner,
+#sidebar .tooltip-heading,
+#sidebar .keyhint-wrap {
     background: #000;
     color: #ccc;
 }
+
+/* Exceptions for tooltip layouts */
+
 /* commit warning tooltips need to be closer */
 .warning-section .tooltip.top {
     margin-top: -5px;
@@ -7182,11 +7393,11 @@ svg.mouseclick use.right {
 
 /* Move over tooltips that are near the edge of screen */
 button.sidebar-toggle .tooltip .tooltip-arrow {
-    left: 32px;
+    left: 36px;
 }
 [dir='rtl'] button.sidebar-toggle .tooltip .tooltip-arrow {
     left: auto;
-    right: 32px;
+    right: 36px;
 }
 
 li:first-of-type .badge .tooltip,
index 4847f523309e63aa5cf14665f8c821d24fd97aa6..bbc2f9f98e921ffed69f054c4d70781eea460fde 100644 (file)
 
     try {
       value[symToStringTag] = undefined;
+      var unmasked = true;
     } catch (e) {}
 
     var result = nativeObjectToString.call(value);
-    {
+    if (unmasked) {
       if (isOwn) {
         value[symToStringTag] = tag;
       } else {
       }
   };
 
-  var wikipedia = [
-      [
-          "Abkhazian",
-          "Аҧсшәа",
-          "ab"
-      ],
-      [
-          "Achinese",
-          "Acèh",
-          "ace"
-      ],
-      [
-          "Adyghe",
-          "адыгабзэ",
-          "ady"
-      ],
+  var wikibooks = [
       [
           "Afrikaans",
           "Afrikaans",
           "af"
       ],
-      [
-          "Akan",
-          "Akan",
-          "ak"
-      ],
-      [
-          "Alemannisch",
-          "Alemannisch",
-          "als"
-      ],
-      [
-          "Amharic",
-          "አማርኛ",
-          "am"
-      ],
-      [
-          "Aragonese",
-          "aragonés",
-          "an"
-      ],
-      [
-          "Old English",
-          "Ænglisc",
-          "ang"
-      ],
       [
           "Arabic",
           "العربية",
           "ar"
       ],
-      [
-          "Aramaic",
-          "ܐܪܡܝܐ",
-          "arc"
-      ],
-      [
-          "Egyptian Arabic",
-          "مصرى",
-          "arz"
-      ],
-      [
-          "Assamese",
-          "অসমীয়া",
-          "as"
-      ],
-      [
-          "Asturian",
-          "asturianu",
-          "ast"
-      ],
-      [
-          "Avaric",
-          "авар",
-          "av"
-      ],
-      [
-          "Aymara",
-          "Aymar aru",
-          "ay"
-      ],
       [
           "Azerbaijani",
           "azərbaycanca",
           "az"
       ],
-      [
-          "تۆرکجه",
-          "تۆرکجه",
-          "azb"
-      ],
-      [
-          "Bashkir",
-          "башҡортса",
-          "ba"
-      ],
-      [
-          "Bavarian",
-          "Boarisch",
-          "bar"
-      ],
-      [
-          "Samogitian",
-          "žemaitėška",
-          "bat-smg"
-      ],
-      [
-          "Bikol Central",
-          "Bikol Central",
-          "bcl"
-      ],
       [
           "Belarusian",
           "беларуская",
           "be"
       ],
-      [
-          "беларуская (тарашкевіца)‎",
-          "беларуская (тарашкевіца)‎",
-          "be-x-old"
-      ],
       [
           "Bulgarian",
           "български",
           "bg"
       ],
-      [
-          "भोजपुरी",
-          "भोजपुरी",
-          "bh"
-      ],
-      [
-          "Bislama",
-          "Bislama",
-          "bi"
-      ],
-      [
-          "Banjar",
-          "Bahasa Banjar",
-          "bjn"
-      ],
-      [
-          "Bambara",
-          "bamanankan",
-          "bm"
-      ],
       [
           "Bangla",
           "বাংলা",
           "bn"
       ],
-      [
-          "Tibetan",
-          "བོད་ཡིག",
-          "bo"
-      ],
-      [
-          "Bishnupriya",
-          "বিষ্ণুপ্রিয়া মণিপুরী",
-          "bpy"
-      ],
-      [
-          "Breton",
-          "brezhoneg",
-          "br"
-      ],
       [
           "Bosnian",
           "bosanski",
           "bs"
       ],
-      [
-          "Buginese",
-          "ᨅᨔ ᨕᨘᨁᨗ",
-          "bug"
-      ],
-      [
-          "буряад",
-          "буряад",
-          "bxr"
-      ],
       [
           "Catalan",
           "català",
           "ca"
       ],
-      [
-          "Chavacano de Zamboanga",
-          "Chavacano de Zamboanga",
-          "cbk-zam"
-      ],
-      [
-          "Min Dong Chinese",
-          "Mìng-dĕ̤ng-ngṳ̄",
-          "cdo"
-      ],
-      [
-          "Chechen",
-          "нохчийн",
-          "ce"
-      ],
-      [
-          "Cebuano",
-          "Cebuano",
-          "ceb"
-      ],
-      [
-          "Chamorro",
-          "Chamoru",
-          "ch"
-      ],
-      [
-          "Cherokee",
-          "ᏣᎳᎩ",
-          "chr"
-      ],
-      [
-          "Cheyenne",
-          "Tsetsêhestâhese",
-          "chy"
-      ],
-      [
-          "Central Kurdish",
-          "کوردیی ناوەندی",
-          "ckb"
-      ],
-      [
-          "Corsican",
-          "corsu",
-          "co"
-      ],
-      [
-          "Cree",
-          "Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ",
-          "cr"
-      ],
-      [
-          "Crimean Turkish",
-          "qırımtatarca",
-          "crh"
-      ],
       [
           "Czech",
           "čeština",
           "cs"
       ],
-      [
-          "Kashubian",
-          "kaszëbsczi",
-          "csb"
-      ],
-      [
-          "Church Slavic",
-          "словѣньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ",
-          "cu"
-      ],
       [
           "Chuvash",
           "Чӑвашла",
           "Deutsch",
           "de"
       ],
-      [
-          "Zazaki",
-          "Zazaki",
-          "diq"
-      ],
-      [
-          "Lower Sorbian",
-          "dolnoserbski",
-          "dsb"
-      ],
-      [
-          "Divehi",
-          "ދިވެހިބަސް",
-          "dv"
-      ],
-      [
-          "Dzongkha",
-          "ཇོང་ཁ",
-          "dz"
-      ],
-      [
-          "Ewe",
-          "eʋegbe",
-          "ee"
-      ],
       [
           "Greek",
           "Ελληνικά",
           "el"
       ],
-      [
-          "Emiliano-Romagnolo",
-          "emiliàn e rumagnòl",
-          "eml"
-      ],
       [
           "English",
           "English",
           "euskara",
           "eu"
       ],
-      [
-          "Extremaduran",
-          "estremeñu",
-          "ext"
-      ],
       [
           "Persian",
           "فارسی",
           "fa"
       ],
-      [
-          "Fulah",
-          "Fulfulde",
-          "ff"
-      ],
       [
           "Finnish",
           "suomi",
           "fi"
       ],
-      [
-          "Võro",
-          "Võro",
-          "fiu-vro"
-      ],
-      [
-          "Fijian",
-          "Na Vosa Vakaviti",
-          "fj"
-      ],
-      [
-          "Faroese",
-          "føroyskt",
-          "fo"
-      ],
       [
           "French",
           "français",
           "fr"
       ],
-      [
-          "Arpitan",
-          "arpetan",
-          "frp"
-      ],
-      [
-          "Northern Frisian",
-          "Nordfriisk",
-          "frr"
-      ],
-      [
-          "Friulian",
-          "furlan",
-          "fur"
-      ],
       [
           "Western Frisian",
           "Frysk",
           "fy"
       ],
-      [
-          "Irish",
-          "Gaeilge",
-          "ga"
-      ],
-      [
-          "Gagauz",
-          "Gagauz",
-          "gag"
-      ],
-      [
-          "Gan Chinese",
-          "贛語",
-          "gan"
-      ],
-      [
-          "Scottish Gaelic",
-          "Gàidhlig",
-          "gd"
-      ],
       [
           "Galician",
           "galego",
           "gl"
       ],
-      [
-          "Gilaki",
-          "گیلکی",
-          "glk"
-      ],
-      [
-          "Guarani",
-          "Avañe'ẽ",
-          "gn"
-      ],
-      [
-          "Goan Konkani",
-          "गोंयची कोंकणी / Gõychi Konknni",
-          "gom"
-      ],
-      [
-          "Gothic",
-          "𐌲𐌿𐍄𐌹𐍃𐌺",
-          "got"
-      ],
-      [
-          "Gujarati",
-          "ગુજરાતી",
-          "gu"
-      ],
-      [
-          "Manx",
-          "Gaelg",
-          "gv"
-      ],
-      [
-          "Hausa",
-          "Hausa",
-          "ha"
-      ],
-      [
-          "Hakka Chinese",
-          "客家語/Hak-kâ-ngî",
-          "hak"
-      ],
-      [
-          "Hawaiian",
-          "Hawaiʻi",
-          "haw"
-      ],
       [
           "Hebrew",
           "עברית",
           "हिन्दी",
           "hi"
       ],
-      [
-          "Fiji Hindi",
-          "Fiji Hindi",
-          "hif"
-      ],
       [
           "Croatian",
           "hrvatski",
           "hr"
       ],
-      [
-          "Upper Sorbian",
-          "hornjoserbsce",
-          "hsb"
-      ],
-      [
-          "Haitian Creole",
-          "Kreyòl ayisyen",
-          "ht"
-      ],
       [
           "Hungarian",
           "magyar",
           "Bahasa Indonesia",
           "id"
       ],
-      [
-          "Interlingue",
-          "Interlingue",
-          "ie"
-      ],
-      [
-          "Igbo",
-          "Igbo",
-          "ig"
-      ],
-      [
-          "Inupiaq",
-          "Iñupiak",
-          "ik"
-      ],
-      [
-          "Iloko",
-          "Ilokano",
-          "ilo"
-      ],
-      [
-          "Ido",
-          "Ido",
-          "io"
-      ],
       [
           "Icelandic",
           "íslenska",
           "italiano",
           "it"
       ],
-      [
-          "Inuktitut",
-          "ᐃᓄᒃᑎᑐᑦ/inuktitut",
-          "iu"
-      ],
       [
           "Japanese",
           "日本語",
           "ja"
       ],
-      [
-          "Jamaican Creole English",
-          "Patois",
-          "jam"
-      ],
-      [
-          "Lojban",
-          "la .lojban.",
-          "jbo"
-      ],
-      [
-          "Javanese",
-          "Basa Jawa",
-          "jv"
-      ],
       [
           "Georgian",
           "ქართული",
           "ka"
       ],
-      [
-          "Kara-Kalpak",
-          "Qaraqalpaqsha",
-          "kaa"
-      ],
-      [
-          "Kabyle",
-          "Taqbaylit",
-          "kab"
-      ],
-      [
-          "Kabardian",
-          "Адыгэбзэ",
-          "kbd"
-      ],
-      [
-          "Kongo",
-          "Kongo",
-          "kg"
-      ],
-      [
-          "Kikuyu",
-          "Gĩkũyũ",
-          "ki"
-      ],
       [
           "Kazakh",
           "қазақша",
           "kk"
       ],
-      [
-          "Kalaallisut",
-          "kalaallisut",
-          "kl"
-      ],
       [
           "Khmer",
           "ភាសាខ្មែរ",
           "km"
       ],
-      [
-          "Kannada",
-          "ಕನ್ನಡ",
-          "kn"
-      ],
       [
           "Korean",
           "한국어",
           "ko"
       ],
-      [
-          "Komi-Permyak",
-          "Перем Коми",
-          "koi"
-      ],
-      [
-          "Karachay-Balkar",
-          "къарачай-малкъар",
-          "krc"
-      ],
-      [
-          "Kashmiri",
-          "कॉशुर / کٲشُر",
-          "ks"
-      ],
-      [
-          "Colognian",
-          "Ripoarisch",
-          "ksh"
-      ],
       [
           "Kurdish",
           "Kurdî",
           "ku"
       ],
-      [
-          "Komi",
-          "коми",
-          "kv"
-      ],
-      [
-          "Cornish",
-          "kernowek",
-          "kw"
-      ],
       [
           "Kyrgyz",
           "Кыргызча",
           "la"
       ],
       [
-          "Ladino",
-          "Ladino",
-          "lad"
+          "Limburgish",
+          "Limburgs",
+          "li"
       ],
       [
-          "Luxembourgish",
-          "Lëtzebuergesch",
-          "lb"
+          "Lithuanian",
+          "lietuvių",
+          "lt"
       ],
       [
-          "лакку",
-          "лакку",
-          "lbe"
+          "Malagasy",
+          "Malagasy",
+          "mg"
       ],
       [
-          "Lezghian",
-          "лезги",
-          "lez"
+          "Macedonian",
+          "македонÑ\81ки",
+          "mk"
       ],
       [
-          "Ganda",
-          "Luganda",
-          "lg"
+          "Malayalam",
+          "മലയാളം",
+          "ml"
       ],
       [
-          "Limburgish",
-          "Limburgs",
-          "li"
+          "Marathi",
+          "मराठी",
+          "mr"
       ],
       [
-          "Ligurian",
-          "Ligure",
-          "lij"
-      ],
-      [
-          "Lombard",
-          "lumbaart",
-          "lmo"
+          "Malay",
+          "Bahasa Melayu",
+          "ms"
       ],
       [
-          "Lingala",
-          "lingála",
-          "ln"
+          "Nepali",
+          "नेपाली",
+          "ne"
       ],
       [
-          "Lao",
-          "ລາວ",
-          "lo"
+          "Dutch",
+          "Nederlands",
+          "nl"
       ],
       [
-          "Northern Luri",
-          "لۊری شومالی",
-          "lrc"
+          "Norwegian",
+          "norsk bokmål",
+          "no"
       ],
       [
-          "Lithuanian",
-          "lietuvių",
-          "lt"
+          "Occitan",
+          "occitan",
+          "oc"
       ],
       [
-          "Latgalian",
-          "latgaļu",
-          "ltg"
+          "Punjabi",
+          "ਪੰਜਾਬੀ",
+          "pa"
       ],
       [
-          "Latvian",
-          "latviešu",
-          "lv"
+          "Polish",
+          "polski",
+          "pl"
       ],
       [
-          "Maithili",
-          "मैथिली",
-          "mai"
+          "Portuguese",
+          "português",
+          "pt"
       ],
       [
-          "Basa Banyumasan",
-          "Basa Banyumasan",
-          "map-bms"
+          "Romanian",
+          "română",
+          "ro"
       ],
       [
-          "Moksha",
-          "мокшень",
-          "mdf"
+          "Russian",
+          "русский",
+          "ru"
       ],
       [
-          "Malagasy",
-          "Malagasy",
-          "mg"
+          "Sanskrit",
+          "संस्कृतम्",
+          "sa"
       ],
       [
-          "Eastern Mari",
-          "олык марий",
-          "mhr"
+          "Sinhala",
+          "සිංහල",
+          "si"
       ],
       [
-          "Maori",
-          "Māori",
-          "mi"
+          "Slovak",
+          "slovenčina",
+          "sk"
       ],
       [
-          "Minangkabau",
-          "Baso Minangkabau",
-          "min"
+          "Slovenian",
+          "slovenščina",
+          "sl"
       ],
       [
-          "Macedonian",
-          "македонски",
-          "mk"
+          "Albanian",
+          "shqip",
+          "sq"
       ],
       [
-          "Malayalam",
-          "മലയാളം",
-          "ml"
+          "Serbian",
+          "српски / srpski",
+          "sr"
       ],
       [
-          "Mongolian",
-          "монгол",
-          "mn"
+          "Swedish",
+          "svenska",
+          "sv"
       ],
       [
-          "Marathi",
-          "मराठà¥\80",
-          "mr"
+          "Tamil",
+          "தமிழà¯\8d",
+          "ta"
       ],
       [
-          "Western Mari",
-          "кырык мары",
-          "mrj"
+          "Telugu",
+          "తెలుగు",
+          "te"
       ],
       [
-          "Malay",
-          "Bahasa Melayu",
-          "ms"
+          "Tajik",
+          "тоҷикӣ",
+          "tg"
       ],
       [
-          "Maltese",
-          "Malti",
-          "mt"
+          "Thai",
+          "ไทย",
+          "th"
       ],
       [
-          "Mirandese",
-          "Mirandés",
-          "mwl"
+          "Tagalog",
+          "Tagalog",
+          "tl"
       ],
       [
-          "Burmese",
-          "မြန်မာဘာသာ",
-          "my"
+          "Turkish",
+          "Türkçe",
+          "tr"
       ],
       [
-          "Erzya",
-          "Ñ\8dÑ\80зÑ\8fнÑ\8c",
-          "myv"
+          "Tatar",
+          "Ñ\82аÑ\82аÑ\80Ñ\87а/tatarça",
+          "tt"
       ],
       [
-          "Mazanderani",
-          "مازِرونی",
-          "mzn"
+          "Ukrainian",
+          "українська",
+          "uk"
       ],
       [
-          "Nauru",
-          "Dorerin Naoero",
-          "na"
+          "Urdu",
+          "اردو",
+          "ur"
       ],
       [
-          "Nāhuatl",
-          "Nāhuatl",
-          "nah"
+          "Vietnamese",
+          "Tiếng Việt",
+          "vi"
       ],
       [
-          "Neapolitan",
-          "Napulitano",
-          "nap"
-      ],
+          "Chinese",
+          "中文",
+          "zh"
+      ]
+  ];
+
+  var wikibooks$1 = /*#__PURE__*/Object.freeze({
+    default: wikibooks
+  });
+
+  var wikinews = [
       [
-          "Low German",
-          "Plattdüütsch",
-          "nds"
+          "Arabic",
+          "العربية",
+          "ar"
       ],
       [
-          "Low Saxon",
-          "Nedersaksies",
-          "nds-nl"
+          "Bulgarian",
+          "български",
+          "bg"
       ],
       [
-          "Nepali",
-          "नेपाली",
-          "ne"
+          "Bosnian",
+          "bosanski",
+          "bs"
       ],
       [
-          "Newari",
-          "नेपाल भाषा",
-          "new"
+          "Catalan",
+          "català",
+          "ca"
       ],
       [
-          "Dutch",
-          "Nederlands",
-          "nl"
+          "Czech",
+          "čeština",
+          "cs"
       ],
       [
-          "Norwegian Nynorsk",
-          "norsk nynorsk",
-          "nn"
+          "German",
+          "Deutsch",
+          "de"
       ],
       [
-          "Norwegian",
-          "norsk bokmål",
-          "no"
+          "Greek",
+          "Ελληνικά",
+          "el"
       ],
       [
-          "Novial",
-          "Novial",
-          "nov"
+          "English",
+          "English",
+          "en"
       ],
       [
-          "Nouormand",
-          "Nouormand",
-          "nrm"
+          "Esperanto",
+          "Esperanto",
+          "eo"
       ],
       [
-          "Northern Sotho",
-          "Sesotho sa Leboa",
-          "nso"
+          "Spanish",
+          "español",
+          "es"
       ],
       [
-          "Navajo",
-          "Diné bizaad",
-          "nv"
+          "Persian",
+          "فارسی",
+          "fa"
       ],
       [
-          "Nyanja",
-          "Chi-Chewa",
-          "ny"
+          "Finnish",
+          "suomi",
+          "fi"
       ],
       [
-          "Occitan",
-          "occitan",
-          "oc"
+          "French",
+          "français",
+          "fr"
       ],
       [
-          "Livvi-Karelian",
-          "Livvinkarjala",
-          "olo"
+          "Hebrew",
+          "עברית",
+          "he"
       ],
       [
-          "Oromo",
-          "Oromoo",
-          "om"
+          "Italian",
+          "italiano",
+          "it"
       ],
       [
-          "Odia",
-          "ଓଡ଼ିଆ",
-          "or"
+          "Japanese",
+          "日本語",
+          "ja"
       ],
       [
-          "Ossetic",
-          "Ирон",
-          "os"
+          "Korean",
+          "한국어",
+          "ko"
       ],
       [
-          "Punjabi",
-          "ਪੰਜਾਬੀ",
-          "pa"
+          "Norwegian",
+          "norsk bokmål",
+          "no"
       ],
       [
-          "Pangasinan",
-          "Pangasinan",
-          "pag"
+          "Polish",
+          "polski",
+          "pl"
       ],
       [
-          "Pampanga",
-          "Kapampangan",
-          "pam"
+          "Portuguese",
+          "português",
+          "pt"
       ],
       [
-          "Papiamento",
-          "Papiamentu",
-          "pap"
+          "Romanian",
+          "română",
+          "ro"
       ],
       [
-          "Picard",
-          "Picard",
-          "pcd"
+          "Russian",
+          "русский",
+          "ru"
       ],
       [
-          "Pennsylvania German",
-          "Deitsch",
-          "pdc"
+          "Albanian",
+          "shqip",
+          "sq"
       ],
       [
-          "Palatine German",
-          "Pälzisch",
-          "pfl"
+          "Serbian",
+          "српски / srpski",
+          "sr"
       ],
       [
-          "Pali",
-          "पालि",
-          "pi"
+          "Swedish",
+          "svenska",
+          "sv"
       ],
       [
-          "Norfuk / Pitkern",
-          "Norfuk / Pitkern",
-          "pih"
+          "Tamil",
+          "தமிழ்",
+          "ta"
       ],
       [
-          "Polish",
-          "polski",
-          "pl"
+          "Turkish",
+          "Türkçe",
+          "tr"
       ],
       [
-          "Piedmontese",
-          "Piemontèis",
-          "pms"
+          "Ukrainian",
+          "українська",
+          "uk"
       ],
       [
-          "Western Punjabi",
-          "پنجابی",
-          "pnb"
-      ],
+          "Chinese",
+          "中文",
+          "zh"
+      ]
+  ];
+
+  var wikinews$1 = /*#__PURE__*/Object.freeze({
+    default: wikinews
+  });
+
+  var wikiquote = [
       [
-          "Pontic",
-          "Ποντιακά",
-          "pnt"
+          "Afrikaans",
+          "Afrikaans",
+          "af"
       ],
       [
-          "Pashto",
-          "پښتو",
-          "ps"
+          "Arabic",
+          "العربية",
+          "ar"
       ],
       [
-          "Portuguese",
-          "português",
-          "pt"
+          "Azerbaijani",
+          "azərbaycanca",
+          "az"
       ],
       [
-          "Quechua",
-          "Runa Simi",
-          "qu"
+          "Belarusian",
+          "беларуская",
+          "be"
       ],
       [
-          "Romansh",
-          "rumantsch",
-          "rm"
+          "Bulgarian",
+          "български",
+          "bg"
       ],
       [
-          "Romani",
-          "Romani",
-          "rmy"
+          "Breton",
+          "brezhoneg",
+          "br"
       ],
       [
-          "Rundi",
-          "Kirundi",
-          "rn"
+          "Bosnian",
+          "bosanski",
+          "bs"
       ],
       [
-          "Romanian",
-          "română",
-          "ro"
+          "Catalan",
+          "català",
+          "ca"
       ],
       [
-          "Aromanian",
-          "armãneashti",
-          "roa-rup"
+          "Czech",
+          "čeština",
+          "cs"
       ],
       [
-          "tarandíne",
-          "tarandíne",
-          "roa-tara"
+          "Welsh",
+          "Cymraeg",
+          "cy"
       ],
       [
-          "Russian",
-          "русский",
-          "ru"
+          "Danish",
+          "dansk",
+          "da"
       ],
       [
-          "Rusyn",
-          "русиньскый",
-          "rue"
+          "German",
+          "Deutsch",
+          "de"
       ],
       [
-          "Kinyarwanda",
-          "Kinyarwanda",
-          "rw"
+          "Greek",
+          "Ελληνικά",
+          "el"
       ],
       [
-          "Sanskrit",
-          "संस्कृतम्",
-          "sa"
+          "English",
+          "English",
+          "en"
       ],
       [
-          "Sakha",
-          "саха тыла",
-          "sah"
+          "Esperanto",
+          "Esperanto",
+          "eo"
       ],
       [
-          "Sardinian",
-          "sardu",
-          "sc"
+          "Spanish",
+          "español",
+          "es"
       ],
       [
-          "Sicilian",
-          "sicilianu",
-          "scn"
+          "Estonian",
+          "eesti",
+          "et"
       ],
       [
-          "Scots",
-          "Scots",
-          "sco"
+          "Basque",
+          "euskara",
+          "eu"
       ],
       [
-          "Sindhi",
-          "سنڌي",
-          "sd"
+          "Persian",
+          "فارسی",
+          "fa"
       ],
       [
-          "Northern Sami",
-          "sámegiella",
-          "se"
+          "Finnish",
+          "suomi",
+          "fi"
       ],
       [
-          "Sango",
-          "Sängö",
-          "sg"
+          "French",
+          "français",
+          "fr"
       ],
       [
-          "Serbo-Croatian",
-          "srpskohrvatski / српскохрватски",
-          "sh"
+          "Galician",
+          "galego",
+          "gl"
       ],
       [
-          "Sinhala",
-          "à·\83à·\92à¶\82à·\84ල",
-          "si"
+          "Gujarati",
+          "àª\97à«\81àª\9cરાતà«\80",
+          "gu"
       ],
       [
-          "Simple English",
-          "Simple English",
-          "simple"
+          "Hebrew",
+          "עברית",
+          "he"
       ],
       [
-          "Slovak",
-          "slovenčina",
-          "sk"
+          "Hindi",
+          "हिन्दी",
+          "hi"
       ],
       [
-          "Slovenian",
-          "slovenščina",
-          "sl"
+          "Croatian",
+          "hrvatski",
+          "hr"
       ],
       [
-          "Samoan",
-          "Gagana Samoa",
-          "sm"
+          "Hungarian",
+          "magyar",
+          "hu"
       ],
       [
-          "Shona",
-          "chiShona",
-          "sn"
+          "Armenian",
+          "Հայերեն",
+          "hy"
       ],
       [
-          "Somali",
-          "Soomaaliga",
-          "so"
+          "Indonesian",
+          "Bahasa Indonesia",
+          "id"
       ],
       [
-          "Albanian",
-          "shqip",
-          "sq"
+          "Icelandic",
+          "íslenska",
+          "is"
       ],
       [
-          "Serbian",
-          "српски / srpski",
-          "sr"
+          "Italian",
+          "italiano",
+          "it"
       ],
       [
-          "Sranan Tongo",
-          "Sranantongo",
-          "srn"
+          "Japanese",
+          "日本語",
+          "ja"
       ],
       [
-          "Swati",
-          "SiSwati",
-          "ss"
+          "Georgian",
+          "ქართული",
+          "ka"
       ],
       [
-          "Southern Sotho",
-          "Sesotho",
-          "st"
+          "Kannada",
+          "ಕನ್ನಡ",
+          "kn"
       ],
       [
-          "Saterland Frisian",
-          "Seeltersk",
-          "stq"
+          "Korean",
+          "한국어",
+          "ko"
       ],
       [
-          "Sundanese",
-          "Basa Sunda",
-          "su"
+          "Kurdish",
+          "Kurdî",
+          "ku"
       ],
       [
-          "Swedish",
-          "svenska",
-          "sv"
+          "Kyrgyz",
+          "Кыргызча",
+          "ky"
       ],
       [
-          "Swahili",
-          "Kiswahili",
-          "sw"
+          "Latin",
+          "Latina",
+          "la"
       ],
       [
-          "Silesian",
-          "ślůnski",
-          "szl"
+          "Limburgish",
+          "Limburgs",
+          "li"
       ],
       [
-          "Tamil",
-          "தமிழ்",
-          "ta"
+          "Lithuanian",
+          "lietuvių",
+          "lt"
       ],
       [
-          "Tulu",
-          "ತà³\81ಳà³\81",
-          "tcy"
+          "Malayalam",
+          "മലയാളà´\82",
+          "ml"
       ],
       [
-          "Telugu",
-          "à°¤à±\86à°²à±\81à°\97à±\81",
-          "te"
+          "Marathi",
+          "मराठà¥\80",
+          "mr"
       ],
       [
-          "Tetum",
-          "tetun",
-          "tet"
+          "Dutch",
+          "Nederlands",
+          "nl"
       ],
       [
-          "Tajik",
-          "тоҷикӣ",
-          "tg"
+          "Norwegian Nynorsk",
+          "norsk nynorsk",
+          "nn"
       ],
       [
-          "Thai",
-          "ไทย",
-          "th"
+          "Norwegian",
+          "norsk bokmål",
+          "no"
       ],
       [
-          "Tigrinya",
-          "ትግርኛ",
-          "ti"
+          "Polish",
+          "polski",
+          "pl"
       ],
       [
-          "Turkmen",
-          "Türkmençe",
-          "tk"
+          "Portuguese",
+          "português",
+          "pt"
       ],
       [
-          "Tagalog",
-          "Tagalog",
-          "tl"
+          "Romanian",
+          "română",
+          "ro"
       ],
       [
-          "Tswana",
-          "Setswana",
-          "tn"
+          "Russian",
+          "русский",
+          "ru"
       ],
       [
-          "Tongan",
-          "lea faka-Tonga",
-          "to"
+          "Sanskrit",
+          "संस्कृतम्",
+          "sa"
       ],
       [
-          "Tok Pisin",
-          "Tok Pisin",
-          "tpi"
+          "Slovak",
+          "slovenčina",
+          "sk"
       ],
       [
-          "Turkish",
-          "Türkçe",
-          "tr"
+          "Slovenian",
+          "slovenščina",
+          "sl"
       ],
       [
-          "Tsonga",
-          "Xitsonga",
-          "ts"
+          "Albanian",
+          "shqip",
+          "sq"
       ],
       [
-          "Tatar",
-          "Ñ\82аÑ\82аÑ\80Ñ\87а/tatarça",
-          "tt"
+          "Serbian",
+          "Ñ\81Ñ\80пÑ\81ки / srpski",
+          "sr"
       ],
       [
-          "Tumbuka",
-          "chiTumbuka",
-          "tum"
+          "Sundanese",
+          "Basa Sunda",
+          "su"
       ],
       [
-          "Twi",
-          "Twi",
-          "tw"
+          "Swedish",
+          "svenska",
+          "sv"
       ],
       [
-          "Tahitian",
-          "reo tahiti",
-          "ty"
+          "Tamil",
+          "தமிழ்",
+          "ta"
       ],
       [
-          "Tuvinian",
-          "тыва дыл",
-          "tyv"
+          "Telugu",
+          "తెలుగు",
+          "te"
       ],
       [
-          "Udmurt",
-          "удмурт",
-          "udm"
+          "Thai",
+          "ไทย",
+          "th"
       ],
       [
-          "Uyghur",
-          "ئۇيغۇرچە / Uyghurche",
-          "ug"
+          "Turkish",
+          "Türkçe",
+          "tr"
       ],
       [
           "Ukrainian",
           "uz"
       ],
       [
-          "Venda",
-          "Tshivenda",
-          "ve"
+          "Vietnamese",
+          "Tiếng Việt",
+          "vi"
       ],
       [
-          "Venetian",
-          "vèneto",
-          "vec"
+          "Wolof",
+          "Wolof",
+          "wo"
       ],
       [
-          "Veps",
-          "vepsän kel’",
-          "vep"
+          "Chinese",
+          "中文",
+          "zh"
+      ]
+  ];
+
+  var wikiquote$1 = /*#__PURE__*/Object.freeze({
+    default: wikiquote
+  });
+
+  var wikiversity = [
+      [
+          "Arabic",
+          "العربية",
+          "ar"
       ],
       [
-          "Vietnamese",
-          "Tiếng Việt",
-          "vi"
+          "Czech",
+          "čeština",
+          "cs"
       ],
       [
-          "West Flemish",
-          "West-Vlams",
-          "vls"
+          "German",
+          "Deutsch",
+          "de"
       ],
       [
-          "Volapük",
-          "Volapük",
-          "vo"
+          "Greek",
+          "Ελληνικά",
+          "el"
       ],
       [
-          "Walloon",
-          "walon",
-          "wa"
+          "English",
+          "English",
+          "en"
       ],
       [
-          "Waray",
-          "Winaray",
-          "war"
+          "Spanish",
+          "español",
+          "es"
       ],
       [
-          "Wolof",
-          "Wolof",
-          "wo"
+          "Finnish",
+          "suomi",
+          "fi"
       ],
       [
-          "Wu Chinese",
-          "吴语",
-          "wuu"
+          "French",
+          "français",
+          "fr"
       ],
       [
-          "Kalmyk",
-          "хальмг",
-          "xal"
+          "Italian",
+          "italiano",
+          "it"
       ],
       [
-          "Xhosa",
-          "isiXhosa",
-          "xh"
+          "Japanese",
+          "日本語",
+          "ja"
       ],
       [
-          "Mingrelian",
-          "მარგალური",
-          "xmf"
+          "Korean",
+          "한국어",
+          "ko"
       ],
       [
-          "Yiddish",
-          "ייִדיש",
-          "yi"
+          "Portuguese",
+          "português",
+          "pt"
       ],
       [
-          "Yoruba",
-          "Yorùbá",
-          "yo"
+          "Russian",
+          "русский",
+          "ru"
       ],
       [
-          "Zhuang",
-          "Vahcuengh",
-          "za"
+          "Slovenian",
+          "slovenščina",
+          "sl"
       ],
       [
-          "Zeelandic",
-          "Zeêuws",
-          "zea"
+          "Swedish",
+          "svenska",
+          "sv"
+      ]
+  ];
+
+  var wikiversity$1 = /*#__PURE__*/Object.freeze({
+    default: wikiversity
+  });
+
+  var wikivoyage = [
+      [
+          "German",
+          "Deutsch",
+          "de"
       ],
       [
-          "Chinese",
-          "中文",
-          "zh"
+          "Greek",
+          "Ελληνικά",
+          "el"
       ],
       [
-          "Classical Chinese",
-          "文言",
-          "zh-classical"
+          "English",
+          "English",
+          "en"
       ],
       [
-          "Chinese (Min Nan)",
-          "Bân-lâm-gú",
-          "zh-min-nan"
+          "Spanish",
+          "español",
+          "es"
       ],
       [
-          "Cantonese",
-          "粵語",
-          "zh-yue"
+          "Persian",
+          "فارسی",
+          "fa"
       ],
       [
-          "Zulu",
-          "isiZulu",
-          "zu"
+          "Finnish",
+          "suomi",
+          "fi"
+      ],
+      [
+          "French",
+          "français",
+          "fr"
+      ],
+      [
+          "Hebrew",
+          "עברית",
+          "he"
+      ],
+      [
+          "Italian",
+          "italiano",
+          "it"
+      ],
+      [
+          "Dutch",
+          "Nederlands",
+          "nl"
+      ],
+      [
+          "Polish",
+          "polski",
+          "pl"
+      ],
+      [
+          "Portuguese",
+          "português",
+          "pt"
+      ],
+      [
+          "Romanian",
+          "română",
+          "ro"
+      ],
+      [
+          "Russian",
+          "русский",
+          "ru"
+      ],
+      [
+          "Swedish",
+          "svenska",
+          "sv"
+      ],
+      [
+          "Ukrainian",
+          "українська",
+          "uk"
+      ],
+      [
+          "Vietnamese",
+          "Tiếng Việt",
+          "vi"
+      ],
+      [
+          "Chinese",
+          "中文",
+          "zh"
       ]
   ];
 
-  var wikipedia$1 = /*#__PURE__*/Object.freeze({
-    default: wikipedia
+  var wikivoyage$1 = /*#__PURE__*/Object.freeze({
+    default: wikivoyage
   });
 
-  var require$$6 = ( wikipedia$1 && wikipedia ) || wikipedia$1;
-
-  var wikipedia$2 = require$$6;
-
-  var dataAddressFormats = [{format:[["housenumber","street"],["city","postcode"]]},{countryCodes:["au"],format:[["unit","housenumber","street"],["suburb","state","postcode"]]},{countryCodes:["gb"],format:[["housename"],["housenumber","street"],["city","postcode"]]},{countryCodes:["ie"],format:[["housename"],["housenumber","street"],["city"],["postcode"]]},{countryCodes:["at","ch","de","si","pl"],format:[["street","housenumber"],["postcode","city"]]},{countryCodes:["ad","ba","be","cz","dk","es","fi","gr","hr","is","it","li","nl","no","pt","se","sk","sm","va"],format:[["street","housenumber","unit"],["postcode","city"]]},{countryCodes:["fr","lu","mo"],format:[["housenumber","street"],["postcode","city"]]},{countryCodes:["br"],format:[["street"],["housenumber","suburb"],["city","postcode"]]},{countryCodes:["vn"],format:[["housenumber","street"],["subdistrict"],["district"],["city"],["province","postcode"]]},{countryCodes:["ca"],format:[["housenumber","street","unit"],["city","province","postcode"]]},{countryCodes:["us"],format:[["housenumber","street","unit"],["city","state","postcode"]]},{countryCodes:["tw"],format:[["postcode","city","district"],["place","street"],["housenumber","floor","unit"]]},{countryCodes:["jp"],format:[["postcode","province","county"],["city","suburb"],["quarter","neighbourhood"],["block_number","housenumber"]],dropdowns:["postcode","province","county","city","suburb","quarter","neighbourhood","block_number"],widths:{postcode:0.3,province:0.35,county:0.35,city:0.65,suburb:0.35,quarter:0.5,neighbourhood:0.5,block_number:0.5,housenumber:0.5}},{countryCodes:["tr"],format:[["neighbourhood"],["street","housenumber"],["postcode","district","city"]]},{countryCodes:["ua"],format:[["housenumber","postcode"],["street"]]},{countryCodes:["cn"],format:[["postcode","province"],["city","district"],["street","housenumber"]]}];
-
-  var dataDeprecated = [{old:{amenity:"firepit"},replace:{leisure:"firepit"}},{old:{barrier:"wire_fence"},replace:{barrier:"fence",fence_type:"chain"}},{old:{barrier:"wood_fence"},replace:{barrier:"fence",fence_type:"wood"}},{old:{highway:"ford"},replace:{ford:"yes"}},{old:{highway:"stile"},replace:{barrier:"stile"}},{old:{highway:"incline"},replace:{highway:"road",incline:"up"}},{old:{highway:"incline_steep"},replace:{highway:"road",incline:"up"}},{old:{highway:"unsurfaced"},replace:{highway:"road",incline:"unpaved"}},{old:{landuse:"wood"},replace:{landuse:"forest",natural:"wood"}},{old:{natural:"marsh"},replace:{natural:"wetland",wetland:"marsh"}},{old:{power_source:"*"},replace:{"generator:source":"$1"}},{old:{power_rating:"*"},replace:{"generator:output":"$1"}},{old:{shop:"organic"},replace:{shop:"supermarket",organic:"only"}}];
-
-  var dataDiscarded = {created_by:true,odbl:true,"odbl:note":true,"tiger:upload_uuid":true,"tiger:tlid":true,"tiger:source":true,"tiger:separated":true,"geobase:datasetName":true,"geobase:uuid":true,"sub_sea:type":true,"KSJ2:ADS":true,"KSJ2:ARE":true,"KSJ2:AdminArea":true,"KSJ2:COP_label":true,"KSJ2:DFD":true,"KSJ2:INT":true,"KSJ2:INT_label":true,"KSJ2:LOC":true,"KSJ2:LPN":true,"KSJ2:OPC":true,"KSJ2:PubFacAdmin":true,"KSJ2:RAC":true,"KSJ2:RAC_label":true,"KSJ2:RIC":true,"KSJ2:RIN":true,"KSJ2:WSC":true,"KSJ2:coordinate":true,"KSJ2:curve_id":true,"KSJ2:curve_type":true,"KSJ2:filename":true,"KSJ2:lake_id":true,"KSJ2:lat":true,"KSJ2:long":true,"KSJ2:river_id":true,"SK53_bulk:load":true,"yh:LINE_NAME":true,"yh:LINE_NUM":true,"yh:STRUCTURE":true,"yh:TOTYUMONO":true,"yh:TYPE":true,"yh:WIDTH":true,"yh:WIDTH_RANK":true};
-
-  var dataLocales = {af:{rtl:false},ar:{rtl:true},"ar-AA":{rtl:true},ast:{rtl:false},be:{rtl:false},bg:{rtl:false},bn:{rtl:false},bs:{rtl:false},ca:{rtl:false},ckb:{rtl:true},cs:{rtl:false},cy:{rtl:false},da:{rtl:false},de:{rtl:false},dv:{rtl:true},el:{rtl:false},"en-AU":{rtl:false},"en-GB":{rtl:false},eo:{rtl:false},es:{rtl:false},et:{rtl:false},eu:{rtl:false},fa:{rtl:true},fi:{rtl:false},fr:{rtl:false},gan:{rtl:false},gl:{rtl:false},gu:{rtl:false},he:{rtl:true},hi:{rtl:false},hr:{rtl:false},hu:{rtl:false},hy:{rtl:false},ia:{rtl:false},id:{rtl:false},is:{rtl:false},it:{rtl:false},ja:{rtl:false},jv:{rtl:false},km:{rtl:false},kn:{rtl:false},ko:{rtl:false},ku:{rtl:false},lij:{rtl:false},lt:{rtl:false},lv:{rtl:false},mg:{rtl:false},mk:{rtl:false},ml:{rtl:false},mn:{rtl:false},ms:{rtl:false},ne:{rtl:false},nl:{rtl:false},nn:{rtl:false},no:{rtl:false},nv:{rtl:false},pl:{rtl:false},pt:{rtl:false},"pt-BR":{rtl:false},rm:{rtl:false},ro:{rtl:false},ru:{rtl:false},sc:{rtl:false},si:{rtl:false},sk:{rtl:false},sl:{rtl:false},so:{rtl:false},sq:{rtl:false},sr:{rtl:false},sv:{rtl:false},ta:{rtl:false},te:{rtl:false},th:{rtl:false},tl:{rtl:false},tr:{rtl:false},uk:{rtl:false},ur:{rtl:true},vi:{rtl:false},yue:{rtl:false},zh:{rtl:false},"zh-CN":{rtl:false},"zh-HK":{rtl:false},"zh-TW":{rtl:false}};
-
-  var dataPhoneFormats = {ag:"+1-268-555-1234",ai:"+1-264-555-1234",as:"+1-684-555-1234",at:"+43 1 123 45 67",bb:"+1-246-555-1234",bj:"+229 20 12 34 56",bm:"+1-441-555-1234",br:"+55 11 0982 1098",bs:"+1-242-555-1234",ca:"+1-226-555-1234",ci:"+225 20 12 34 56",cn:"+86 10 12345678",de:"+49 89 1234567",dm:"+1-767-555-1234","do":"+1-809-555-1234",es:"+34 989 12 34 56",fi:"+358 40 123 4567",fr:"+33 1 23 45 67 89",gb:"+44 1632 961234",gd:"+1-473-555-1234",gg:"+44 1632 961234",gu:"+1-671-555-1234",hk:"+852 1234 5678",hr:"+385 01 123 4567",hu:"+36 1 123 45 67",ie:"+353 20 912 3456",im:"+44 1632 961234",it:"+39 01 123 456",je:"+44 1632 961234",jm:"+1-876-555-1234",kn:"+1-869-555-1234",ky:"+1-345-555-1234",kz:"+7 495 1234567",lc:"+1-758-555-1234",mp:"+1-670-555-1234",ms:"+1-664-555-1234",nl:"+31 42 123 4567",no:"+47 22 12 34 56",pl:"+48 42 123 4567",pr:"+1-787-555-1234",pt:"+351 211 123456",ru:"+7 495 1234567",se:"+46 31 123 4567",si:"+386 31 123 4567",sj:"+47 22 12 34 56",sx:"+1-721-555-1234",tc:"+1-649-555-1234",tr:"+90 312 123 4567",tt:"+1-868-555-1234",tw:"+886 1 2345 6789",ua:"+380 44 123 4567",us:"+1-202-555-1234",va:"+39 01 123 456",vc:"+1-784-555-1234",vg:"+1-284-555-1234",vi:"+1-340-555-1234",vn:"+84 1 234 5678",za:"+27 11 907 1111"};
-
-  var dataShortcuts = [{tab:"browsing",text:"shortcuts.browsing.title",columns:[{rows:[{section:"navigation",text:"shortcuts.browsing.navigation.title"},{shortcuts:["↓","↑","←","→"],text:"shortcuts.browsing.navigation.pan",separator:","},{modifiers:["⌘"],shortcuts:["↓","↑","←","→"],text:"shortcuts.browsing.navigation.pan_more",separator:","},{shortcuts:["+","-"],text:"shortcuts.browsing.navigation.zoom",separator:","},{modifiers:["⌘"],shortcuts:["+","-"],text:"shortcuts.browsing.navigation.zoom_more",separator:","},{section:"help",text:"shortcuts.browsing.help.title"},{shortcuts:["help.key"],text:"shortcuts.browsing.help.help"},{shortcuts:["shortcuts.toggle.key"],text:"shortcuts.browsing.help.keyboard"},{section:"display_options",text:"shortcuts.browsing.display_options.title"},{shortcuts:["background.key"],text:"shortcuts.browsing.display_options.background"},{modifiers:["⌘"],shortcuts:["background.key"],text:"shortcuts.browsing.display_options.background_switch"},{shortcuts:["map_data.key"],text:"shortcuts.browsing.display_options.map_data"},{modifiers:["⌃","⌘"],shortcuts:["F","F11"],text:"shortcuts.browsing.display_options.fullscreen"},{shortcuts:["sidebar.key"],text:"shortcuts.browsing.display_options.sidebar"},{shortcuts:["area_fill.wireframe.key"],text:"shortcuts.browsing.display_options.wireframe"},{shortcuts:["background.minimap.key"],text:"shortcuts.browsing.display_options.minimap"}]},{rows:[{section:"selecting",text:"shortcuts.browsing.selecting.title"},{shortcuts:["Left-click"],text:"shortcuts.browsing.selecting.select_one"},{modifiers:["⇧"],shortcuts:["Left-click"],text:"shortcuts.browsing.selecting.select_multi"},{modifiers:["⇧"],shortcuts:["Left-click"],gesture:"shortcuts.gesture.drag",text:"shortcuts.browsing.selecting.lasso"},{modifiers:["⌘"],shortcuts:["F"],text:"shortcuts.browsing.selecting.search"},{section:"with_selected",text:"shortcuts.browsing.with_selected.title"},{shortcuts:["Right-click","shortcuts.key.space"],text:"shortcuts.browsing.with_selected.edit_menu"},{shortcuts:[],text:""},{section:"vertex_selected",text:"shortcuts.browsing.vertex_selected.title"},{shortcuts:["[","↖"],text:"shortcuts.browsing.vertex_selected.previous"},{shortcuts:["]","↘"],text:"shortcuts.browsing.vertex_selected.next"},{shortcuts:["{","⇞"],text:"shortcuts.browsing.vertex_selected.first"},{shortcuts:["}","⇟"],text:"shortcuts.browsing.vertex_selected.last"},{shortcuts:["\\","shortcuts.key.pause"],text:"shortcuts.browsing.vertex_selected.change_parent"}]}]},{tab:"editing",text:"shortcuts.editing.title",columns:[{rows:[{section:"drawing",text:"shortcuts.editing.drawing.title"},{shortcuts:["1"],text:"shortcuts.editing.drawing.add_point"},{shortcuts:["2"],text:"shortcuts.editing.drawing.add_line"},{shortcuts:["3"],text:"shortcuts.editing.drawing.add_area"},{shortcuts:["4"],text:"shortcuts.editing.drawing.add_note"},{shortcuts:["Left-click","shortcuts.key.space"],text:"shortcuts.editing.drawing.place_point"},{shortcuts:["⌥"],text:"shortcuts.editing.drawing.disable_snap"},{shortcuts:["↵","⎋"],text:"shortcuts.editing.drawing.stop_line"},{section:"commands",text:"shortcuts.editing.commands.title"},{modifiers:["⌘"],shortcuts:["C"],text:"shortcuts.editing.commands.copy"},{modifiers:["⌘"],shortcuts:["V"],text:"shortcuts.editing.commands.paste"},{modifiers:["⌘"],shortcuts:["Z"],text:"shortcuts.editing.commands.undo"},{modifiers:["⌘","⇧"],shortcuts:["Z"],text:"shortcuts.editing.commands.redo"},{modifiers:["⌘"],shortcuts:["S"],text:"shortcuts.editing.commands.save"}]},{rows:[{section:"operations",text:"shortcuts.editing.operations.title"},{shortcuts:["operations.continue.key"],text:"shortcuts.editing.operations.continue_line"},{shortcuts:["operations.merge.key"],text:"shortcuts.editing.operations.merge"},{shortcuts:["operations.disconnect.key"],text:"shortcuts.editing.operations.disconnect"},{shortcuts:["operations.detach_node.key"],text:"shortcuts.editing.operations.detach_node"},{shortcuts:["operations.split.key"],text:"shortcuts.editing.operations.split"},{shortcuts:["operations.reverse.key"],text:"shortcuts.editing.operations.reverse"},{shortcuts:["operations.move.key"],text:"shortcuts.editing.operations.move"},{shortcuts:["operations.rotate.key"],text:"shortcuts.editing.operations.rotate"},{shortcuts:["operations.orthogonalize.key"],text:"shortcuts.editing.operations.orthogonalize"},{shortcuts:["operations.circularize.key"],text:"shortcuts.editing.operations.circularize"},{shortcuts:["operations.reflect.key.long"],text:"shortcuts.editing.operations.reflect_long"},{shortcuts:["operations.reflect.key.short"],text:"shortcuts.editing.operations.reflect_short"},{modifiers:["⌘"],shortcuts:["⌫"],text:"shortcuts.editing.operations.delete"}]}]},{tab:"tools",text:"shortcuts.tools.title",columns:[{rows:[{section:"info",text:"shortcuts.tools.info.title"},{modifiers:["⌘"],shortcuts:["info_panels.key"],text:"shortcuts.tools.info.all"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.background.key"],text:"shortcuts.tools.info.background"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.history.key"],text:"shortcuts.tools.info.history"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.location.key"],text:"shortcuts.tools.info.location"},{modifiers:["⌘","⇧"],shortcuts:["info_panels.measurement.key"],text:"shortcuts.tools.info.measurement"}]}]}];
-
-  var type$2 = "FeatureCollection";
-  var features = [{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[1.97754,51.13111],[1.8457,63.45051],[-10.45898,57.01681],[-6.82251,55.26503],[-7.25583,55.06525],[-7.26546,55.0665],[-7.26992,55.06419],[-7.2725,55.06346],[-7.27818,55.05362],[-7.2893,55.04735],[-7.29939,55.0561],[-7.31835,55.04475],[-7.3447,55.05079],[-7.38831,55.02389],[-7.40547,55.00292],[-7.39157,54.99507],[-7.40075,54.98892],[-7.40706,54.98291],[-7.40363,54.97963],[-7.40633,54.97813],[-7.39835,54.97013],[-7.40745,54.96357],[-7.40178,54.95961],[-7.40727,54.95515],[-7.3944,54.94376],[-7.44444,54.93858],[-7.45216,54.89793],[-7.44204,54.87532],[-7.4713,54.83431],[-7.48092,54.83093],[-7.49216,54.82185],[-7.55121,54.79054],[-7.5443,54.78609],[-7.54958,54.75653],[-7.5349,54.74917],[-7.54881,54.74068],[-7.55941,54.74556],[-7.57894,54.74221],[-7.57507,54.7494],[-7.58606,54.75039],[-7.58872,54.74377],[-7.60031,54.74603],[-7.60632,54.74405],[-7.61662,54.74459],[-7.63593,54.75108],[-7.68854,54.72968],[-7.72064,54.72155],[-7.75094,54.70469],[-7.79094,54.71942],[-7.8051,54.71932],[-7.83497,54.73632],[-7.85419,54.72745],[-7.91496,54.67582],[-7.90174,54.66182],[-7.83832,54.63401],[-7.7433,54.6188],[-7.70863,54.63485],[-7.70682,54.6189],[-7.69386,54.6188],[-7.69631,54.61125],[-7.75845,54.59509],[-7.78708,54.58],[-7.79446,54.58141],[-7.79969,54.57704],[-7.79673,54.56915],[-7.8184,54.56315],[-7.83334,54.55227],[-7.82737,54.54299],[-7.85007,54.53363],[-7.90741,54.53722],[-7.93213,54.53388],[-8.00487,54.54568],[-8.03727,54.51162],[-8.04285,54.48759],[-8.08027,54.48829],[-8.09988,54.48395],[-8.09126,54.4765],[-8.111,54.47807],[-8.11512,54.46904],[-8.16542,54.46914],[-8.1776,54.46485],[-8.14293,54.45003],[-8.16284,54.4413],[-8.08731,54.4002],[-8.06062,54.37051],[-8.03289,54.35711],[-8.00054,54.34835],[-7.93333,54.30561],[-7.85849,54.29151],[-7.87067,54.28794],[-7.87265,54.26648],[-7.86123,54.25931],[-7.85917,54.21256],[-7.71043,54.20307],[-7.70193,54.20776],[-7.68828,54.202],[-7.67644,54.18906],[-7.66082,54.1871],[-7.62554,54.16545],[-7.62541,54.15319],[-7.61026,54.14353],[-7.57421,54.14142],[-7.57181,54.13287],[-7.56228,54.12704],[-7.51379,54.12998],[-7.47944,54.122],[-7.47169,54.12665],[-7.47075,54.13318],[-7.44684,54.15168],[-7.40792,54.156],[-7.42579,54.14092],[-7.41903,54.13629],[-7.3744,54.14172],[-7.37234,54.13881],[-7.39509,54.12624],[-7.39182,54.12017],[-7.36341,54.13157],[-7.34518,54.11577],[-7.32471,54.12123],[-7.32003,54.11379],[-7.3078,54.11718],[-7.30548,54.12347],[-7.31591,54.12697],[-7.31213,54.13162],[-7.3187,54.13411],[-7.31857,54.13745],[-7.32222,54.13836],[-7.32737,54.13544],[-7.3399,54.14585],[-7.30827,54.16716],[-7.30024,54.16625],[-7.29029,54.1715],[-7.28158,54.16839],[-7.2863,54.14919],[-7.29874,54.14904],[-7.30162,54.14411],[-7.28411,54.13971],[-7.29192,54.13071],[-7.29737,54.133],[-7.30883,54.13242],[-7.30333,54.12251],[-7.29218,54.11929],[-7.27844,54.12282],[-7.27707,54.12986],[-7.26613,54.13624],[-7.2566,54.16354],[-7.24015,54.17125],[-7.2575,54.17678],[-7.2581,54.19257],[-7.25179,54.19403],[-7.23608,54.1935],[-7.23338,54.19792],[-7.24317,54.20076],[-7.24892,54.1977],[-7.25183,54.20201],[-7.24119,54.20623],[-7.23094,54.20578],[-7.23269,54.20912],[-7.22188,54.21607],[-7.20643,54.2117],[-7.18506,54.22485],[-7.17055,54.21742],[-7.14721,54.22488],[-7.14633,54.23008],[-7.15051,54.23165],[-7.14613,54.23983],[-7.15802,54.24434],[-7.13985,54.25298],[-7.15255,54.26235],[-7.16064,54.27405],[-7.17991,54.27144],[-7.17201,54.28627],[-7.21252,54.2985],[-7.19888,54.31117],[-7.17918,54.30946],[-7.1812,54.3397],[-7.15339,54.33514],[-7.10253,54.35811],[-7.10811,54.36677],[-7.06927,54.3899],[-7.05593,54.41056],[-7.02898,54.42135],[-7.00198,54.40832],[-6.98683,54.40829],[-6.97562,54.40014],[-6.96774,54.40145],[-6.90682,54.36966],[-6.89772,54.35075],[-6.87527,54.33853],[-6.86512,54.32568],[-6.85163,54.29137],[-6.87452,54.28677],[-6.87791,54.27918],[-6.86673,54.27522],[-6.85177,54.26489],[-6.83693,54.26658],[-6.82165,54.24346],[-6.81633,54.22299],[-6.80045,54.22108],[-6.80122,54.21338],[-6.77599,54.19965],[-6.75573,54.1987],[-6.74316,54.18258],[-6.73406,54.18566],[-6.72445,54.18127],[-6.70295,54.20036],[-6.69166,54.20018],[-6.68673,54.19398],[-6.669,54.19584],[-6.65248,54.18102],[-6.6433,54.17801],[-6.63467,54.16449],[-6.63179,54.14766],[-6.64081,54.14238],[-6.63935,54.13599],[-6.66149,54.1205],[-6.6481,54.10153],[-6.66119,54.0934],[-6.66458,54.06629],[-6.64681,54.05873],[-6.62501,54.03737],[-6.59291,54.04755],[-6.58905,54.05808],[-6.5597,54.0481],[-6.52897,54.05888],[-6.50442,54.05566],[-6.47824,54.07004],[-6.47919,54.07762],[-6.43601,54.05959],[-6.36314,54.07057],[-6.36589,54.09338],[-6.36293,54.09758],[-6.37104,54.11497],[-6.3522,54.11084],[-6.34242,54.1114],[-6.33589,54.10833],[-6.33636,54.09469],[-6.31808,54.09096],[-6.30903,54.10463],[-6.29165,54.11235],[-6.28246,54.11145],[-6.26272,54.09786],[-5.35583,53.72597],[-7.0752,49.23912],[-1.83472,49.02346],[-2.12036,49.94415],[1.97754,51.13111]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-65.2,18.7],[-65,16.3],[-63.7,19.2],[-65.2,18.7]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-63,-50.5],[-55,-51],[-60,-54],[-63,-50.5]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-139.19952,60.08402],[-141,60.30621],[-141,76],[-169,68.63655],[-169,65.20147],[-180,61],[-180,-4],[-154,9],[-133.76404,54.54021],[-130.73868,54.71986],[-129.96277,55.29163],[-130.15228,55.7758],[-130.01787,55.90688],[-130.00362,56.00798],[-130.10284,56.12336],[-130.24498,56.09656],[-130.42625,56.14249],[-131.87439,56.79787],[-135.02884,59.56285],[-135.11759,59.62306],[-135.15827,59.6261],[-135.47928,59.79822],[-136.28677,59.57955],[-136.30531,59.46462],[-136.36836,59.44898],[-136.47697,59.46558],[-137.19727,59.01935],[-139.19952,60.08402]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-111.96064,48.99841],[-121.22623,49.00049],[-122.26513,49.00246],[-122.7565,49.00208],[-123.32218,49.00218],[-122.97821,48.76524],[-123.2666,48.69821],[-123.21991,48.21186],[-125.80444,48.60749],[-124.32129,31.54109],[-117.125,32.53429],[-116.82417,32.55996],[-115.88036,32.63735],[-115.49738,32.66486],[-114.71984,32.71877],[-114.7649,32.64602],[-114.80885,32.60959],[-114.81481,32.49451],[-112.81743,31.88004],[-111.07481,31.33224],[-109.56051,31.33402],[-108.20847,31.33384],[-108.20838,31.78363],[-106.52847,31.78391],[-106.52781,31.78086],[-106.52249,31.77501],[-106.51249,31.76933],[-106.50988,31.7612],[-106.50709,31.76123],[-106.48896,31.74806],[-106.48473,31.74769],[-106.4719,31.75101],[-106.46816,31.75897],[-106.45434,31.76466],[-106.45035,31.76426],[-106.43516,31.75492],[-106.41484,31.75101],[-106.37864,31.73021],[-106.37225,31.71174],[-106.34924,31.69633],[-106.33289,31.66178],[-106.3068,31.62459],[-106.28079,31.56179],[-106.24775,31.54226],[-106.2329,31.49982],[-106.2105,31.46857],[-106.08201,31.39863],[-106.00554,31.39233],[-105.76401,31.17051],[-105.58548,31.06117],[-105.56419,30.98526],[-104.99153,30.6639],[-104.97162,30.60896],[-104.90639,30.57822],[-104.83772,30.38117],[-104.70177,30.20567],[-104.68048,29.92399],[-104.57611,29.77838],[-104.51157,29.63674],[-104.39758,29.57047],[-104.39278,29.55293],[-104.05769,29.32173],[-103.79883,29.2581],[-103.78196,29.26555],[-103.76759,29.22799],[-103.14102,28.93666],[-102.86087,29.2217],[-102.65076,29.79418],[-101.41068,29.73457],[-101.26511,29.51372],[-101.05997,29.452],[-101.04083,29.38038],[-100.96303,29.34735],[-100.94406,29.34369],[-100.94071,29.33351],[-100.92775,29.32663],[-100.89814,29.30957],[-100.87818,29.28086],[-100.80076,29.2238],[-100.76437,29.15981],[-100.67047,29.08663],[-100.6412,28.91299],[-100.63236,28.90255],[-100.61296,28.89939],[-100.534,28.75622],[-100.51495,28.74531],[-100.50705,28.7143],[-100.51203,28.70666],[-100.51014,28.69127],[-100.50048,28.66186],[-100.45547,28.6381],[-100.44697,28.60743],[-100.35599,28.45239],[-100.34946,28.39653],[-100.29488,28.31315],[-100.29591,28.27324],[-100.17197,28.17493],[-99.93645,27.9568],[-99.87722,27.80173],[-99.79671,27.73338],[-99.772,27.72532],[-99.74556,27.69979],[-99.71947,27.65981],[-99.5957,27.59974],[-99.54094,27.60537],[-99.53055,27.57973],[-99.52034,27.55782],[-99.52802,27.49773],[-99.50141,27.49986],[-99.48755,27.49518],[-99.47897,27.48421],[-99.48661,27.46453],[-99.49534,27.44861],[-99.48927,27.40941],[-99.53957,27.31565],[-99.43588,27.19678],[-99.46404,27.01968],[-99.16698,26.56039],[-99.17474,26.53939],[-99.12698,26.51958],[-99.1135,26.42954],[-99.08355,26.39625],[-99.06007,26.39737],[-99.03634,26.41255],[-99.02042,26.40598],[-99.01291,26.39364],[-98.95686,26.38641],[-98.9566,26.37365],[-98.94523,26.36949],[-98.90013,26.36419],[-98.89905,26.35454],[-98.80305,26.36626],[-98.78254,26.30511],[-98.66667,26.23457],[-98.58496,26.24647],[-98.57951,26.23434],[-98.56519,26.23987],[-98.56294,26.22464],[-98.50599,26.20858],[-98.44806,26.21236],[-98.38617,26.15721],[-98.34176,26.15278],[-98.33579,26.1388],[-98.30626,26.10003],[-98.28841,26.10512],[-98.26524,26.0914],[-98.19898,26.06411],[-98.09577,26.05698],[-98.07568,26.06667],[-98.08302,26.03396],[-97.9771,26.04136],[-97.9532,26.06179],[-97.81643,26.04475],[-97.77017,26.02439],[-97.73884,26.02902],[-97.5289,25.90648],[-97.52151,25.88625],[-97.50615,25.89031],[-97.49851,25.89903],[-97.49637,25.89641],[-97.49748,25.88008],[-97.49422,25.87981],[-97.48847,25.88564],[-97.46409,25.88174],[-97.42607,25.842],[-97.36856,25.8396],[-97.26231,25.94724],[-80.81543,24.00633],[-66.87378,44.77794],[-67.16148,45.16715],[-67.2286,45.16739],[-67.26246,45.18797],[-67.28311,45.19175],[-67.28959,45.18784],[-67.29332,45.17568],[-67.29049,45.17317],[-67.3001,45.16776],[-67.3025,45.16122],[-67.29761,45.14766],[-67.33975,45.1255],[-67.40524,45.16122],[-67.40387,45.17139],[-67.4818,45.27682],[-67.42172,45.38543],[-67.45262,45.41008],[-67.50498,45.4889],[-67.41623,45.50105],[-67.42219,45.55661],[-67.42902,45.56833],[-67.42331,45.57154],[-67.42498,45.57836],[-67.45193,45.60323],[-67.77981,45.6738],[-67.79019,47.06776],[-67.88006,47.1067],[-67.91319,47.14793],[-67.92598,47.15418],[-67.95181,47.1875],[-68.02374,47.23915],[-68.13017,47.29309],[-68.17669,47.32893],[-68.24046,47.35354],[-68.32809,47.36005],[-68.36363,47.35476],[-68.38054,47.34167],[-68.38509,47.30321],[-68.37367,47.28796],[-68.4377,47.28232],[-68.47916,47.29623],[-68.51074,47.29885],[-68.54593,47.28441],[-68.58408,47.28482],[-68.59777,47.27134],[-68.59271,47.25762],[-68.61889,47.24148],[-68.68936,47.24125],[-68.71768,47.23676],[-68.80128,47.21423],[-68.89629,47.17676],[-69.05354,47.24847],[-69.04924,47.41798],[-69.22425,47.45961],[-69.99729,46.69558],[-70.0569,46.4149],[-70.25551,46.10871],[-70.29001,46.09431],[-70.39919,45.80667],[-70.83229,45.40062],[-70.80794,45.37878],[-70.82663,45.2367],[-70.87538,45.23453],[-70.92138,45.28099],[-70.90645,45.30918],[-71.0109,45.34798],[-71.08429,45.30556],[-71.1454,45.24226],[-71.20525,45.25278],[-71.28925,45.30097],[-71.41405,45.23513],[-71.43044,45.12381],[-71.49692,45.06991],[-71.50623,45.04878],[-71.49284,45.03629],[-71.50027,45.01372],[-71.79359,45.01075],[-72.08774,45.00581],[-72.14155,45.00568],[-72.15282,45.00609],[-72.17142,45.00584],[-72.25847,45.00436],[-72.38795,45.00626],[-72.4496,45.00863],[-72.5356,45.00936],[-72.66257,45.01523],[-72.82537,45.01642],[-73.08466,45.01561],[-73.45219,45.00875],[-74.14699,44.99145],[-74.33753,44.9923],[-74.50786,44.99798],[-74.66158,44.99949],[-74.71244,44.99734],[-74.75887,44.98708],[-74.76368,45.00632],[-74.78977,45.00365],[-74.82376,45.01773],[-74.94186,44.98229],[-75.30098,44.83883],[-75.30304,44.82836],[-75.59418,44.6457],[-75.97269,44.33502],[-75.97295,44.34595],[-76.00059,44.34797],[-76.17645,44.2865],[-76.18744,44.22158],[-76.88782,43.82759],[-79.16851,43.32168],[-79.05487,43.25371],[-79.05092,43.169],[-79.04603,43.16093],[-79.04208,43.13942],[-79.07002,43.12038],[-79.06015,43.114],[-79.0568,43.10474],[-79.0774,43.07861],[-78.9996,43.05484],[-79.02311,43.02071],[-79.02552,42.99473],[-78.96235,42.9573],[-78.91188,42.9426],[-78.90398,42.89181],[-82.42767,41.47978],[-83.14316,42.03807],[-83.12805,42.23843],[-83.09715,42.29052],[-83.07252,42.31515],[-82.94575,42.34332],[-82.59676,42.5479],[-82.51368,42.61785],[-82.5108,42.66464],[-82.4675,42.76415],[-82.48055,42.80573],[-82.45497,42.9284],[-82.41334,42.97099],[-82.42596,42.99536],[-82.15851,43.39507],[-83.53729,46.098],[-83.96301,46.05036],[-84.11021,46.23851],[-84.09794,46.25656],[-84.11613,46.26878],[-84.11905,46.31516],[-84.10721,46.3218],[-84.14394,46.41076],[-84.11682,46.51576],[-84.13536,46.53218],[-84.16162,46.5284],[-84.21621,46.53891],[-84.26994,46.49189],[-84.36092,46.50997],[-84.55284,46.4407],[-84.95178,46.77185],[-89.59179,48.00307],[-89.67547,48.00371],[-90.87204,48.25943],[-91.41312,48.06753],[-92.99377,48.62474],[-93.34877,48.62604],[-93.35529,48.61124],[-93.37074,48.60584],[-93.39812,48.60369],[-93.40542,48.61089],[-93.43846,48.59478],[-93.46859,48.59205],[-93.45735,48.56667],[-93.46533,48.54593],[-93.64763,48.51751],[-93.80625,48.51888],[-93.80642,48.58047],[-93.83328,48.62582],[-93.84865,48.63064],[-93.93388,48.6326],[-94.01327,48.64471],[-94.16176,48.64697],[-94.25025,48.65463],[-94.24931,48.67827],[-94.26046,48.69816],[-94.30578,48.71073],[-94.32758,48.70433],[-94.36123,48.70478],[-94.38406,48.71135],[-94.41629,48.71067],[-94.44294,48.69266],[-94.53615,48.7024],[-94.55031,48.71419],[-94.58894,48.71928],[-94.69425,48.77938],[-94.70129,48.83376],[-94.68996,48.83953],[-94.68395,48.99914],[-111.96064,48.99841]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[180,55],[170,53],[180,49],[180,55]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[143,22],[147,22],[147,12],[143,12],[143,22]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-171.5,-10],[-171,-15],[-167,-15],[-171.5,-10]]]}}];
-  var dataImperial = {
-  type: type$2,
-  features: features
-  };
-
-  var type$3 = "FeatureCollection";
-  var features$1 = [{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[113.573,22.186],[114,22.5],[114.05534,22.503],[114.0595,22.51422],[114.07345,22.51934],[114.0786,22.53012],[114.08512,22.53228],[114.09034,22.53717],[114.09611,22.53486],[114.10602,22.53472],[114.1115,22.52929],[114.11522,22.5308],[114.11649,22.53418],[114.11979,22.53511],[114.1244,22.5393],[114.12729,22.53947],[114.13018,22.54132],[114.13807,22.5432],[114.14429,22.54176],[114.14441,22.54114],[114.14846,22.54179],[114.14855,22.54397],[114.15042,22.54593],[114.14964,22.54954],[114.15166,22.55168],[114.15192,22.55438],[114.15642,22.55495],[114.15841,22.55909],[114.16032,22.56153],[114.16162,22.56187],[114.1634,22.55931],[114.16553,22.5593],[114.16733,22.56119],[114.16934,22.56093],[114.17061,22.5597],[114.17702,22.56],[114.17798,22.55546],[114.18401,22.5552],[114.18673,22.55468],[114.1878,22.55545],[114.18979,22.55446],[114.1955,22.55564],[114.19674,22.55691],[114.20005,22.55717],[114.20376,22.55623],[114.20884,22.55672],[114.22438,22.55055],[114.2264,22.5476],[114.22545,22.54528],[114.22661,22.54339],[114.32,22.576],[114.45,22.43],[114.45,22.14],[113.9,22.14],[113.75,22.22],[113.553,22.095],[113.54678,22.1207],[113.5456,22.1207],[113.54076,22.12373],[113.54016,22.13618],[113.54701,22.13651],[113.5475,22.14583],[113.52456,22.17978],[113.53623,22.20191],[113.53299,22.21232],[113.53497,22.21351],[113.53735,22.21377],[113.54156,22.21315],[113.54385,22.21709],[113.55849,22.21565],[113.573,22.186]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-75,18],[-80,20.5],[-83,19],[-77,16],[-75,18]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-64.33594,32.86113],[-79.39819,27.21067],[-80.63965,23.71998],[-73.39966,20.40642],[-65.1709,19.20743],[-65.09399,16.23577],[-59.13391,16.80454],[-62.64404,15.16228],[-59.43054,14.85985],[-62.83081,13.64599],[-61.80359,10.73752],[-62.08649,10.04729],[-61.06201,9.85522],[-59.81369,8.31274],[-59.8027,8.27469],[-59.83498,8.22712],[-59.94141,8.21149],[-59.99771,8.15576],[-59.97986,8.13265],[-59.99771,8.12041],[-60.00183,8.07147],[-60.05127,8.02524],[-60.09933,8.03747],[-60.12268,8.02388],[-60.14053,7.98988],[-60.36163,7.83345],[-60.53467,7.81713],[-60.5896,7.6375],[-60.72144,7.54493],[-60.5896,7.31888],[-60.63904,7.24532],[-60.54703,7.12542],[-60.46875,7.20309],[-60.37262,7.18401],[-60.29984,7.1445],[-60.2916,7.06819],[-60.39871,6.95097],[-60.66513,6.83235],[-60.71869,6.75053],[-60.91232,6.81735],[-60.94254,6.72053],[-61.14441,6.72326],[-61.23093,6.5773],[-61.1554,6.45314],[-61.14441,6.20199],[-61.39709,5.95619],[-60.71045,5.20036],[-60.21606,5.23319],[-59.99634,5.06906],[-60.13916,4.51071],[-59.69971,4.40118],[-59.5459,3.93002],[-59.87549,3.56825],[-59.7876,3.37086],[-60.01831,2.83332],[-59.90845,2.38335],[-59.69971,2.2626],[-59.77661,1.87833],[-59.65302,1.85087],[-59.69147,1.75754],[-59.61456,1.71361],[-59.55139,1.73283],[-59.36188,1.49123],[-59.26575,1.39238],[-58.92242,1.30726],[-58.83728,1.17271],[-58.71918,1.23037],[-58.71094,1.29902],[-58.49121,1.26058],[-58.461,1.37591],[-58.50494,1.38689],[-58.51044,1.46102],[-58.38135,1.4775],[-58.32642,1.57359],[-58.00507,1.49946],[-57.99133,1.65321],[-57.79907,1.69165],[-57.70844,1.71087],[-57.54364,1.68341],[-57.41455,1.94421],[-57.10693,1.97715],[-56.8103,1.85636],[-56.48071,1.92225],[-55.90942,1.81244],[-55.90942,2.04302],[-56.14014,2.26534],[-55.94788,2.53701],[-55.70892,2.39981],[-55.37933,2.43274],[-55.19257,2.53976],[-54.98108,2.57268],[-54.88495,2.43548],[-54.71191,2.46293],[-54.69543,2.34767],[-54.58832,2.32846],[-54.43451,2.43548],[-54.20654,2.76748],[-54.17358,3.12955],[-53.96484,3.57921],[-54.33838,4.00674],[-54.44412,4.52577],[-54.46884,4.91036],[-54.36653,5.13061],[-54.27727,5.26191],[-54.19968,5.3084],[-54.01222,5.54457],[-54.0239,5.64605],[-53.86322,5.94936],[-64.33594,32.86113]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-14.5,-6],[11.79657,-17.27197],[12.03415,-17.14866],[12.38159,-17.22213],[12.58484,-17.22476],[13.01193,-16.97405],[13.24951,-17.00098],[13.38135,-16.98522],[13.93341,-17.38734],[18.42476,-17.38996],[18.47763,-17.46857],[18.62663,-17.64599],[18.79211,-17.76177],[18.92944,-17.82061],[19.33044,-17.84806],[19.66278,-17.8644],[19.74792,-17.90557],[19.85161,-17.87486],[20.10361,-17.90296],[20.18394,-17.88401],[20.34737,-17.88466],[20.44693,-17.91733],[20.51697,-17.96698],[20.83008,-18.03032],[20.95711,-17.97285],[21.16997,-17.93497],[21.42677,-18.0264],[23.45032,-17.63879],[22.00012,-16.38866],[21.99944,-13.00523],[24.03809,-12.99118],[24.03809,-10.91962],[24.43359,-11.09217],[24.45557,-11.48002],[25.37842,-11.19996],[25.42236,-11.60919],[26.96045,-11.97484],[27.18018,-11.60919],[28.125,-12.42048],[29.11377,-13.36824],[29.1687,-13.43771],[29.55872,-13.19716],[29.68506,-13.2239],[29.62463,-13.41099],[29.80591,-13.44305],[29.81415,-12.14809],[29.31152,-12.55456],[28.41064,-11.78133],[28.63037,-10.70379],[28.65234,-9.73071],[28.37219,-9.24309],[28.89748,-8.47916],[30.78644,-8.26857],[29.39941,-6.05316],[29.4873,-4.45595],[29.75922,-4.46759],[29.81415,-4.36421],[29.88007,-4.36832],[30.04074,-4.26699],[30.07919,-4.1629],[30.18356,-4.08311],[30.1918,-4.05126],[30.21566,-4.04595],[30.22923,-4.01136],[30.21326,-3.99612],[30.25978,-3.88755],[30.29274,-3.86288],[30.34424,-3.77245],[30.39848,-3.79095],[30.40878,-3.76765],[30.39548,-3.7304],[30.39054,-3.72821],[30.3896,-3.71918],[30.39093,-3.7101],[30.39514,-3.70444],[30.42028,-3.64963],[30.46886,-3.53501],[30.67108,-3.41335],[30.63297,-3.34892],[30.84206,-3.25535],[30.84549,-3.16108],[30.83485,-3.09698],[30.7933,-3.06235],[30.82111,-3.02258],[30.84515,-2.9739],[30.74764,-2.99618],[30.7037,-2.97013],[30.66422,-2.98967],[30.57632,-2.90738],[30.49393,-2.94441],[30.41016,-2.87172],[30.52002,-2.39432],[30.77545,-2.38883],[30.8606,-2.31199],[30.84961,-2.19398],[30.89081,-2.07322],[30.81116,-1.96068],[30.83862,-1.6587],[30.73425,-1.4418],[30.56259,-1.33884],[30.4541,-1.05737],[30.35797,-1.06287],[30.34149,-1.13152],[30.16571,-1.34296],[29.91852,-1.48024],[29.83887,-1.31824],[29.58344,-1.39238],[29.729,0.05493],[29.96796,0.5136],[29.9707,0.8569],[30.22339,0.92281],[30.24536,1.15349],[30.47745,1.20772],[31.30966,2.15693],[31.20255,2.22211],[31.20255,2.29278],[31.16409,2.27906],[31.13937,2.28318],[31.13113,2.26534],[31.07826,2.30033],[31.0714,2.34767],[31.00479,2.4005],[30.97183,2.40461],[30.94711,2.38746],[30.94849,2.36276],[30.9375,2.33532],[30.88531,2.34012],[30.83038,2.42176],[30.74112,2.43274],[30.76035,2.5864],[30.90179,2.88132],[30.76447,3.04178],[30.93613,3.40239],[30.94059,3.50588],[30.85236,3.48601],[30.90866,3.5936],[30.95055,3.63918],[30.94677,3.65391],[30.9866,3.70187],[31.00582,3.70701],[31.02058,3.69708],[31.16547,3.7954],[31.28838,3.79643],[31.52699,3.66282],[31.7038,3.72449],[31.82671,3.82794],[31.96198,3.65596],[31.95854,3.57099],[32.04987,3.59155],[32.07733,3.57099],[32.0842,3.53672],[32.20093,3.50657],[32.21672,3.56448],[32.19578,3.59977],[32.41516,3.74504],[32.72055,3.76782],[32.89307,3.81219],[33.02782,3.89371],[33.18146,3.7793],[33.51173,3.75258],[33.98758,4.23309],[34.05762,4.28342],[34.38721,4.61065],[35.94452,4.62023],[35.95688,4.53467],[36.04134,4.44568],[36.89621,4.4491],[38.14728,3.62992],[38.55927,3.62033],[38.92181,3.51068],[39.56039,3.43392],[39.87076,3.87522],[40.76752,4.28753],[41.16371,3.94372],[41.89774,3.97797],[41.31271,3.14463],[40.98896,2.82869],[40.99548,-0.84042],[41.7,-1.8],[41.7,-49],[-27,-60],[-65.7,-52.5],[-14.5,-6]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[31.33301,35.47856],[33.0249,33.75175],[35.44189,36.02245],[31.33301,35.47856]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[14,36.5],[15,36],[14,35],[14,36.5]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[0,62],[2.5,51.3],[-2,50],[-1.9,49],[-20,53],[0,62]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[180,-35],[161,-19],[167,-12],[180,-22],[180,4],[170,3.7],[127,5.7],[118,2.7],[119.5,5.4],[117.2,7.5],[102.6,8],[102.9158,11.74099],[102.76268,12.07357],[102.70226,12.17158],[102.74139,12.46474],[102.53128,12.68857],[102.49557,12.9256],[102.49763,13.0064],[102.4597,13.08199],[102.43412,13.09026],[102.39155,13.16407],[102.35481,13.29341],[102.35893,13.30945],[102.34503,13.34837],[102.35928,13.39797],[102.3567,13.48095],[102.36168,13.50582],[102.33559,13.53787],[102.33971,13.56023],[102.35498,13.5649],[102.36511,13.5785],[102.40047,13.5679],[102.42537,13.56891],[102.44614,13.56123],[102.48047,13.57091],[102.53849,13.56757],[102.5699,13.58526],[102.57806,13.60486],[102.62501,13.60845],[102.62132,13.61295],[102.60767,13.61562],[102.57231,13.63331],[102.56922,13.64082],[102.54879,13.658],[102.56252,13.68552],[102.5972,13.70803],[102.67084,13.74472],[102.68818,13.75172],[102.7014,13.7684],[102.73161,13.77082],[102.76543,13.85541],[102.78397,13.93207],[102.80388,13.94406],[102.81607,13.96639],[102.90705,14.02119],[102.89726,14.0535],[102.90095,14.0838],[102.92421,14.10744],[102.92378,14.12838],[102.94147,14.15035],[102.92953,14.17952],[103.17535,14.33774],[103.19939,14.32992],[103.68553,14.44],[103.94508,14.34157],[104.05756,14.34589],[104.06636,14.3419],[104.26025,14.37749],[104.50058,14.36984],[104.57817,14.36019],[104.6422,14.42387],[104.66632,14.40234],[104.68357,14.39877],[104.71138,14.43169],[104.72305,14.42188],[104.71687,14.40043],[104.75344,14.40459],[104.80408,14.43867],[104.83429,14.41573],[104.99239,14.3838],[105.05402,14.19783],[105.47905,14.49186],[105.60883,15.0005],[105.46703,15.13005],[105.48866,15.20237],[105.59269,15.2716],[105.58617,15.32823],[105.50308,15.31912],[105.46703,15.33948],[105.49175,15.37921],[105.59372,15.42869],[105.59372,15.50927],[105.60986,15.54871],[105.62616,15.56492],[105.62702,15.59129],[105.63518,15.62742],[105.63612,15.66056],[105.5975,15.72088],[105.49965,15.76681],[105.46291,15.74517],[105.43819,15.75459],[105.40489,15.79424],[105.34241,15.92039],[105.37811,15.98344],[105.39167,15.99136],[105.41931,15.98608],[105.42652,15.99764],[105.41468,16.01661],[105.21263,16.05076],[105.04955,16.10552],[105.01316,16.24401],[104.88235,16.37812],[104.8391,16.45782],[104.77936,16.49041],[104.73919,16.53287],[104.74228,16.62205],[104.76391,16.70953],[104.73953,16.80323],[104.76425,16.85088],[104.73782,16.90968],[104.744,17.0128],[104.81266,17.21853],[104.79841,17.39274],[104.70348,17.52833],[104.46384,17.65515],[104.34368,17.83564],[104.27776,17.8559],[104.22661,17.98069],[104.1116,18.10735],[104.06525,18.21174],[103.97392,18.33823],[103.9286,18.33237],[103.88809,18.29456],[103.85582,18.28673],[103.83659,18.32715],[103.79128,18.3467],[103.70201,18.34214],[103.60931,18.40405],[103.57292,18.40437],[103.51593,18.42978],[103.45963,18.42587],[103.41568,18.44802],[103.30479,18.43206],[103.24265,18.37082],[103.24333,18.34133],[103.29123,18.32357],[103.28899,18.29521],[103.23595,18.28299],[103.16608,18.25511],[103.02429,17.98135],[102.6535,17.83237],[102.40631,17.99963],[102.10968,18.22413],[101.548,17.81538],[101.30493,17.64991],[101.14563,17.46595],[100.95886,17.61654],[101.01757,17.88858],[101.18752,18.05121],[101.16863,18.10409],[101.18134,18.33595],[101.08727,18.38287],[101.05499,18.43988],[101.23215,18.73015],[101.35265,19.04524],[101.25927,19.12733],[101.2373,19.32637],[101.25824,19.58438],[101.11954,19.56836],[101.08898,19.58777],[101.08624,19.59715],[101.03165,19.6185],[100.89844,19.62125],[100.77827,19.49249],[100.63751,19.56432],[100.58258,19.49313],[100.47478,19.5944],[100.42929,19.67152],[100.43341,19.7024],[100.4147,19.7255],[100.40525,19.7646],[100.43907,19.80345],[100.45555,19.84843],[100.50636,19.87264],[100.51709,19.93027],[100.58653,20.1599],[100.56576,20.1757],[100.54945,20.17473],[100.52731,20.14379],[100.51065,20.14895],[100.48697,20.17956],[100.46774,20.196],[100.45246,20.20147],[100.45521,20.22129],[100.44783,20.23546],[100.41607,20.25286],[100.40594,20.28184],[100.38397,20.31082],[100.37556,20.35187],[100.36165,20.35638],[100.35736,20.37408],[100.33195,20.39902],[100.27805,20.40224],[100.25917,20.39677],[100.2475,20.37263],[100.22535,20.35509],[100.22346,20.31839],[100.16579,20.29988],[100.17162,20.24545],[100.10845,20.25221],[100.09266,20.2696],[100.09798,20.31485],[100.07961,20.3678],[99.9567,20.46417],[99.91636,20.44925],[99.90765,20.44977],[99.89121,20.44511],[99.87276,20.44406],[99.86212,20.44326],[99.80186,20.33948],[99.46472,20.3884],[99.56085,20.20035],[99.43691,20.08882],[99.27727,20.11623],[99.06921,20.1101],[98.97789,19.74538],[98.24387,19.68656],[97.85934,19.57014],[97.76733,18.57336],[97.39655,18.47179],[97.62451,18.30238],[97.73849,17.97743],[97.66502,17.87943],[97.90947,17.56745],[98.52951,16.82557],[98.51303,16.69276],[98.69293,16.26873],[98.87421,16.43609],[98.93394,16.3353],[98.84743,16.13356],[98.74512,16.12037],[98.58307,16.07287],[98.5762,15.79754],[98.54736,15.37557],[98.17383,15.15167],[98.3606,14.63674],[99.08295,13.89208],[99.16534,13.72204],[99.18182,13.00723],[99.39331,12.56797],[99.64153,11.78973],[99.32156,11.30266],[98.77859,10.67849],[98.80597,10.47642],[98.76657,10.40459],[98.74924,10.34194],[96.85547,6.40265],[92.42523,20.54794],[92.2728,20.96272],[92.187,21.16],[92.26,21.36],[92.27,21.4328],[92.62,21.43],[92.6,22],[93.22,22.25],[93.4,23.7],[93.34,23.95],[94.155,23.847],[94.17,23.92],[94.25171,24.07405],[94.28,24.23],[94.30175,24.2371],[94.3256,24.2731],[94.6,24.7],[94.78,25.47],[95.2,26],[95.1,26.6],[97.3,27.9],[96.14,29.38],[95.4,29.1],[94.8,29.2],[92.5,27.8],[91.64,27.76],[91.4,28],[89.58,28.18],[88.9,27.32],[88.74,27.47],[88.9,27.86],[88.7,28.1],[88.1,27.87],[85.93,27.942],[81.6,30.5],[81.2,30],[78.73,31.5],[78.77,31.99],[78.4,32.5],[79.3,32.5],[79,34.3],[78.3,34.6],[78,35.5],[76.1,35.8],[76,36.55],[75.15,37],[72.5,36.9],[71.1,36.1],[71.65,35.44],[71.45,35],[70.985,34.54],[71.18,34.36],[71.092,34.118],[70.88,33.97],[70.5,33.94],[69.908,34.04],[69.869,33.96],[70,33.75],[70.13,33.73],[70.34,33.34],[70.013,33.14],[69.57,33.09],[69.24,32.45],[69.3,31.9],[68.1,31.6],[66.393,30.934],[66.2,29.8],[62.5,29.4],[60.87,29.86],[61.53,29.0165],[61.66,28.77],[61.96,28.54],[62.43,28.42],[62.6,28.25],[62.795,28.28],[62.86,27.25],[63.24,27.25],[63.327,27.13],[63.25,27.1],[63.25,26.84],[63.18,26.83],[63.18,26.65],[62.3,26.5],[62.2,26.28],[61.85,26.22],[61.84,25.75],[61.68,25.67],[56.5,-21],[180,-65],[180,-35]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[138.7,46.7],[145.5,44.5],[145.2,43.7],[146,43.3],[142,18],[122,24.3],[138.7,46.7]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-180,7],[-148,7],[-151,-12],[-171.5,-10.75],[-171,-16],[-152,-19],[-180,-55],[-180,7]]]}}];
-  var dataDriveLeft = {
-  type: type$3,
-  features: features$1
-  };
-
-  var en = {icons:{download:"download",information:"info",remove:"remove",undo:"undo",zoom_to:"zoom to",copy:"copy",open_wikidata:"open on wikidata.org"},modes:{add_area:{title:"Area",description:"Add parks, buildings, lakes or other areas to the map.",tail:"Click on the map to start drawing an area, like a park, lake, or building."},add_line:{title:"Line",description:"Add highways, streets, pedestrian paths, canals or other lines to the map.",tail:"Click on the map to start drawing a road, path, or route."},add_point:{title:"Point",description:"Add restaurants, monuments, postal boxes or other points to the map.",tail:"Click on the map to add a point."},add_note:{title:"Note",description:"Spotted an issue? Let other mappers know.",tail:"Click on the map to add a note."},browse:{title:"Browse",description:"Pan and zoom the map."},draw_area:{tail:"Click to add nodes to your area. Click the first node to finish the area."},draw_line:{tail:"Click to add more nodes to the line. Click on other lines to connect to them, and double-click to end the line."},drag_node:{connected_to_hidden:"This can't be edited because it is connected to a hidden feature."}},operations:{add:{annotation:{point:"Added a point.",vertex:"Added a node to a way.",relation:"Added a relation.",note:"Added a note."}},start:{annotation:{line:"Started a line.",area:"Started an area."}},"continue":{key:"A",title:"Continue",description:"Continue this line.",not_eligible:"No line can be continued here.",multiple:"Several lines can be continued here. To choose a line, press the Shift key and click on it to select it.",annotation:{line:"Continued a line.",area:"Continued an area."}},cancel_draw:{annotation:"Canceled drawing."},change_role:{annotation:"Changed the role of a relation member."},change_tags:{annotation:"Changed tags."},circularize:{title:"Circularize",description:{line:"Make this line circular.",area:"Make this area circular."},key:"O",annotation:{line:"Made a line circular.",area:"Made an area circular."},not_closed:"This can't be made circular because it's not a loop.",too_large:"This can't be made circular because not enough of it is currently visible.",connected_to_hidden:"This can't be made circular because it is connected to a hidden feature."},orthogonalize:{title:"Square",description:{line:"Square the corners of this line.",area:"Square the corners of this area."},key:"S",annotation:{line:"Squared the corners of a line.",area:"Squared the corners of an area."},not_squarish:"This can't be made square because it is not squarish.",too_large:"This can't be made square because not enough of it is currently visible.",connected_to_hidden:"This can't be made square because it is connected to a hidden feature."},straighten:{title:"Straighten",description:"Straighten this line.",key:"S",annotation:"Straightened a line.",too_bendy:"This can't be straightened because it bends too much.",connected_to_hidden:"This line can't be straightened because it is connected to a hidden feature."},"delete":{title:"Delete",description:{single:"Delete this feature permanently.",multiple:"Delete these features permanently."},annotation:{point:"Deleted a point.",vertex:"Deleted a node from a way.",line:"Deleted a line.",area:"Deleted an area.",relation:"Deleted a relation.",multiple:"Deleted {n} features."},too_large:{single:"This feature can't be deleted because not enough of it is currently visible.",multiple:"These features can't be deleted because not enough of them are currently visible."},incomplete_relation:{single:"This feature can't be deleted because it hasn't been fully downloaded.",multiple:"These features can't be deleted because they haven't been fully downloaded."},part_of_relation:{single:"This feature can't be deleted because it is part of a larger relation. You must remove it from the relation first.",multiple:"These features can't be deleted because they are part of larger relations. You must remove them from the relations first."},connected_to_hidden:{single:"This feature can't be deleted because it is connected to a hidden feature.",multiple:"These features can't be deleted because some are connected to hidden features."}},add_member:{annotation:"Added a member to a relation."},delete_member:{annotation:"Removed a member from a relation."},connect:{annotation:{from_vertex:{to_point:"Connected a way to a point.",to_vertex:"Connected a way to another.",to_line:"Connected a way to a line.",to_area:"Connected a way to an area.",to_adjacent_vertex:"Merged adjacent points in a way.",to_sibling_vertex:"Connected a way to itself."},from_point:{to_point:"Merged a point with another.",to_vertex:"Merged a point with a point in a way.",to_line:"Moved a point to a line.",to_area:"Moved a point to an area."}},relation:"These features can't be connected because they have conflicting relation roles.",restriction:"These features can't be connected because it would damage a \"{relation}\" relation."},disconnect:{title:"Disconnect",description:"Disconnect these lines/areas from each other.",key:"D",annotation:"Disconnected lines/areas.",not_connected:"There aren't enough lines/areas here to disconnect.",connected_to_hidden:"This can't be disconnected because it is connected to a hidden feature.",relation:"This can't be disconnected because it connects members of a relation."},merge:{title:"Merge",description:"Merge these features.",key:"C",annotation:"Merged {n} features.",not_eligible:"These features can't be merged.",not_adjacent:"These features can't be merged because their endpoints aren't connected.",restriction:"These features can't be merged because it would damage a \"{relation}\" relation.",relation:"These features can't be merged because they have conflicting relation roles.",incomplete_relation:"These features can't be merged because at least one hasn't been fully downloaded.",conflicting_tags:"These features can't be merged because some of their tags have conflicting values."},move:{title:"Move",description:{single:"Move this feature to a different location.",multiple:"Move these features to a different location."},key:"M",annotation:{point:"Moved a point.",vertex:"Moved a node in a way.",line:"Moved a line.",area:"Moved an area.",multiple:"Moved multiple features."},incomplete_relation:{single:"This feature can't be moved because it hasn't been fully downloaded.",multiple:"These features can't be moved because they haven't been fully downloaded."},too_large:{single:"This feature can't be moved because not enough of it is currently visible.",multiple:"These features can't be moved because not enough of them are currently visible."},connected_to_hidden:{single:"This feature can't be moved because it is connected to a hidden feature.",multiple:"These features can't be moved because some are connected to hidden features."}},reflect:{title:{long:"Reflect Long",short:"Reflect Short"},description:{long:{single:"Reflect this feature across its long axis.",multiple:"Reflect these features across their long axis."},short:{single:"Reflect this feature across its short axis.",multiple:"Reflect these features across their short axis."}},key:{long:"T",short:"Y"},annotation:{long:{single:"Reflected a feature across its long axis.",multiple:"Reflected multiple features across their long axis."},short:{single:"Reflected a feature across its short axis.",multiple:"Reflected multiple features across their short axis."}},incomplete_relation:{single:"This feature can't be reflected because it hasn't been fully downloaded.",multiple:"These features can't be reflected because they haven't been fully downloaded."},too_large:{single:"This feature can't be reflected because not enough of it is currently visible.",multiple:"These features can't be reflected because not enough of them are currently visible."},connected_to_hidden:{single:"This feature can't be reflected because it is connected to a hidden feature.",multiple:"These features can't be reflected because some are connected to hidden features."}},rotate:{title:"Rotate",description:{single:"Rotate this feature around its center point.",multiple:"Rotate these features around their center point."},key:"R",annotation:{line:"Rotated a line.",area:"Rotated an area.",multiple:"Rotated multiple features."},incomplete_relation:{single:"This feature can't be rotated because it hasn't been fully downloaded.",multiple:"These features can't be rotated because they haven't been fully downloaded."},too_large:{single:"This feature can't be rotated because not enough of it is currently visible.",multiple:"These features can't be rotated because not enough of them are currently visible."},connected_to_hidden:{single:"This feature can't be rotated because it is connected to a hidden feature.",multiple:"These features can't be rotated because some are connected to hidden features."}},reverse:{title:"Reverse",description:"Make this line go in the opposite direction.",key:"V",annotation:"Reversed a line."},split:{title:"Split",description:{line:"Split this line into two at this node.",area:"Split the boundary of this area into two.",multiple:"Split the lines/area boundaries at this node into two."},key:"X",annotation:{line:"Split a line.",area:"Split an area boundary.",multiple:"Split {n} lines/area boundaries."},not_eligible:"Lines can't be split at their beginning or end.",multiple_ways:"There are too many lines here to split.",connected_to_hidden:"This can't be split because it is connected to a hidden feature."},restriction:{annotation:{create:"Added a turn restriction","delete":"Deleted a turn restriction"}},detach_node:{title:"Detach",key:"E",description:"Detach this node from these lines/areas.",annotation:"Detached a node from parent lines/areas.",restriction:"This node can't be detached because it would damage a \"{relation}\" relation.",connected_to_hidden:"This node can't be detached because it is connected to a hidden feature."}},restriction:{controls:{distance:"Distance",distance_up_to:"Up to {distance}",via:"Via",via_node_only:"Node only",via_up_to_one:"Up to 1 way",via_up_to_two:"Up to 2 ways"},help:{indirect:"(indirect)",turn:{no_left_turn:"NO Left Turn {indirect}",no_right_turn:"NO Right Turn {indirect}",no_u_turn:"NO U-Turn {indirect}",no_straight_on:"NO Straight On {indirect}",only_left_turn:"ONLY Left Turn {indirect}",only_right_turn:"ONLY Right Turn {indirect}",only_u_turn:"ONLY U-Turn {indirect}",only_straight_on:"ONLY Straight On {indirect}",allowed_left_turn:"Left Turn Allowed {indirect}",allowed_right_turn:"Right Turn Allowed {indirect}",allowed_u_turn:"U-Turn Allowed {indirect}",allowed_straight_on:"Straight On Allowed {indirect}"},from:"FROM",via:"VIA",to:"TO",from_name:"{from} {fromName}",from_name_to_name:"{from} {fromName} {to} {toName}",via_names:"{via} {viaNames}",select_from:"Click to select a {from} segment",select_from_name:"Click to select {from} {fromName}",toggle:"Click for \"{turn}\""}},undo:{tooltip:"Undo: {action}",nothing:"Nothing to undo."},redo:{tooltip:"Redo: {action}",nothing:"Nothing to redo."},tooltip_keyhint:"Shortcut:",browser_notice:"This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 11 and above. Please upgrade your browser or use Potlatch 2 to edit the map.",translate:{translate:"Translate",localized_translation_label:"Multilingual Name",localized_translation_language:"Choose language",localized_translation_name:"Name"},zoom_in_edit:"Zoom in to edit",login:"Log In",logout:"Log Out",loading_auth:"Connecting to OpenStreetMap...",report_a_bug:"Report a bug",help_translate:"Help translate",sidebar:{key:"`",tooltip:"Toggle the sidebar."},feature_info:{hidden_warning:"{count} hidden features",hidden_details:"These features are currently hidden: {details}"},status:{error:"Unable to connect to API.",offline:"The API is offline. Please try editing later.",readonly:"The API is read-only. You will need to wait to save your changes.",rateLimit:"The API is limiting anonymous connections.  You can fix this by logging in."},commit:{title:"Upload to OpenStreetMap",upload_explanation:"The changes you upload will be visible on all maps that use OpenStreetMap data.",upload_explanation_with_user:"The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.",request_review:"I would like someone to review my edits.",save:"Upload",cancel:"Cancel",changes:"{count} Changes",download_changes:"Download osmChange file",warnings:"Warnings",modified:"Modified",deleted:"Deleted",created:"Created",about_changeset_comments:"About changeset comments",about_changeset_comments_link:"//wiki.openstreetmap.org/wiki/Good_changeset_comments",google_warning:"You mentioned Google in this comment: remember that copying from Google Maps is strictly forbidden.",google_warning_link:"https://www.openstreetmap.org/copyright"},contributors:{list:"Edits by {users}",truncated_list:"Edits by {users} and {count} others"},info_panels:{key:"I",background:{key:"B",title:"Background",zoom:"Zoom",vintage:"Vintage",source:"Source",description:"Description",resolution:"Resolution",accuracy:"Accuracy",unknown:"Unknown",show_tiles:"Show Tiles",hide_tiles:"Hide Tiles",show_vintage:"Show Vintage",hide_vintage:"Hide Vintage"},history:{key:"H",title:"History",selected:"{n} selected",no_history:"No History (New Feature)",version:"Version",last_edit:"Last Edit",edited_by:"Edited By",changeset:"Changeset",unknown:"Unknown",link_text:"History on openstreetmap.org",note_no_history:"No History (New Note)",note_comments:"Comments",note_created_date:"Created Date",note_created_user:"Created By",note_link_text:"Note on openstreetmap.org"},location:{key:"L",title:"Location",unknown_location:"Unknown Location"},measurement:{key:"M",title:"Measurement",selected:"{n} selected",geometry:"Geometry",closed_line:"closed line",closed_area:"closed area",center:"Center",perimeter:"Perimeter",length:"Length",area:"Area",centroid:"Centroid",location:"Location",metric:"Metric",imperial:"Imperial",node_count:"Number of nodes"}},geometry:{point:"point",vertex:"vertex",line:"line",area:"area",relation:"relation",note:"note"},geocoder:{search:"Search worldwide...",no_results_visible:"No results in visible map area",no_results_worldwide:"No results found"},geolocate:{title:"Show My Location",locating:"Locating, please wait..."},inspector:{no_documentation_combination:"There is no documentation available for this tag combination",no_documentation_key:"There is no documentation available for this key",documentation_redirect:"This documentation has been redirected to a new page",show_more:"Show More",view_on_osm:"View on openstreetmap.org",all_fields:"All fields",all_tags:"All tags",all_members:"All members",all_relations:"All relations",new_relation:"New relation...",choose_relation:"Choose a parent relation",role:"Role",choose:"Select feature type",results:"{n} results for {search}",reference:"View on OpenStreetMap Wiki",back_tooltip:"Change feature",remove:"Remove",search:"Search",multiselect:"Selected features",unknown:"Unknown",incomplete:"<not downloaded>",feature_list:"Search features",edit:"Edit feature",check:{yes:"Yes",no:"No",reverser:"Change Direction"},radio:{structure:{type:"Type","default":"Default",layer:"Layer"}},add:"Add",none:"None",node:"Node",way:"Way",relation:"Relation",location:"Location",add_fields:"Add field:",lock:{suggestion:"The \"{label}\" field is locked because there is a Wikidata tag. You can delete it or edit the tags in the \"All tags\" section."}},background:{title:"Background",description:"Background settings",key:"B",backgrounds:"Backgrounds",none:"None",best_imagery:"Best known imagery source for this location","switch":"Switch back to this background",custom:"Custom",overlays:"Overlays",imagery_source_faq:"Imagery Info / Report a Problem",reset:"reset",display_options:"Display Options",brightness:"Brightness",contrast:"Contrast",saturation:"Saturation",sharpness:"Sharpness",minimap:{description:"Show Minimap",tooltip:"Show a zoomed out map to help locate the area currently displayed.",key:"/"},fix_misalignment:"Adjust imagery offset",offset:"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters."},map_data:{title:"Map Data",description:"Map Data",key:"F",data_layers:"Data Layers",layers:{osm:{tooltip:"Map data from OpenStreetMap",title:"OpenStreetMap data"},notes:{tooltip:"Note data from OpenStreetMap",title:"OpenStreetMap notes"},custom:{tooltip:"Drag and drop a data file onto the page, or click the button to setup",title:"Custom Map Data",zoom:"Zoom to data"}},fill_area:"Fill Areas",map_features:"Map Features",autohidden:"These features have been automatically hidden because too many would be shown on the screen.  You can zoom in to edit them.",osmhidden:"These features have been automatically hidden because the OpenStreetMap layer is hidden."},feature:{points:{description:"Points",tooltip:"Points of Interest"},traffic_roads:{description:"Traffic Roads",tooltip:"Highways, Streets, etc."},service_roads:{description:"Service Roads",tooltip:"Service Roads, Parking Aisles, Tracks, etc."},paths:{description:"Paths",tooltip:"Sidewalks, Foot Paths, Cycle Paths, etc."},buildings:{description:"Buildings",tooltip:"Buildings, Shelters, Garages, etc."},landuse:{description:"Landuse Features",tooltip:"Forests, Farmland, Parks, Residential, Commercial, etc."},boundaries:{description:"Boundaries",tooltip:"Administrative Boundaries"},water:{description:"Water Features",tooltip:"Rivers, Lakes, Ponds, Basins, etc."},rail:{description:"Rail Features",tooltip:"Railways"},power:{description:"Power Features",tooltip:"Power Lines, Power Plants, Substations, etc."},past_future:{description:"Past/Future",tooltip:"Proposed, Construction, Abandoned, Demolished, etc."},others:{description:"Others",tooltip:"Everything Else"}},area_fill:{wireframe:{description:"No Fill (Wireframe)",tooltip:"Enabling wireframe mode makes it easy to see the background imagery.",key:"W"},partial:{description:"Partial Fill",tooltip:"Areas are drawn with fill only around their inner edges. (Recommended for beginner mappers)"},full:{description:"Full Fill",tooltip:"Areas are drawn fully filled."}},settings:{custom_background:{tooltip:"Edit custom background",header:"Custom Background Settings",instructions:"Enter a tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme\n   {-y} or {ty} for flipped TMS-style Y coordinates\n   {u} for quadtile scheme\n   {switch:a,b,c} for DNS server multiplexing\n\nExample:\n{example}",template:{placeholder:"Enter a url template"}},custom_data:{tooltip:"Edit custom data layer",header:"Custom Map Data Settings",file:{instructions:"Choose a local data file. Supported types are:\n   .gpx, .kml, .geojson, .json",label:"Browse files"},or:"Or",url:{instructions:"Enter a data file URL or vector tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme",placeholder:"Enter a url"}}},restore:{heading:"You have unsaved changes",description:"Do you wish to restore unsaved changes from a previous editing session?",restore:"Restore my changes",reset:"Discard my changes"},save:{title:"Save",help:"Review your changes and upload them to OpenStreetMap, making them visible to other users.",no_changes:"No changes to save.",error:"Errors occurred while trying to save",status_code:"Server returned status code {code}",unknown_error_details:"Please ensure you are connected to the internet.",uploading:"Uploading changes to OpenStreetMap...",conflict_progress:"Checking for conflicts: {num} of {total}",unsaved_changes:"You have unsaved changes",conflict:{header:"Resolve conflicting edits",count:"Conflict {num} of {total}",previous:"< Previous",next:"Next >",keep_local:"Keep mine",keep_remote:"Use theirs",restore:"Restore","delete":"Leave Deleted",download_changes:"Or download osmChange file",done:"All conflicts resolved!",help:"Another user changed some of the same map features you changed.\nClick on each feature below for more details about the conflict, and choose whether to keep\nyour changes or the other user's changes.\n"}},merge_remote_changes:{conflict:{deleted:"This feature has been deleted by {user}.",location:"This feature was moved by both you and {user}.",nodelist:"Nodes were changed by both you and {user}.",memberlist:"Relation members were changed by both you and {user}.",tags:"You changed the <b>{tag}</b> tag to \"{local}\" and {user} changed it to \"{remote}\"."}},success:{just_edited:"You just edited OpenStreetMap!",thank_you:"Thank you for improving the map.",thank_you_location:"Thank you for improving the map around {where}.",help_html:"Your changes should appear on OpenStreetMap within a few minutes. It may take longer for maps elsewhere to receive updates.",help_link_text:"Details",help_link_url:"https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F",view_on_osm:"View Changes on OSM",changeset_id:"Your changeset #: {changeset_id}",like_osm:"Like OpenStreetMap? Connect with others:",more:"More",events:"Events",languages:"Languages: {languages}",missing:"Is something missing from this list?",tell_us:"Tell us!"},confirm:{okay:"OK",cancel:"Cancel"},splash:{welcome:"Welcome to the iD OpenStreetMap editor",text:"iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}.",walkthrough:"Start the Walkthrough",start:"Edit now"},source_switch:{live:"live",lose_changes:"You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?",dev:"dev"},version:{whats_new:"What's new in iD {version}"},tag_reference:{description:"Description",on_wiki:"{tag} on wiki.osm.org",used_with:"used with {type}"},validations:{disconnected_highway:"Disconnected highway",disconnected_highway_tooltip:"Roads should be connected to other roads or building entrances.",old_multipolygon:"Multipolygon tags on outer way",old_multipolygon_tooltip:"This style of multipolygon is deprecated. Please assign the tags to the parent multipolygon instead of the outer way.",untagged_point:"Untagged point",untagged_point_tooltip:"Select a feature type that describes what this point is.",untagged_line:"Untagged line",untagged_line_tooltip:"Select a feature type that describes what this line is.",untagged_area:"Untagged area",untagged_area_tooltip:"Select a feature type that describes what this area is.",untagged_relation:"Untagged relation",untagged_relation_tooltip:"Select a feature type that describes what this relation is.",many_deletions:"You're deleting {n} features: {p} nodes, {l} lines, {a} areas, {r} relations. Are you sure you want to do this? This will delete them from the map that everyone else sees on openstreetmap.org.",tag_suggests_area:"The tag {tag} suggests line should be area, but it is not an area",deprecated_tags:"Deprecated tags: {tags}"},zoom:{"in":"Zoom in",out:"Zoom out"},cannot_zoom:"Cannot zoom out further in current mode.",full_screen:"Toggle Full Screen",streetside:{tooltip:"Streetside photos from Microsoft",title:"Photo Overlay (Bing Streetside)",report:"Report a privacy concern with this image",view_on_bing:"View on Bing Maps",hires:"High resolution"},mapillary_images:{tooltip:"Street-level photos from Mapillary",title:"Photo Overlay (Mapillary)"},mapillary_signs:{tooltip:"Traffic signs from Mapillary (must enable Photo Overlay)",title:"Traffic Sign Overlay (Mapillary)"},mapillary:{view_on_mapillary:"View this image on Mapillary"},openstreetcam_images:{tooltip:"Street-level photos from OpenStreetCam",title:"Photo Overlay (OpenStreetCam)"},openstreetcam:{view_on_openstreetcam:"View this image on OpenStreetCam"},note:{note:"Note",title:"Edit note",anonymous:"anonymous",closed:"(Closed)",commentTitle:"Comments",status:{opened:"opened {when}",reopened:"reopened {when}",commented:"commented {when}",closed:"closed {when}"},newComment:"New Comment",inputPlaceholder:"Enter a comment to share with other users.",close:"Close Note",open:"Reopen Note",comment:"Comment",close_comment:"Close and Comment",open_comment:"Reopen and Comment",report:"Report","new":"New Note",newDescription:"Describe the issue.",save:"Save Note",login:"You must log in to change or comment on this note.",upload_explanation:"Your comments will be publicly visible to all OpenStreetMap users.",upload_explanation_with_user:"Your comments as {user} will be publicly visible to all OpenStreetMap users."},help:{title:"Help",key:"H",help:{title:"Help",welcome:"Welcome to the iD editor for [OpenStreetMap](https://www.openstreetmap.org/). With this editor you can update OpenStreetMap right from your web browser.",open_data_h:"Open Data",open_data:"Edits that you make on this map will be visible to everyone who uses OpenStreetMap. Your edits can be based on personal knowledge, on-the-ground surveying, or imagery collected from aerial or street level photos. Copying from commercial sources, like Google Maps, [is strictly forbidden](https://www.openstreetmap.org/copyright).",before_start_h:"Before you start",before_start:"You should be familiar with OpenStreetMap and this editor before you start editing. iD contains a walkthrough to teach you the basics of editing OpenStreetMap. Click \"Start the Walkthrough\" on this screen to take the tutorial - it takes only about 15 minutes.",open_source_h:"Open Source",open_source:"The iD editor is a collaborative open source project, and you are using version {version} now. The source code is available [on GitHub](https://github.com/openstreetmap/iD).",open_source_help:"You can help iD by [translating](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) or [reporting bugs](https://github.com/openstreetmap/iD/issues)."},overview:{title:"Overview",navigation_h:"Navigation",navigation_drag:"You can drag the map by pressing and holding down the {leftclick} left mouse button and moving the mouse around. You can also use the `↓`, `↑`, `←`, `→` arrow keys on your keyboard.",navigation_zoom:"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons along the side of the map. You can also use the `+`, `-` keys on your keyboard.",features_h:"Map Features",features:"We use the word *features* to describe things that appear on the map, such as roads, buildings, or points of interest. Anything in the real world can be mapped as a feature on OpenStreetMap. Map features are represented on the map using *points*, *lines*, or *areas*.",nodes_ways:"In OpenStreetmap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*."},editing:{title:"Editing & Saving",select_h:"Select",select_left_click:"{leftclick} Left-click on a feature to select it. This will highlight it with a pulsing glow, and the sidebar will display details about that feature, such as its name or address.",select_right_click:"{rightclick} Right-click on a feature to display the editing menu, which shows the commands that are available, such as rotating, moving, and deleting.",multiselect_h:"Multiselect",multiselect_shift_click:"`{shift}`+{leftclick} left-click to select several features together.  This makes it easier to move or delete multiple items.",multiselect_lasso:"Another way to select multiple features is to hold down the `{shift}` key, then press and hold down the {leftclick} left mouse button and drag the mouse to draw a selection lasso. All of the points inside the lasso area will be selected.",undo_redo_h:"Undo & Redo",undo_redo:"Your edits are stored locally in your browser until you choose to save them to the OpenStreetMap server. You can undo edits by clicking the {undo} **Undo** button, and redo them by clicking the {redo} **Redo** button.",save_h:"Save",save:"Click {save} **Save** to finish your edits and send them to OpenStreetMap. You should remember to save your work frequently!",save_validation:"On the save screen, you'll have a chance to review what you've done. iD will also perform some basic checks for missing data and may offer helpful suggestions and warnings if something doesn't seem right.",upload_h:"Upload",upload:"Before uploading your changes you must enter a [changeset comment](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Then click **Upload** to send your changes to OpenStreetMap, where they will be merged into the map and publicly visible to everyone.",backups_h:"Automatic Backups",backups:"If you can't finish your edits in one sitting, for example if your computer crashes or you close the browser tab, your edits are still saved in your browser's storage. You can come back later (on the same browser and computer), and iD will offer to restore your work.",keyboard_h:"Keyboard Shortcuts",keyboard:"You can view a list of keyboard shortcuts by pressing the `?` key."},feature_editor:{title:"Feature Editor",intro:"The *feature editor* appears alongside the map, and allows you to see and edit all of the information for the selected feature.",definitions:"The top section displays the feature's type. The middle section contains *fields* showing the feature's attributes, such as its name or address.",type_h:"Feature Type",type:"You can click on the feature type to change the feature to a different type. Everything that exists in the real world can be added to OpenStreetMap, so there are thousands of feature types to choose from.",type_picker:"The type picker displays the most common feature types, such as parks, hospitals, restaurants, roads, and buildings. You can search for anything by typing what you're looking for in the search box. You can also click the {inspect} **Info** icon next to the feature type to learn more about it.",fields_h:"Fields",fields_all_fields:"The \"All fields\" section contains all of the feature's details that you may edit. In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.",fields_example:"Each feature type will display different fields. For example, a road may display fields for its surface and speed limit, but a restaurant may display fields for the type of food it serves and the hours it is open.",fields_add_field:"You can also click the \"Add field\" dropdown to add more fields, such as a description, Wikipedia link, wheelchair access, and more.",tags_h:"Tags",tags_all_tags:"Below the fields section, you can expand the \"All tags\" section to edit any of the OpenStreetMap *tags* for the selected feature. Each tag consists of a *key* and *value*, data elements that define all of the features stored in OpenStreetMap.",tags_resources:"Editing a feature's tags requires intermediate knowledge about OpenStreetMap. You should consult resources like the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Main_Page) or [Taginfo](https://taginfo.openstreetmap.org/) to learn more about accepted OpenStreetMap tagging practices."},points:{title:"Points",intro:"*Points* can be used to represent features such as shops, restaurants, and monuments. They mark a specific location, and describe what's there.",add_point_h:"Adding Points",add_point:"To add a point, click the {point} **Point** button on the toolbar above the map, or press the shortcut key `1`. This will change the mouse cursor to a cross symbol.",add_point_finish:"To place the new point on the map, position the mouse cursor where the point should go, then {leftclick} left-click or press `Space`.",move_point_h:"Moving Points",move_point:"To move a point, place the mouse cursor over the point, then press and hold the {leftclick} left mouse button while dragging the point to its new location.",delete_point_h:"Deleting Points",delete_point:"It's OK to delete features that don't exist in the real world. Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it.",delete_point_command:"To delete a point, {rightclick} right-click on the point to select it and show the edit menu, then use the {delete} **Delete** command."},lines:{title:"Lines",intro:"*Lines* are used to represent features such as roads, railroads, and rivers. Lines should be drawn down the center of the feature that they represent.",add_line_h:"Adding Lines",add_line:"To add a line, click the {line} **Line** button on the toolbar above the map, or press the shortcut key `2`. This will change the mouse cursor to a cross symbol.",add_line_draw:"Next, position the mouse cursor where the line should begin and {leftclick} left-click or press `Space` to begin placing nodes along the line. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_line_finish:"To finish a line, press `{return}` or click again on the last node.",modify_line_h:"Modifying Lines",modify_line_dragnode:"Often you'll see lines that aren't shaped correctly, for example a road that does not match up with the background imagery. To adjust the shape of a line, first {leftclick} left-click to select it. All nodes of the line will be drawn as small circles. You can then drag the nodes to better locations.",modify_line_addnode:"You can also create new nodes along a line either by {leftclick}**x2** double-clicking on the line or by dragging the small triangles at the midpoints between nodes.",connect_line_h:"Connecting Lines",connect_line:"Having roads connected properly is important for the map and essential for providing driving directions.",connect_line_display:"The connections between roads are drawn with gray circles. The endpoints of a line are drawn with larger white circles if they don't connect to anything.",connect_line_drag:"To connect a line to another feature, drag one of the line's nodes onto the other feature until both features snap together. Tip: You can hold down the `{alt}` key to prevent nodes from connecting to other features.",connect_line_tag:"If you know that the connection has traffic lights or crosswalks, you can add them by selecting the connecting node and using the feature editor to select the correct feature's type.",disconnect_line_h:"Disconnecting Lines",disconnect_line_command:"To disconnect a road from another feature, {rightclick} right-click the connecting node and select the {disconnect} **Disconnect** command from the editing menu.",move_line_h:"Moving Lines",move_line_command:"To move an entire line, {rightclick} right-click the line and select the {move} **Move** command from the editing menu. Then move the mouse, and {leftclick} left-click to place the line in a new location.",move_line_connected:"Lines that are connected to other features will stay connected as you move the line to a new location. iD may prevent you from moving a line across another connected line.",delete_line_h:"Deleting Lines",delete_line:"If a line is entirely incorrect, for example a road that doesn't exist in the real world, it's OK to delete it. Be careful when deleting features: the background imagery you are using might be outdated, and a road that looks wrong could simply be newly built.",delete_line_command:"To delete a line, {rightclick} right-click on the line to select it and show the edit menu, then use the {delete} **Delete** command."},areas:{title:"Areas",intro:"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas. Areas should be traced around the edge of the feature that they represent, for example, around the base of a building.",point_or_area_h:"Points or Areas?",point_or_area:"Many features can be represented as points or areas. You should map buildings and property outlines as areas whenever possible. Place points inside a building area to represent businesses, amenities, and other features located inside the building.",add_area_h:"Adding Areas",add_area_command:"To add an area, click the {area} **Area** button on the toolbar above the map, or press the shortcut key `3`. This will change the mouse cursor to a cross symbol.",add_area_draw:"Next, position the mouse cursor at one of the corners of the feature and {leftclick} left-click or press `Space` to begin placing nodes around the outer edge of the area. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_area_finish:"To finish an area, press `{return}` or click again on either the first or last node.",square_area_h:"Square Corners",square_area_command:"Many area features like buildings have square corners. To square the corners of an area, {rightclick} right-click the edge of the area and select the {orthogonalize} **Square** command from the editing menu.",modify_area_h:"Modifying Areas",modify_area_dragnode:"Often you'll see areas that aren't shaped correctly, for example a building that does not match up with the background imagery. To adjust the shape of an area, first {leftclick} left-click to select it. All nodes of the area will be drawn as small circles. You can then drag the nodes to better locations.",modify_area_addnode:"You can also create new nodes along an area either by {leftclick}**x2** double-clicking on the edge of the area or by dragging the small triangles at the midpoints between nodes.",delete_area_h:"Deleting Areas",delete_area:"If an area is entirely incorrect, for example a building that doesn't exist in the real world, it's OK to delete it. Be cautious when deleting features - the background imagery you are using might be outdated, and a building that looks wrong could simply be newly built.",delete_area_command:"To delete an area, {rightclick} right-click on the area to select it and show the edit menu, then use the {delete} **Delete** command."},relations:{title:"Relations",intro:"A *relation* is a special type of feature in OpenStreetMap that groups together other features. The features that belong to a relation are called *members*, and each member can have a *role* in the relation.",edit_relation_h:"Editing Relations",edit_relation:"At the bottom of the feature editor, you can expand the \"All relations\" section to see if the selected feature is a member of any relations. You can then click on the relation to select and edit it.",edit_relation_add:"To add a feature to a relation, select the feature, then click the {plus} add button in the \"All relations\" section of the feature editor. You can choose from a list of nearby relations, or choose the \"New relation...\" option.",edit_relation_delete:"You can also click the {delete} **Delete** button to remove the selected feature from the relation. If you remove all of the members from a relation, the relation will be deleted automatically.",maintain_relation_h:"Maintaining Relations",maintain_relation:"For the most part, iD will maintain relations automatically as you edit. You should take care when replacing features that might be members of relations. For example if you delete a section of road and draw a new section of road to replace it, you should add the new section to the same relations (routes, turn restrictions, etc.) as the original.",relation_types_h:"Relation Types",multipolygon_h:"Multipolygons",multipolygon:"A *multipolygon* relation is a group of one or more *outer* features and one or more inner features. The outer features define the outer edges of the multipolygon, and the inner features define sub-areas or holes cut out from the inside of the multipolygon.",multipolygon_create:"To create a multipolygon, for example a building with a hole in it, draw the outer edge as an area and the inner edge as a line or different kind of area. Then `{shift}`+{leftclick} left-click to select both features, {rightclick} right-click to show the edit menu, and select the {merge} **Merge** command.",multipolygon_merge:"Merging several lines or areas will create a new multipolygon relation with all selected areas as members. iD will choose the inner and outer roles automatically, based on which features are contained inside other features.",turn_restriction_h:"Turn restrictions",turn_restriction:"A *turn restriction* relation is a group of several road segments in an intersection. Turn restrictions consist of a *from* road, *via* node or roads, and a *to* road.",turn_restriction_field:"To edit turn restrictions, select a junction node where two or more roads meet. The feature editor will display a special \"Turn Restrictions\" field containing a model of the intersection.",turn_restriction_editing:"In the \"Turn Restrictions\" field, click to select a \"from\" road, and see whether turns are allowed or restricted to any of the \"to\" roads. You can click on the turn icons to toggle them between allowed and restricted. iD will create relations automatically and set the from, via, and to roles based on your choices.",route_h:"Routes",route:"A *route* relation is a group of one or more line features that together form a route network, like a bus route, train route, or highway route.",route_add:"To add a feature to a route relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation.",boundary_h:"Boundaries",boundary:"A *boundary* relation is a group of one or more line features that together form an administrative boundary.",boundary_add:"To add a feature to a boundary relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation."},notes:{title:"Notes",intro:"*Notes* are used to alert other users that a feature requires fixing or attention. Notes mark a specific location on the map. To view existing notes or add new ones, click the {data} **Map data** panel to enable the OpenStreetMap notes layer.",add_note_h:"Adding Notes",add_note:"To add a new note, click the {note} **Note** button on the toolbar above the map, or press the shortcut key `4`. This will change the mouse cursor to a cross symbol. To place the new note on the map, position the mouse cursor where the note should go, then {leftclick} left-click or press `Space`.",move_note:"Only new notes can be moved. To move a note, place the mouse cursor over the new note, then press and hold the {leftclick} left mouse button while dragging the note to its new location.",update_note_h:"Closing, Reopening, and Commenting",update_note:"An existing note can be updated by closing it, reopening it, or adding a comment to it. Closing a note indicates that the problem has been resolved. Reopening a note indicates that the original issue is not resolved.",save_note_h:"Saving Notes",save_note:"You must save any note edits individually by clicking the buttons below the note comments. Note edits are **not** included in changesets that you upload to OpenStreetMap."},imagery:{title:"Background Imagery",intro:"The background imagery that appears beneath the map data is an important resource for mapping. This imagery can be aerial photos collected from satellites, airplanes, and drones, or it can be scanned historical maps or other freely available source data.",sources_h:"Imagery Sources",choosing:"To see which imagery sources are available for editing, click the {layers} **Background settings** button on the side of the map.",sources:"By default, a [Bing Maps](https://www.bing.com/maps/) satellite layer is chosen as the background image. Depending on where you are editing, other imagery sources will be available. Some may be newer or have higher resolution, so it is always useful to check and see which layer is the best one to use as a mapping reference.",offsets_h:"Adjusting Imagery Offset",offset:"Imagery is sometimes offset slightly from accurate map data. If you see a lot of roads or buildings shifted from the background imagery, it may be the imagery that's incorrect, so don't move them all to match the background. Instead, you can adjust the background so that it matches the existing data by expanding the \"Adjust Imagery Offset\" section at the bottom of the Background Settings pane.",offset_change:"Click on the small triangles to adjust the imagery offset in small steps, or hold the left mouse button and drag within the gray square to slide the imagery into alignment."},streetlevel:{title:"Street Level Photos",intro:"Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Bing Streetside](https://www.microsoft.com/en-us/maps/streetside), [Mapillary](https://www.mapillary.com), and [OpenStreetCam](https://www.openstreetcam.org).",using_h:"Using Street Level Photos",using:"To use street level photos for mapping, click the {data} **Map data** panel on the side of the map to enable or disable the available photo layers.",photos:"When enabled, the photo layer displays a line along the sequence of photos. At higher zoom levels, a circle marks at each photo location, and at even higher zoom levels, a cone indicates the direction the camera was facing when the photo was taken.",viewer:"When you click on one of the photo locations, a photo viewer appears in the bottom corner of the map. The photo viewer contains controls to step forward and backward in the image sequence. It also shows the username of the person who captured the image, the date it was captured, and a link to view the image on the original site."},gps:{title:"GPS Traces",intro:"Collected GPS traces are a valuable source of data for OpenStreetMap. This editor supports *.gpx*, *.geojson*, and *.kml* files on your local computer. You can collect GPS traces with a smartphone, sports watch, or other GPS device.",survey:"For information on how to perform a GPS survey, read [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).",using_h:"Using GPS Traces",using:"To use a GPS trace for mapping, drag and drop the data file onto the map editor. If it's recognized, it will be drawn on the map as a bright purple line. Click the {data} **Map data** panel on the side of the map to enable, disable, or zoom to your GPS data.",tracing:"The GPS track isn't sent to OpenStreetMap - the best way to use it is to draw on the map, using it as a guide for the new features that you add.",upload:"You can also [upload your GPS data to OpenStreetMap](https://www.openstreetmap.org/trace/create) for other users to use."},field:{restrictions:{title:"Turn Restrictions Help",about:{title:"About",about:"This field allows you to inspect and modify turn restrictions. It displays a model of the selected intersection including other nearby connected roads.",from_via_to:"A turn restriction always contains: one **FROM way**, one **TO way**, and either one **VIA node** or one or more **VIA ways**.",maxdist:"The \"{distField}\" slider controls how far to search for additional connected roads.",maxvia:"The \"{viaField}\" slider adjusts how many via ways may be included in the search. (Tip: simple is better)"},inspecting:{title:"Inspecting",about:"Hover over any **FROM** segment to see whether it has any turn restrictions. Each possible **TO** destination will be drawn with a colored shadow showing whether a restriction exists.",from_shadow:"{fromShadow} **FROM segment**",allow_shadow:"{allowShadow} **TO Allowed**",restrict_shadow:"{restrictShadow} **TO Restricted**",only_shadow:"{onlyShadow} **TO Only**",restricted:"\"Restricted\" means that there is a turn restriction, for example \"No Left Turn\".",only:"\"Only\" means that a vehicle taking that path may only make that choice, for example \"Only Straight On\"."},modifying:{title:"Modifying",about:"To modify turn restrictions, first click on any starting **FROM** segment to select it. The selected segment will pulse, and all possible **TO** destinations will appear as turn symbols.",indicators:"Then, click on a turn symbol to toggle it between \"Allowed\", \"Restricted\", and \"Only\".",allow_turn:"{allowTurn} **TO Allowed**",restrict_turn:"{restrictTurn} **TO Restricted**",only_turn:"{onlyTurn} **TO Only**"},tips:{title:"Tips",simple:"**Prefer simple restrictions over complex ones.**",simple_example:"For example, avoid creating a via-way restriction if a simpler via-node turn restriction will do.",indirect:"**Some restrictions display the text \"(indirect)\" and are drawn lighter.**",indirect_example:"These restrictions exist because of another nearby restriction. For example, an \"Only Straight On\" restriction will indirectly create \"No Turn\" restrictions for all other paths through the intersection.",indirect_noedit:"You may not edit indirect restrictions. Instead, edit the nearby direct restriction."}}}},intro:{done:"done",ok:"OK",graph:{block_number:"<value for addr:block_number>",city:"Three Rivers",county:"<value for addr:county>",district:"<value for addr:district>",hamlet:"<value for addr:hamlet>",neighbourhood:"<value for addr:neighbourhood>",postcode:"49093",province:"<value for addr:province>",quarter:"<value for addr:quarter>",state:"MI",subdistrict:"<value for addr:subdistrict>",suburb:"<value for addr:suburb>",countrycode:"us",name:{"1st-avenue":"1st Avenue","2nd-avenue":"2nd Avenue","4th-avenue":"4th Avenue","5th-avenue":"5th Avenue","6th-avenue":"6th Avenue","6th-street":"6th Street","7th-avenue":"7th Avenue","8th-avenue":"8th Avenue","9th-avenue":"9th Avenue","10th-avenue":"10th Avenue","11th-avenue":"11th Avenue","12th-avenue":"12th Avenue","access-point-employment":"Access Point Employment","adams-street":"Adams Street","andrews-elementary-school":"Andrews Elementary School","andrews-street":"Andrews Street","armitage-street":"Armitage Street","barrows-school":"Barrows School","battle-street":"Battle Street","bennett-street":"Bennett Street","bowman-park":"Bowman Park","collins-drive":"Collins Drive","conrail-railroad":"Conrail Railroad","conservation-park":"Conservation Park","constantine-street":"Constantine Street","cushman-street":"Cushman Street","dollar-tree":"Dollar Tree","douglas-avenue":"Douglas Avenue","east-street":"East Street","elm-street":"Elm Street","flower-street":"Flower Street","foster-street":"Foster Street","french-street":"French Street","garden-street":"Garden Street","gem-pawnbroker":"Gem Pawnbroker","golden-finch-framing":"Golden Finch Framing","grant-avenue":"Grant Avenue","hoffman-pond":"Hoffman Pond","hoffman-street":"Hoffman Street","hook-avenue":"Hook Avenue","jefferson-street":"Jefferson Street","kelsey-street":"Kelsey Street","lafayette-park":"LaFayette Park","las-coffee-cafe":"L.A.'s Coffee Cafe","lincoln-avenue":"Lincoln Avenue","lowrys-books":"Lowry's Books","lynns-garage":"Lynn's Garage","main-street-barbell":"Main Street Barbell","main-street-cafe":"Main Street Cafe","main-street-fitness":"Main Street Fitness","main-street":"Main Street","maple-street":"Maple Street","marina-park":"Marina Park","market-street":"Market Street","memory-isle-park":"Memory Isle Park","memory-isle":"Memory Isle","michigan-avenue":"Michigan Avenue","middle-street":"Middle Street","millard-street":"Millard Street","moore-street":"Moore Street","morris-avenue":"Morris Avenue","mural-mall":"Mural Mall","paisanos-bar-and-grill":"Paisano's Bar and Grill","paisley-emporium":"Paisley Emporium","paparazzi-tattoo":"Paparazzi Tattoo","pealer-street":"Pealer Street","pine-street":"Pine Street","pizza-hut":"Pizza Hut","portage-avenue":"Portage Avenue","portage-river":"Portage River","preferred-insurance-services":"Preferred Insurance Services","railroad-drive":"Railroad Drive","river-city-appliance":"River City Appliance","river-drive":"River Drive","river-road":"River Road","river-street":"River Street","riverside-cemetery":"Riverside Cemetery","riverwalk-trail":"Riverwalk Trail","riviera-theatre":"Riviera Theatre","rocky-river":"Rocky River","saint-joseph-river":"Saint Joseph River","scidmore-park-petting-zoo":"Scidmore Park Petting Zoo","scidmore-park":"Scidmore Park","scouter-park":"Scouter Park","sherwin-williams":"Sherwin-Williams","south-street":"South Street","southern-michigan-bank":"Southern Michigan Bank","spring-street":"Spring Street","sturgeon-river-road":"Sturgeon River Road","three-rivers-city-hall":"Three Rivers City Hall","three-rivers-elementary-school":"Three Rivers Elementary School","three-rivers-fire-department":"Three Rivers Fire Department","three-rivers-high-school":"Three Rivers High School","three-rivers-middle-school":"Three Rivers Middle School","three-rivers-municipal-airport":"Three Rivers Municipal Airport","three-rivers-post-office":"Three Rivers Post Office","three-rivers-public-library":"Three Rivers Public Library","three-rivers":"Three Rivers","unique-jewelry":"Unique Jewelry","walnut-street":"Walnut Street","washington-street":"Washington Street","water-street":"Water Street","west-street":"West Street","wheeler-street":"Wheeler Street","william-towing":"William Towing","willow-drive":"Willow Drive","wood-street":"Wood Street","world-fare":"World Fare"}},welcome:{title:"Welcome",welcome:"Welcome! This walkthrough will teach you the basics of editing on OpenStreetMap.",practice:"All of the data in this walkthrough is just for practicing, and any edits that you make in the walkthrough will not be saved.",words:"This walkthrough will introduce some new words and concepts. When we introduce a new word, we'll use *italics*.",mouse:"You can use any input device to edit the map, but this walkthrough assumes you have a mouse with left and right buttons. **If you want to attach a mouse, do so now, then click OK.**",leftclick:"When this tutorial asks you to click or double-click, we mean with the left button. On a trackpad it might be a single-click or single-finger tap. **Left-click {num} times.**",rightclick:"Sometimes we'll also ask you to right-click. This might be the same as control-click, or two-finger tap on a trackpad. Your keyboard might even have a 'menu' key that works like right-click. **Right-click {num} times.**",chapters:"So far, so good! You can use the buttons below to skip chapters at any time or to restart a chapter if you get stuck. Let's begin! **Click '{next}' to continue.**"},navigation:{title:"Navigation",drag:"The main map area shows OpenStreetMap data on top of a background.{br}You can drag the map by pressing and holding the left mouse button while moving the mouse around. You can also use the arrow keys on your keyboard. **Drag the map!**",zoom:"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons. **Zoom the map!**",features:"We use the word *features* to describe the things that appear on the map. Anything in the real world can be mapped as a feature on OpenStreetMap.",points_lines_areas:"Map features are represented using *points, lines, or areas.*",nodes_ways:"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*.",click_townhall:"All features on the map can be selected by clicking on them. **Click on the point to select it.**",selected_townhall:"Great! The point is now selected. Selected features are drawn with a pulsing glow.",editor_townhall:"When a feature is selected, the *feature editor* is displayed alongside the map.",preset_townhall:"The top part of the feature editor shows the feature's type. This point is a {preset}.",fields_townhall:"The middle part of the feature editor contains *fields* showing the feature's attributes, such as its name and address.",close_townhall:"**Close the feature editor by hitting escape or pressing the {button} button in the upper corner.**",search_street:"You can also search for features in the current view, or worldwide. **Search for '{name}'.**",choose_street:"**Choose {name} from the list to select it.**",selected_street:"Great! {name} is now selected.",editor_street:"The fields shown for a street are different than the fields that were shown for the town hall.{br}For this selected street, the feature editor shows fields like '{field1}' and '{field2}'. **Close the feature editor by hitting escape or pressing the {button} button.**",play:"Try moving the map and clicking on some other features to see what kinds of things can be added to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},points:{title:"Points",add_point:"*Points* can be used to represent features such as shops, restaurants, and monuments.{br}They mark a specific location, and describe what's there. **Click the {button} Point button to add a new point.**",place_point:"To place the new point on the map, position your mouse cursor where the point should go, then left-click or press the spacebar. **Move the mouse pointer over this building, then left-click or press the spacebar.**",search_cafe:"There are many different features that can be represented by points. The point you just added is a cafe. **Search for '{preset}'.**",choose_cafe:"**Choose {preset} from the list.**",feature_editor:"The point is now marked as a cafe. Using the feature editor, we can add more information about the cafe.",add_name:"In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.{br}Let's pretend that you have local knowledge of this cafe, and you know its name. **Add a name for the cafe.**",add_close:"The feature editor will remember all of your changes automatically. **When you are finished adding the name, hit escape, enter, or click the {button} button to close the feature editor.**",reselect:"Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Click to select the cafe you just created.**",update:"Let's fill in some more details for this cafe. You can change its name, add a cuisine, or add an address. **Change the cafe details.**",update_close:"**When you are finished updating the cafe, hit escape, enter, or click the {button} button to close the feature editor.**",rightclick:"You can right-click on any feature to see the *edit menu*, which shows a list of editing operations that can be performed. **Right-click to select the point you created and show the edit menu.**","delete":"It's OK to delete features that don't exist in the real world.{br}Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it. **Click on the {button} button to delete the point.**",undo:"You can always undo any changes up until you save your edits to OpenStreetMap. **Click on the {button} button to undo the delete and get the point back.**",play:"Now that you know how to create and edit points, try creating a few more points for practice! **When you are ready to continue to the next chapter, click '{next}'.**"},areas:{title:"Areas",add_playground:"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas.{br}They can also be used for more detailed mapping of many features you might normally map as points. **Click the {button} Area button to add a new area.**",start_playground:"Let's add this playground to the map by drawing an area. Areas are drawn by placing *nodes* along the outer edge of the feature. **Click or press spacebar to place a starting node on one of the corners of the playground.**",continue_playground:"Continue drawing the area by placing more nodes along the playground's edge. It is OK to connect the area to the existing walking paths.{br}Tip: You can hold down the '{alt}' key to prevent nodes from connecting to other features. **Continue drawing an area for the playground.**",finish_playground:"Finish the area by pressing enter, or clicking again on either the first or last node. **Finish drawing an area for the playground.**",search_playground:"**Search for '{preset}'.**",choose_playground:"**Choose {preset} from the list.**",add_field:"This playground doesn't have an official name, so we won't add anything in the Name field.{br}Instead let's add some additional details about the playground to the Description field. **Open the Add Field list.**",choose_field:"**Choose {field} from the list.**",retry_add_field:"You didn't select the {field} field. Let's try again.",describe_playground:"**Add a description, then click the {button} button to close the feature editor.**",play:"Good job! Try drawing a few more areas, and see what other kinds of area features you can add to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},lines:{title:"Lines",add_line:"*Lines* are used to represent features such as roads, railroads, and rivers. **Click the {button} Line button to add a new line.**",start_line:"Here is a road that is missing. Let's add it!{br}In OpenStreetMap, lines should be drawn down the center of the road. You can drag and zoom the map while drawing if necessary. **Start a new line by clicking at the top end of this missing road.**",intersect:"Click or press spacebar to add more nodes to the line.{br}Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on {name} to create an intersection connecting the two lines.**",retry_intersect:"The road needs to intersect {name}. Let's try again!",continue_line:"Continue drawing the line for the new road. Remember that you can drag and zoom the map if needed.{br}When you are finished drawing, click on the last node again. **Finish drawing the road.**",choose_category_road:"**Select {category} from the list.**",choose_preset_residential:"There are many different types of roads, but this one is a residential road. **Choose the {preset} type.**",retry_preset_residential:"You didn't select the {preset} type. **Click here to choose again.**",name_road:"**Give this road a name, then hit escape, enter, or click the {button} button to close the feature editor.**",did_name_road:"Looks good! Next we will learn how to update the shape of a line.",update_line:"Sometimes you will need to change the shape of an existing line. Here is a road that doesn't look quite right.",add_node:"We can add some nodes to this line to improve its shape. One way to add a node is to double-click the line where you want to add a node. **Double-click on the line to create a new node.**",start_drag_endpoint:"When a line is selected, you can drag any of its nodes by clicking and holding down the left mouse button while you drag. **Drag the endpoint to the place where these roads should intersect.**",finish_drag_endpoint:"This spot looks good. **Release the left mouse button to finish dragging.**",start_drag_midpoint:"Small triangles are drawn at the *midpoints* between nodes. Another way to create a new node is to drag a midpoint to a new location. **Drag the midpoint triangle to create a new node along the curve of the road.**",continue_drag_midpoint:"This line is looking much better! Continue to adjust this line by double-clicking or dragging midpoints until the curve matches the road shape. **When you're happy with how the line looks, click OK.**",delete_lines:"It's OK to delete lines for roads that don't exist in the real world.{br}Here's an example where the city planned a {street} but never built it. We can improve this part of the map by deleting the extra lines.",rightclick_intersection:"The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**",split_intersection:"**Click on the {button} button to split {street}.**",retry_split:"You didn't click the Split button. Try again.",did_split_multi:"Good job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**",did_split_single:"**Click the top part of {street2} to select it.**",multi_select:"{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**",multi_rightclick:"Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**",multi_delete:"**Click on the {button} button to delete the extra lines.**",retry_delete:"You didn't click the Delete button. Try again.",play:"Great! Use the skills that you've learned in this chapter to practice editing some more lines. **When you are ready to continue to the next chapter, click '{next}'.**"},buildings:{title:"Buildings",add_building:"OpenStreetMap is the world's largest database of buildings.{br}You can help improve this database by tracing buildings that aren't already mapped. **Click the {button} Area button to add a new area.**",start_building:"Let's add this house to the map by tracing its outline.{br}Buildings should be traced around their footprint as accurately as possible. **Click or press spacebar to place a starting node on one of the corners of the building.**",continue_building:"Continue adding more nodes to trace the outline of the building. Remember that you can zoom in if you want to add more details.{br}Finish the building by pressing enter, or clicking again on either the first or last node. **Finish tracing the building.**",retry_building:"It looks like you had some trouble placing the nodes at the building corners. Try again!",choose_category_building:"**Choose {category} from the list.**",choose_preset_house:"There are many different types of buildings, but this one is clearly a house.{br}If you're not sure of the type, it's OK to just choose the generic Building type. **Choose the {preset} type.**",close:"**Hit escape or click the {button} button to close the feature editor.**",rightclick_building:"**Right-click to select the building you created and show the edit menu.**",square_building:"The house that you just added will look even better with perfectly square corners. **Click on the {button} button to square the building shape.**",retry_square:"You didn't click the Square button. Try again.",done_square:"See how the corners of the building moved into place? Let's learn another useful trick.",add_tank:"Next we'll trace this circular storage tank. **Click the {button} Area button to add a new area.**",start_tank:"Don't worry, you won't need to draw a perfect circle. Just draw an area inside the tank that touches its edge. **Click or press spacebar to place a starting node on the edge of the tank.**",continue_tank:"Add a few more nodes around the edge. The circle will be created outside the nodes that you draw.{br}Finish the area by pressing enter, or clicking again on either the first or last node. **Finish tracing the tank.**",search_tank:"**Search for '{preset}'.**",choose_tank:"**Choose {preset} from the list.**",rightclick_tank:"**Right-click to select the storage tank you created and show the edit menu.**",circle_tank:"**Click on the {button} button to make the tank a circle.**",retry_circle:"You didn't click the Circularize button. Try again.",play:"Great Job! Practice tracing a few more buildings, and try some of the other commands on the edit menu. **When you are ready to continue to the next chapter, click '{next}'.**"},startediting:{title:"Start Editing",help:"You're now ready to edit OpenStreetMap!{br}You can replay this walkthrough anytime or view more documentation by clicking the {button} Help button or pressing the '{key}' key.",shortcuts:"You can view a list of commands along with their keyboard shortcuts by pressing the '{key}' key.",save:"Don't forget to regularly save your changes!",start:"Start mapping!"}},shortcuts:{title:"Keyboard shortcuts",tooltip:"Show the keyboard shortcuts screen.",toggle:{key:"?"},key:{alt:"Alt",backspace:"Backspace",cmd:"Cmd",ctrl:"Ctrl","delete":"Delete",del:"Del",end:"End",enter:"Enter",esc:"Esc",home:"Home",option:"Option",pause:"Pause",pgdn:"PgDn",pgup:"PgUp","return":"Return",shift:"Shift",space:"Space"},gesture:{drag:"drag"},or:"-or-",browsing:{title:"Browsing",navigation:{title:"Navigation",pan:"Pan map",pan_more:"Pan map by one screenful",zoom:"Zoom in / Zoom out",zoom_more:"Zoom in / Zoom out by a lot"},help:{title:"Help",help:"Show help/documentation",keyboard:"Show keyboard shortcuts"},display_options:{title:"Display options",background:"Show background options",background_switch:"Switch back to last background",map_data:"Show map data options",fullscreen:"Enter full screen mode",sidebar:"Toggle sidebar",wireframe:"Toggle wireframe mode",minimap:"Toggle minimap"},selecting:{title:"Selecting features",select_one:"Select a single feature",select_multi:"Select multiple features",lasso:"Draw a selection lasso around features",search:"Find features matching search text"},with_selected:{title:"With feature selected",edit_menu:"Toggle edit menu"},vertex_selected:{title:"With node selected",previous:"Jump to previous node",next:"Jump to next node",first:"Jump to first node",last:"Jump to last node",change_parent:"Switch parent way"}},editing:{title:"Editing",drawing:{title:"Drawing",add_point:"'Add point' mode",add_line:"'Add line' mode",add_area:"'Add area' mode",add_note:"'Add note' mode",place_point:"Place a point or note",disable_snap:"Hold to disable point snapping",stop_line:"Finish drawing a line or area"},operations:{title:"Operations",continue_line:"Continue a line at the selected node",merge:"Combine (merge) selected features",disconnect:"Disconnect features at the selected node",detach_node:"Detach selected node from parent lines/areas",split:"Split a line into two at the selected node",reverse:"Reverse a line",move:"Move selected features",rotate:"Rotate selected features",orthogonalize:"Straighten line / Square area corners",circularize:"Circularize a closed line or area",reflect_long:"Reflect features across the longer axis",reflect_short:"Reflect features across the shorter axis","delete":"Delete selected features"},commands:{title:"Commands",copy:"Copy selected features",paste:"Paste copied features",undo:"Undo last action",redo:"Redo last action",save:"Save changes"}},tools:{title:"Tools",info:{title:"Information",all:"Toggle all information panels",background:"Toggle background panel",history:"Toggle history panel",location:"Toggle location panel",measurement:"Toggle measurement panel"}}},units:{feet:"{quantity} ft",miles:"{quantity} mi",square_feet:"{quantity} sq ft",square_miles:"{quantity} sq mi",acres:"{quantity} ac",meters:"{quantity} m",kilometers:"{quantity} km",square_meters:"{quantity} m²",square_kilometers:"{quantity} km²",hectares:"{quantity} ha",area_pair:"{area1} ({area2})",arcdegrees:"{quantity}°",arcminutes:"{quantity}′",arcseconds:"{quantity}″",north:"N",south:"S",east:"E",west:"W",coordinate:"{coordinate}{direction}",coordinate_pair:"{latitude}, {longitude}"},wikidata:{identifier:"Identifier",label:"Label",description:"Description"},presets:{categories:{"category-barrier":{name:"Barrier Features"},"category-building":{name:"Building Features"},"category-golf":{name:"Golf Features"},"category-landuse":{name:"Land Use Features"},"category-natural-area":{name:"Natural Features"},"category-natural-line":{name:"Natural Features"},"category-natural-point":{name:"Natural Features"},"category-path":{name:"Path Features"},"category-rail":{name:"Rail Features"},"category-restriction":{name:"Restriction Features"},"category-road":{name:"Road Features"},"category-route":{name:"Route Features"},"category-utility":{name:"Utility Features"},"category-water-area":{name:"Water Features"},"category-water-line":{name:"Water Features"}},fields:{access_simple:{label:"Allowed Access"},access:{label:"Allowed Access",placeholder:"Not Specified",types:{access:"All",foot:"Foot",motor_vehicle:"Motor Vehicles",bicycle:"Bicycles",horse:"Horses"},options:{yes:{title:"Allowed",description:"Access allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}},address:{label:"Address",placeholders:{block_number:"Block Number","block_number!jp":"Block No.",city:"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town",conscriptionnumber:"123",country:"Country",county:"County","county!jp":"District",district:"District","district!vn":"Arrondissement/Town/District",floor:"Floor",hamlet:"Hamlet",housename:"Housename",housenumber:"123","housenumber!jp":"Building No./Lot No.",neighbourhood:"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza",place:"Place",postcode:"Postcode",province:"Province","province!jp":"Prefecture",quarter:"Quarter","quarter!jp":"Ōaza/Machi",state:"State",street:"Street",subdistrict:"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet",suburb:"Suburb","suburb!jp":"Ward",unit:"Unit"}},admin_level:{label:"Admin Level"},aerialway:{label:"Type"},"aerialway/access":{label:"Access",options:{entry:"Entry",exit:"Exit",both:"Both"}},"aerialway/bubble":{label:"Bubble"},"aerialway/capacity":{label:"Capacity (per hour)",placeholder:"500, 2500, 5000..."},"aerialway/duration":{label:"Duration (minutes)",placeholder:"1, 2, 3..."},"aerialway/heating":{label:"Heated"},"aerialway/occupancy":{label:"Occupancy",placeholder:"2, 4, 8..."},"aerialway/summer/access":{label:"Access (summer)",options:{entry:"Entry",exit:"Exit",both:"Both"}},aeroway:{label:"Type"},agrarian:{label:"Products"},amenity:{label:"Type"},animal_boarding:{label:"For Animals"},animal_breeding:{label:"For Animals"},animal_shelter:{label:"For Animals"},"area/highway":{label:"Type"},artist:{label:"Artist"},artwork_type:{label:"Type"},atm:{label:"ATM"},backrest:{label:"Backrest"},barrier:{label:"Type"},basin:{label:"Type"},"bath/open_air":{label:"Open Air"},"bath/sand_bath":{label:"Sand Bath"},"bath/type":{label:"Specialty",options:{onsen:"Japanese Onsen",foot_bath:"Foot Bath",hot_spring:"Hot Spring"}},beauty:{label:"Shop Type"},bench:{label:"Bench"},bicycle_parking:{label:"Type"},bin:{label:"Waste Bin"},blood_components:{label:"Blood Components",options:{whole:"whole blood",plasma:"plasma",platelets:"platelets",stemcells:"stem cell samples"}},board_type:{label:"Type"},booth:{label:"Booth"},boules:{label:"Type"},boundary:{label:"Type"},brand:{label:"Brand"},brewery:{label:"Draft Beers"},bridge:{label:"Type",placeholder:"Default"},"bridge/support":{label:"Type"},building_area:{label:"Building"},building:{label:"Building"},bunker_type:{label:"Type"},cables:{label:"Cables",placeholder:"1, 2, 3..."},"camera/direction":{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},"camera/mount":{label:"Camera Mount"},"camera/type":{label:"Camera Type",options:{fixed:"Fixed",panning:"Panning",dome:"Dome"}},capacity:{label:"Capacity",placeholder:"50, 100, 200..."},cash_in:{label:"Cash In"},castle_type:{label:"Type"},clothes:{label:"Clothes"},club:{label:"Type"},collection_times:{label:"Collection Times"},colour:{label:"Color"},comment:{label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},communication_multi:{label:"Communication Types"},construction:{label:"Type"},"contact/webcam":{label:"Webcam URL",placeholder:"http://example.com/"},content:{label:"Content"},conveying:{label:"Movement Direction",options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}},country:{label:"Country"},covered:{label:"Covered"},craft:{label:"Type"},"crane/type":{label:"Crane Type",options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}},crop:{label:"Crops"},crossing:{label:"Type"},cuisine:{label:"Cuisines"},currency_multi:{label:"Currency Types"},cutting:{label:"Type",placeholder:"Default"},cycle_network:{label:"Network"},cycleway:{label:"Bike Lanes",placeholder:"none",types:{"cycleway:left":"Left side","cycleway:right":"Right side"},options:{none:{title:"None",description:"No bike lane"},lane:{title:"Standard bike lane",description:"A bike lane separated from auto traffic by a painted line"},shared_lane:{title:"Shared bike lane",description:"A bike lane with no separation from auto traffic"},track:{title:"Bike track",description:"A bike lane separated from traffic by a physical barrier"},share_busway:{title:"Bike lane shared with bus",description:"A bike lane shared with a bus lane"},opposite_lane:{title:"Opposite bike lane",description:"A bike lane that travels in the opposite direction of traffic"},opposite:{title:"Contraflow bike lane",description:"A bike lane that travels in both directions on a one-way street"}}},"dance/style":{label:"Dance Styles"},date:{label:"Date"},delivery:{label:"Delivery"},denomination:{label:"Denomination"},denotation:{label:"Denotation"},description:{label:"Description"},design:{label:"Design"},devices:{label:"Devices",placeholder:"1, 2, 3..."},diaper:{label:"Diaper Changing Available"},direction_cardinal:{label:"Direction",options:{N:"North",E:"East",S:"South",W:"West",NE:"Northeast",SE:"Southeast",SW:"Southwest",NW:"Northwest",NNE:"North-northeast",ENE:"East-northeast",ESE:"East-southeast",SSE:"South-southeast",SSW:"South-southwest",WSW:"West-southwest",WNW:"West-northwest",NNW:"North-northwest"}},direction_clock:{label:"Direction",options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}},direction_vertex:{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},direction:{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{label:"Dispenses Prescriptions"},display:{label:"Display"},distance:{label:"Distance"},dock:{label:"Type"},drive_through:{label:"Drive-Through"},duration:{label:"Duration",placeholder:"00:00"},electrified:{label:"Electrification",placeholder:"Contact Line, Electrified Rail...",options:{contact_line:"Contact Line",rail:"Electrified Rail",yes:"Yes (unspecified)",no:"No"}},elevation:{label:"Elevation"},email:{label:"Email",placeholder:"example@example.com"},embankment:{label:"Type",placeholder:"Default"},emergency:{label:"Emergency"},entrance:{label:"Type"},except:{label:"Exceptions"},faces:{label:"Faces"},fax:{label:"Fax",placeholder:"+31 42 123 4567"},fee:{label:"Fee"},fence_type:{label:"Type"},"fire_hydrant/position":{label:"Position",options:{lane:"Lane",parking_lot:"Parking Lot",sidewalk:"Sidewalk",green:"Green"}},"fire_hydrant/type":{label:"Type",options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pond:"Pond"}},fireplace:{label:"Fireplace"},fitness_station:{label:"Equipment Type"},fixme:{label:"Fix Me"},"flag/type":{label:"Flag Type"},ford:{label:"Type",placeholder:"Default"},frequency:{label:"Operating Frequency"},from:{label:"From"},fuel_multi:{label:"Fuel Types"},fuel:{label:"Fuel"},gauge:{label:"Gauge"},gender:{label:"Gender",placeholder:"Unknown",options:{male:"Male",female:"Female",unisex:"Unisex"}},"generator/method":{label:"Method"},"generator/output/electricity":{label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW..."},"generator/source":{label:"Source"},"generator/type":{label:"Type"},government:{label:"Type"},grape_variety:{label:"Grape Varieties"},handicap:{label:"Handicap",placeholder:"1-18"},handrail:{label:"Handrail"},hashtags:{label:"Suggested Hashtags",placeholder:"#example"},healthcare:{label:"Type"},"healthcare/speciality":{label:"Specialties"},height:{label:"Height (Meters)"},highway:{label:"Type"},historic:{label:"Type"},"historic/civilization":{label:"Historic Civilization"},"historic/wreck/date_sunk":{label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{label:"Visible At Low Tide"},hoops:{label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{label:"Dressage Riding",options:{"undefined":"No",equestrian:"Yes"}},horse_riding:{label:"Horseback Riding",options:{"undefined":"No",horse_riding:"Yes"}},horse_scale:{label:"Horseback Riding Difficulty",placeholder:"Difficult, Dangerous...",options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}},horse_stables:{label:"Riding Stable",options:{"undefined":"No",stables:"Yes"}},iata:{label:"IATA"},icao:{label:"ICAO"},incline_steps:{label:"Incline",options:{up:"Up",down:"Down"}},incline:{label:"Incline"},indoor:{label:"Indoor"},industrial:{label:"Type"},information:{label:"Type"},inscription:{label:"Inscription"},intermittent_yes:{label:"Intermittent"},intermittent:{label:"Intermittent"},internet_access:{label:"Internet Access",options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}},"internet_access/fee":{label:"Internet Access Fee"},"internet_access/ssid":{label:"SSID (Network Name)"},kerb:{label:"Curb"},label:{label:"Label"},lamp_type:{label:"Type"},landuse:{label:"Type"},lanes:{label:"Lanes",placeholder:"1, 2, 3..."},language_multi:{label:"Languages"},layer:{label:"Layer",placeholder:"0"},leaf_cycle_singular:{label:"Leaf Cycle",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous"}},leaf_cycle:{label:"Leaf Cycle",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous",mixed:"Mixed"}},leaf_type_singular:{label:"Leaf Type",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",leafless:"Leafless"}},leaf_type:{label:"Leaf Type",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",mixed:"Mixed",leafless:"Leafless"}},leisure:{label:"Type"},length:{label:"Length (Meters)"},level:{label:"Level"},levels:{label:"Levels",placeholder:"2, 4, 6..."},lit:{label:"Lit"},location_pool:{label:"Location",options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}},location:{label:"Location"},man_made:{label:"Type"},manhole:{label:"Type"},map_size:{label:"Coverage"},map_type:{label:"Type"},material:{label:"Material"},maxheight:{label:"Max Height",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},maxspeed:{label:"Speed Limit",placeholder:"40, 50, 60..."},"maxspeed/advisory":{label:"Advisory Speed Limit",placeholder:"40, 50, 60..."},maxstay:{label:"Max Stay"},maxweight:{label:"Max Weight"},memorial:{label:"Type"},monitoring_multi:{label:"Monitoring"},"mtb/scale":{label:"Mountain Biking Difficulty",placeholder:"0, 1, 2, 3...",options:{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}},"mtb/scale/imba":{label:"IMBA Trail Difficulty",placeholder:"Easy, Medium, Difficult...",options:{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}},"mtb/scale/uphill":{label:"Mountain Biking Uphill Difficulty",placeholder:"0, 1, 2, 3...",options:{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}},name:{label:"Name",placeholder:"Common name (if any)"},natural:{label:"Natural"},network_bicycle:{label:"Network Type",placeholder:"Local, Regional, National, International",options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}},network_foot:{label:"Network Type",placeholder:"Local, Regional, National, International",options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}},network_horse:{label:"Network Type",placeholder:"Local, Regional, National, International",options:{lhn:"Local",rhn:"Regional",nhn:"National",ihn:"International"}},network_road:{label:"Network"},network:{label:"Network"},note:{label:"Note"},office:{label:"Type"},oneway_yes:{label:"One Way",options:{"undefined":"Assumed to be Yes",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},oneway:{label:"One Way",options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},opening_hours:{label:"Hours"},operator:{label:"Operator"},outdoor_seating:{label:"Outdoor Seating"},par:{label:"Par",placeholder:"3, 4, 5..."},park_ride:{label:"Park and Ride"},parking:{label:"Type",options:{surface:"Surface","multi-storey":"Multilevel",underground:"Underground",sheds:"Sheds",carports:"Carports",garage_boxes:"Garage Boxes",lane:"Roadside Lane"}},passenger_information_display:{label:"Passenger information display"},payment_multi:{label:"Payment Types"},phases:{label:"Phases",placeholder:"1, 2, 3..."},phone:{label:"Telephone",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice (instructional)",easy:"Easy (green circle)",intermediate:"Intermediate (blue square)",advanced:"Advanced (black diamond)",expert:"Expert (double black diamond)",freeride:"Freeride (off-piste)",extreme:"Extreme (climbing equipment required)"}},"piste/difficulty_nordic":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}},"piste/difficulty_skitour":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}},"piste/difficulty":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}},"piste/grooming_downhill":{label:"Grooming",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}},"piste/grooming_hike":{label:"Grooming",options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}},"piste/grooming_nordic":{label:"Grooming",options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"piste/grooming":{label:"Grooming",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"piste/type":{label:"Type",options:{downhill:"Downhill",nordic:"Nordic",skitour:"Skitour",sled:"Sled",hike:"Hike",sleigh:"Sleigh",ice_skate:"Ice Skate",snow_park:"Snow Park",playground:"Playground",connection:"Connection"}},place:{label:"Type"},plant:{label:"Plant"},"plant/output/electricity":{label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},"playground/baby":{label:"Baby Seat"},"playground/max_age":{label:"Maximum Age"},"playground/min_age":{label:"Minimum Age"},population:{label:"Population"},power_supply:{label:"Power Supply"},power:{label:"Type"},produce:{label:"Produce"},product:{label:"Products"},railway:{label:"Type"},"railway/position":{label:"Milestone Position",placeholder:"Distance to one decimal (123.4)"},"railway/signal/direction":{label:"Direction",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},rating:{label:"Power Rating"},recycling_accepts:{label:"Accepts"},recycling_type:{label:"Type",placeholder:"Container, Center",options:{container:"Container",centre:"Center"}},ref_aeroway_gate:{label:"Gate Number"},ref_golf_hole:{label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{label:"Junction Number"},ref_platform:{label:"Platform Number"},ref_road_number:{label:"Road Number"},ref_route:{label:"Route Number"},ref_runway:{label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{label:"Stop Number"},ref_taxiway:{label:"Taxiway Name",placeholder:"e.g. A5"},ref:{label:"Reference Code"},"ref/isil":{label:"ISIL Code"},relation:{label:"Type"},religion:{label:"Religion"},restriction:{label:"Type"},restrictions:{label:"Turn Restrictions"},rooms:{label:"Rooms"},route_master:{label:"Type"},route:{label:"Type"},sac_scale:{label:"Hiking Difficulty",placeholder:"Mountain Hiking, Alpine Hiking...",options:{hiking:"T1: Hiking",mountain_hiking:"T2: Mountain Hiking",demanding_mountain_hiking:"T3: Demanding Mountain Hiking",alpine_hiking:"T4: Alpine Hiking",demanding_alpine_hiking:"T5: Demanding Alpine Hiking",difficult_alpine_hiking:"T6: Difficult Alpine Hiking"}},sanitary_dump_station:{label:"Toilet Disposal"},scuba_diving:{label:"Services"},"seamark/beacon_isolated_danger/shape":{label:"Shape"},"seamark/beacon_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}},"seamark/beacon_lateral/colour":{label:"Color",options:{red:"Red",green:"Green",grey:"Grey"}},"seamark/beacon_lateral/shape":{label:"Shape"},"seamark/beacon_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/buoy_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}},"seamark/buoy_lateral/colour":{label:"Color",options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}},"seamark/buoy_lateral/shape":{label:"Shape"},"seamark/buoy_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/mooring/category":{label:"Category"