]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/4843'
authorTom Hughes <tom@compton.nu>
Thu, 30 May 2024 15:33:59 +0000 (16:33 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 30 May 2024 15:33:59 +0000 (16:33 +0100)
58 files changed:
Gemfile.lock
app/assets/images/directions.png [deleted file]
app/assets/javascripts/application.js
app/assets/javascripts/index/browse.js
app/assets/stylesheets/common.scss
app/controllers/api/capabilities_controller.rb
app/controllers/api/changeset_comments_controller.rb
app/controllers/api/changesets_controller.rb
app/controllers/api/map_controller.rb
app/controllers/api/nodes_controller.rb
app/controllers/api/notes_controller.rb
app/controllers/api/old_elements_controller.rb
app/controllers/api/permissions_controller.rb
app/controllers/api/relations_controller.rb
app/controllers/api/tracepoints_controller.rb
app/controllers/api/traces_controller.rb
app/controllers/api/user_blocks_controller.rb
app/controllers/api/user_preferences_controller.rb
app/controllers/api/users_controller.rb
app/controllers/api/versions_controller.rb
app/controllers/api/ways_controller.rb
app/controllers/api_controller.rb
app/controllers/site_controller.rb
app/controllers/users_controller.rb
app/models/trace.rb
app/views/accounts/edit.html.erb
app/views/application/_auth_providers.html.erb
app/views/layouts/_header.html.erb
app/views/layouts/_search.html.erb
app/views/notes/new.html.erb
app/views/notes/show.html.erb
app/views/sessions/new.html.erb
app/views/users/new.html.erb
config/initializers/abstract_adapter.rb
config/initializers/content_security_policy.rb
config/initializers/cors.rb
config/initializers/i18n.rb
config/initializers/mail_delivery_job.rb
config/initializers/oauth.rb
config/initializers/router.rb
config/initializers/rtlcss.rb
config/locales/bn.yml
config/locales/br.yml
config/locales/cs.yml
config/locales/diq.yml
config/locales/et.yml
config/locales/fr.yml
config/locales/ko.yml
config/locales/pa.yml
config/locales/pt-PT.yml
config/locales/ru.yml
config/locales/sv.yml
config/locales/zh-CN.yml
lib/osm.rb
test/controllers/api/capabilities_controller_test.rb
test/controllers/api/versions_controller_test.rb
test/integration/user_creation_test.rb
yarn.lock

index bf78a3d3d181d2130ec4ee1436b83ad83af866ff..4c7bba388912ab8206d1b0b1d899f04569933f40 100644 (file)
@@ -95,13 +95,13 @@ GEM
     autoprefixer-rails (10.4.16.0)
       execjs (~> 2)
     aws-eventstream (1.3.0)
-    aws-partitions (1.931.0)
+    aws-partitions (1.934.0)
     aws-sdk-core (3.196.1)
       aws-eventstream (~> 1, >= 1.3.0)
       aws-partitions (~> 1, >= 1.651.0)
       aws-sigv4 (~> 1.8)
       jmespath (~> 1, >= 1.6.1)
-    aws-sdk-kms (1.81.0)
+    aws-sdk-kms (1.82.0)
       aws-sdk-core (~> 3, >= 3.193.0)
       aws-sigv4 (~> 1.1)
     aws-sdk-s3 (1.151.0)
@@ -140,7 +140,7 @@ GEM
     builder (3.2.4)
     bzip2-ffi (1.1.1)
       ffi (~> 1.0)
-    cancancan (3.5.0)
+    cancancan (3.6.1)
     canonical-rails (0.2.15)
       actionview (>= 4.1, <= 7.2)
     capybara (3.40.0)
@@ -153,7 +153,7 @@ GEM
       regexp_parser (>= 1.5, < 3.0)
       xpath (~> 3.2)
     concurrent-ruby (1.2.3)
-    config (5.4.0)
+    config (5.5.0)
       deep_merge (~> 1.2, >= 1.2.1)
     connection_pool (2.4.1)
     crack (1.0.0)
@@ -198,7 +198,7 @@ GEM
       concurrent-ruby (~> 1.0)
       dry-core (~> 1.0, < 2)
       zeitwerk (~> 2.6)
-    dry-schema (1.13.3)
+    dry-schema (1.13.4)
       concurrent-ruby (~> 1.0)
       dry-configurable (~> 1.0, >= 1.0.1)
       dry-core (~> 1.0, < 2)
@@ -330,7 +330,7 @@ GEM
     mini_portile2 (2.8.6)
     mini_racer (0.9.0)
       libv8-node (~> 18.19.0.0)
-    minitest (5.23.0)
+    minitest (5.23.1)
     minitest-focus (1.4.0)
       minitest (>= 4, < 6)
     msgpack (1.7.2)
@@ -369,8 +369,9 @@ GEM
       hashie (>= 3.4.6)
       rack (>= 1.6.2, < 3)
       rack-protection
-    omniauth-facebook (9.0.0)
-      omniauth-oauth2 (~> 1.2)
+    omniauth-facebook (10.0.0)
+      bigdecimal
+      omniauth-oauth2 (>= 1.2, < 3)
     omniauth-github (2.0.1)
       omniauth (~> 2.0)
       omniauth-oauth2 (~> 1.8)
@@ -474,7 +475,7 @@ GEM
     rb-fsevent (0.11.2)
     rb-inotify (0.11.1)
       ffi (~> 1.0)
-    rdoc (6.6.3.1)
+    rdoc (6.7.0)
       psych (>= 4.0.0)
     regexp_parser (2.9.2)
     reline (0.5.7)
@@ -488,7 +489,7 @@ GEM
     rouge (4.2.1)
     rtlcss (0.2.1)
       mini_racer (>= 0.6.3)
-    rubocop (1.63.5)
+    rubocop (1.64.0)
       json (~> 2.3)
       language_server-protocol (>= 3.17.0)
       parallel (~> 1.10)
@@ -541,8 +542,7 @@ GEM
     simplecov-html (0.12.3)
     simplecov-lcov (0.8.0)
     simplecov_json_formatter (0.1.4)
-    simpleidn (0.2.2)
-      unf (~> 0.1.4)
+    simpleidn (0.2.3)
     smart_properties (1.17.0)
     snaky_hash (2.0.1)
       hashie
@@ -574,9 +574,6 @@ GEM
       railties (>= 6.0.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)
-    unf (0.1.4)
-      unf_ext
-    unf_ext (0.0.9.1)
     unicode-display_width (2.5.0)
     uri (0.13.0)
     validates_email_format_of (1.8.2)
@@ -584,7 +581,7 @@ GEM
       simpleidn
     vendorer (0.2.0)
     version_gem (1.1.4)
-    webmock (3.23.0)
+    webmock (3.23.1)
       addressable (>= 2.8.0)
       crack (>= 0.3.2)
       hashdiff (>= 0.4.0, < 2.0.0)
@@ -595,7 +592,7 @@ GEM
     websocket-extensions (0.1.5)
     xpath (3.2.0)
       nokogiri (~> 1.8)
-    zeitwerk (2.6.14)
+    zeitwerk (2.6.15)
 
 PLATFORMS
   ruby
diff --git a/app/assets/images/directions.png b/app/assets/images/directions.png
deleted file mode 100644 (file)
index 197244f..0000000
Binary files a/app/assets/images/directions.png and /dev/null differ
index 20976d15a56ff93264d1d81a511c564840517904..05474212645361fd975d3a0e188edbe1c4bdae81 100644 (file)
@@ -106,6 +106,7 @@ $(document).ready(function () {
     $("body").removeClass("compact-nav");
 
     $("header").removeClass("text-nowrap");
+    $("header nav.secondary > ul").removeClass("flex-nowrap");
 
     updateHeader();
 
index 69d625ecab5420ca85f83bcb1a2a0895ef5ec44e..7a761b50036dd30d02c1ec2d2fd0ca16f6b660d0 100644 (file)
@@ -58,7 +58,7 @@ OSM.initializeBrowse = function (map) {
               .click(cancel))),
         $("<p class='alert alert-warning'>")
           .text(I18n.t("browse.start_rjs.feature_warning", { num_features: count, max_features: limit })),
-        $("<input type='submit' class='btn btn-primary'>")
+        $("<input type='submit' class='btn btn-primary d-block mx-auto'>")
           .val(I18n.t("browse.start_rjs.load_data"))
           .click(add)));
   }
index 7c216ad4b861a7c9bf2c92efe92bb61e72b868dc..4b7380ffcc8aef2fd8d2aa035338a312ce7a1ef9 100644 (file)
@@ -16,8 +16,6 @@ time[title] {
   text-decoration: underline dotted;
 }
 
-#container { position: relative; }
-
 /* Rules for icons */
 
 .icon {
@@ -98,10 +96,6 @@ header {
   position: relative;
   font-size: 14px;
 
-  h1, nav, nav > ul, nav > ul > li {
-    display: inline-block;
-  }
-
   > * {
     padding: $lineheight * 0.5;
   }
@@ -118,6 +112,10 @@ header {
   nav.primary {
     margin-right: auto;
   }
+
+  .username {
+    max-width: 12em;
+  }
 }
 
 nav.primary {
@@ -154,7 +152,7 @@ nav.primary {
 
 nav.secondary {
   .nav-link {
-    padding: 0.2rem;
+    padding: 0.3rem;
   }
 }
 
@@ -191,7 +189,7 @@ body.small-nav {
     min-height: $headerHeight;
 
     &.closed nav {
-      display: none;
+      display: none !important;
     }
 
     .search_forms {
@@ -216,6 +214,8 @@ body.small-nav {
   }
 
   nav.secondary {
+    flex-direction: column;
+
     .user-menu, .login-menu {
       width: 100%;
     }
@@ -489,16 +489,6 @@ body.small-nav {
 
 .donate-attr { color: darken($green, 10%) !important; }
 
-/* Rules for the sidebar */
-
-#browse_status {
-  input {
-    display: block;
-    margin-left: auto;
-    margin-right: auto;
-  }
-}
-
 /* Temporary label size override until we remove site-wide font customisation */
 
 form {
@@ -580,10 +570,6 @@ tr.turn {
 
 .routing_marker { width: 15px; cursor: move; }
 
-.browse_status {
-  display: none;
-}
-
 /* Rules for the history sidebar */
 
 #sidebar .changesets {
@@ -637,16 +623,6 @@ tr.turn {
   }
 }
 
-/* Bootstrap buttons don't have any vertical margin, so
-   they touch when adjacent buttons wrap onto a new line
-   e.g. wide form buttons on a narrow sidebar */
-
-.btn-wrapper {
-  > .btn {
-    margin-bottom: $spacer * 0.25;
-  }
-}
-
 /* Force LTR/RTL alignment for placeholder text */
 
 .form-control::placeholder {
index 80222c40bd93fb622753a5d672841cbe1fa2d12d..cbdcace0cd80b1a7c87ea47535b2cb81328b75fa 100644 (file)
@@ -1,5 +1,7 @@
 module Api
   class CapabilitiesController < ApiController
+    skip_before_action :check_api_readable
+
     authorize_resource :class => false
 
     before_action :set_request_formats
index e8d3f4c3a8df2c5dbcc1ae77f864d77057846449..4a96ec3bbaef00087e8b03a464c7ee78e65c56c2 100644 (file)
@@ -1,7 +1,6 @@
 module Api
   class ChangesetCommentsController < ApiController
     before_action :check_api_writable
-    before_action :check_api_readable, :except => [:create]
     before_action :authorize
 
     authorize_resource
index 2e21f0c75e10387bbec4126c03c073ffd2fd20c9..3d59eeb171e4232c70d5fe1b68dc5252a6d4de2b 100644 (file)
@@ -3,7 +3,6 @@
 module Api
   class ChangesetsController < ApiController
     before_action :check_api_writable, :only => [:create, :update, :upload, :subscribe, :unsubscribe]
-    before_action :check_api_readable, :except => [:index, :create, :update, :upload, :download, :subscribe, :unsubscribe]
     before_action :setup_user_auth, :only => [:show]
     before_action :authorize, :only => [:create, :update, :upload, :close, :subscribe, :unsubscribe]
 
index 5a05f6de2b527e6c236b665007ab8a5cd309b534..6d4a9feb6c3d8062cf141fb375eca35a42da018e 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class MapController < ApiController
-    before_action :check_api_readable
-
     authorize_resource :class => false
 
     around_action :api_call_handle_error, :api_call_timeout
index dc7d04dc5792d93698aa7ddc8b899a0592485c86..5aad78dbffb91bfc99c36f36adcbb20893b2d5dc 100644 (file)
@@ -3,7 +3,6 @@
 module Api
   class NodesController < ApiController
     before_action :check_api_writable, :only => [:create, :update, :delete]
-    before_action :check_api_readable, :except => [:create, :update, :delete]
     before_action :authorize, :only => [:create, :update, :delete]
 
     authorize_resource
index 8a0a82c40150687063fbf0720b5114c409c73725..d53059a94e0f019f1e56e374e332d8b6f483f07f 100644 (file)
@@ -1,6 +1,5 @@
 module Api
   class NotesController < ApiController
-    before_action :check_api_readable
     before_action :check_api_writable, :only => [:create, :comment, :close, :reopen, :destroy]
     before_action :setup_user_auth, :only => [:create, :show]
     before_action :authorize, :only => [:close, :reopen, :destroy, :comment]
index 6a468a900631953247414ecee55145745c393e62..2343252dbb0a63243ece6e1c90c9de0875dfee4c 100644 (file)
@@ -3,7 +3,6 @@
 # nodes, ways and relations are basically identical.
 module Api
   class OldElementsController < ApiController
-    before_action :check_api_readable
     before_action :check_api_writable, :only => [:redact]
     before_action :setup_user_auth, :only => [:history, :show]
     before_action :authorize, :only => [:redact]
index 8c0c949dc2c71302f64b1611f2977961a71d7718..717bbfa6f7fd1c23428c9d952b1e18d55ef5032b 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class PermissionsController < ApiController
-    before_action :check_api_readable
-
     authorize_resource :class => false
 
     before_action :setup_user_auth
index e82ac6368a371fb43bb2bfaa6e7db071f3f0ddef..5fb99dbd18a390e1e234308bcf78b90f05a36939 100644 (file)
@@ -1,7 +1,6 @@
 module Api
   class RelationsController < ApiController
     before_action :check_api_writable, :only => [:create, :update, :delete]
-    before_action :check_api_readable, :except => [:create, :update, :delete]
     before_action :authorize, :only => [:create, :update, :delete]
 
     authorize_resource
index f38351de96f0884e0a69aecebbb430871ad2c231..d8d9da98b680f62729b503085a5ab36c40e318cc 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class TracepointsController < ApiController
-    before_action :check_api_readable
-
     authorize_resource
 
     around_action :api_call_handle_error, :api_call_timeout
index 956bcde6e82dccabb23e022919d0d87673e74ec3..738642fff7dc56531bec8d550c3a5f31dcc414b6 100644 (file)
@@ -1,14 +1,11 @@
 module Api
   class TracesController < ApiController
-    before_action :check_database_readable, :except => [:show, :data]
-    before_action :check_database_writable, :only => [:create, :update, :destroy]
+    before_action :check_api_writable, :only => [:create, :update, :destroy]
     before_action :set_locale
     before_action :authorize
 
     authorize_resource
 
-    before_action :check_api_readable, :only => [:show, :data]
-    before_action :check_api_writable, :only => [:create, :update, :destroy]
     before_action :offline_error, :only => [:create, :destroy, :data]
     around_action :api_call_handle_error
 
index 19fd4b400b043c8736d29cab5fb236e37240856f..6c285e14a253d50e45daa31ef57134071560a708 100644 (file)
@@ -1,7 +1,5 @@
 module Api
   class UserBlocksController < ApiController
-    before_action :check_api_readable
-
     authorize_resource
 
     around_action :api_call_handle_error, :api_call_timeout
index 99d224c516ca5ec132f1ce236acea4ce3774fd3f..cb852ce881aa10909a267e776aa884c406e388b4 100644 (file)
@@ -1,6 +1,7 @@
 # Update and read user preferences, which are arbitrary key/val pairs
 module Api
   class UserPreferencesController < ApiController
+    before_action :check_api_writable, :only => [:update_all, :update, :destroy]
     before_action :authorize
 
     authorize_resource
index 6fa47095a16f9c062ba246100bea989ff7dd9ecb..5ff275ee9dc52f268b250d52f445dd71a3295b1c 100644 (file)
@@ -1,6 +1,5 @@
 module Api
   class UsersController < ApiController
-    before_action :check_api_readable
     before_action :disable_terms_redirect, :only => [:details]
     before_action :setup_user_auth, :only => [:show, :index]
     before_action :authorize, :only => [:details, :gpx_files]
index d5c9c5f87cebf2036316655c72013b49b55b4832..d311a18d24f14a1b3304bc3b8c7325272a805323 100644 (file)
@@ -1,5 +1,6 @@
 module Api
   class VersionsController < ApiController
+    skip_before_action :check_api_readable
     authorize_resource :class => false
 
     before_action :set_request_formats
index f8254d8027bacbd43fe8e0c6c641c78b8b04e338..4099e16763f15554e7b33de5f35cffb7eb8885f9 100644 (file)
@@ -1,7 +1,6 @@
 module Api
   class WaysController < ApiController
     before_action :check_api_writable, :only => [:create, :update, :delete]
-    before_action :check_api_readable, :except => [:create, :update, :delete]
     before_action :authorize, :only => [:create, :update, :delete]
 
     authorize_resource
index edafac7ccdc44f3f75f07e0f3a082909a793bfea..ff7f694c5eb63bac0ac23c7e00ba454630f7ac69 100644 (file)
@@ -1,6 +1,8 @@
 class ApiController < ApplicationController
   skip_before_action :verify_authenticity_token
 
+  before_action :check_api_readable
+
   private
 
   ##
index 172be56531df7e444e4c7ed3b94236480378c660..15ffe58a2616765eac3b34474b9dd0542447cb33 100644 (file)
@@ -18,8 +18,8 @@ class SiteController < ApplicationController
 
   content_security_policy(:only => :id) do |policy|
     policy.connect_src("*")
-    policy.img_src("*", :blob)
-    policy.script_src(*policy.script_src, "dev.virtualearth.net", :unsafe_eval)
+    policy.img_src(*policy.img_src, "*", :blob)
+    policy.script_src(*policy.script_src, :unsafe_eval)
     policy.style_src(*policy.style_src, :unsafe_inline)
   end
 
index 186e06120e0f70de52db61d112ec88c82240b9c5..b7c156bd913e98e11cdad31d496c14ef12fd5891 100644 (file)
@@ -98,13 +98,8 @@ class UsersController < ApplicationController
       if current_user.invalid?
         # Something is wrong with a new user, so rerender the form
         render :action => "new"
-      elsif current_user.auth_provider.present?
-        # Verify external authenticator before moving on
-        session[:new_user] = current_user.slice("email", "display_name", "pass_crypt", "pass_crypt_confirmation")
-        redirect_to auth_url(current_user.auth_provider, current_user.auth_uid), :status => :temporary_redirect
       else
         # Save the user record
-        session[:new_user] = current_user.slice("email", "display_name", "pass_crypt", "pass_crypt_confirmation")
         save_new_user params[:email_hmac], params[:referer]
       end
     end
@@ -219,12 +214,6 @@ class UsersController < ApplicationController
       session[:user_errors] = current_user.errors.as_json
 
       redirect_to edit_account_path
-    elsif session[:new_user]
-      session[:new_user]["auth_provider"] = provider
-      session[:new_user]["auth_uid"] = uid
-
-      email_hmac = UsersController.message_hmac(email) if email_verified && email
-      save_new_user email_hmac, referer
     else
       user = User.find_by(:auth_provider => provider, :auth_uid => uid)
 
@@ -248,7 +237,7 @@ class UsersController < ApplicationController
       else
         email_hmac = UsersController.message_hmac(email) if email_verified && email
         redirect_to :action => "new", :nickname => name, :email => email, :email_hmac => email_hmac,
-                    :auth_provider => provider, :auth_uid => uid
+                    :auth_provider => provider, :auth_uid => uid, :referer => referer
       end
     end
   end
@@ -273,8 +262,6 @@ class UsersController < ApplicationController
   private
 
   def save_new_user(email_hmac, referer = nil)
-    new_user = session.delete(:new_user)
-    self.current_user = User.new(new_user)
     if check_signup_allowed(current_user.email)
       current_user.data_public = true
       current_user.description = "" if current_user.description.nil?
index d1f917571a21287f5de4e0a7a290e8e8337babb3..20723b98d01ddc7e0efe3d732879c12c8345d77b 100644 (file)
@@ -81,7 +81,7 @@ class Trace < ApplicationRecord
             :content_type => content_type(attachable.path),
             :identify => false)
     else
-      super(attachable)
+      super
     end
   end
 
index dc649cbf491fb9a2925f1fd0303a26ff0234b8fa..f15bc195c584d7614bfe1548f08fa4a63d24d860 100644 (file)
     </span>
   </div>
 
-  <div class="row justify-content-between">
-    <div class="col-auto btn-wrapper">
+  <div class="row justify-content-between g-1">
+    <div class="col-auto">
       <%= f.primary t(".save changes button") %>
     </div>
-    <div class="col-auto btn-wrapper">
+    <div class="col-auto">
       <%= link_to t(".delete_account"), account_deletion_path, :class => "btn btn-outline-danger" %>
     </div>
   </div>
index 554ec8ddaa30c235b02e7efb603506c96518b636..0cbb529a500c70a34be6dc605dcfc3d469328fdc 100644 (file)
@@ -1,29 +1,42 @@
 <div>
-  <div class="list-inline justify-content-center d-flex align-items-center flex-wrap mb-3 gap-3" id="login_auth_buttons">
+  <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-100 mb-3" id="login_auth_buttons">
 
+    <% prefered_auth_button_available = false %>
     <% %w[google facebook microsoft github wikipedia].each do |provider| %>
       <% if Settings.key?("#{provider}_auth_id".to_sym) -%>
         <% if @preferred_auth_provider == provider %>
-          <div class="mx-2"><%= auth_button_preferred provider, provider %></div>
+          <% prefered_auth_button_available = true %>
         <% end %>
       <% end -%>
     <% end -%>
 
-    <div class="justify-content-center d-flex gap-1">
-      <div>
-        <%= link_to image_tag("openid.png",
-                              :alt => t("application.auth_providers.openid.title"),
-                              :size => "24"),
-                    "#",
-                    :id => "openid_open_url",
-                    :title => t("application.auth_providers.openid.title"),
-                    :class => "p-2 d-block" %>
+    <% if prefered_auth_button_available %>
+      <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-50">
+        <% %w[google facebook microsoft github wikipedia].each do |provider| %>
+          <% if Settings.key?("#{provider}_auth_id".to_sym) -%>
+            <% if @preferred_auth_provider == provider %>
+              <%= auth_button_preferred provider, provider %>
+            <% end %>
+          <% end -%>
+        <% end -%>
       </div>
+      <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-50">
+    <% else %>
+      <div class="list-inline justify-content-center d-flex align-items-center flex-wrap w-100">
+    <% end %>
+
+      <%= link_to image_tag("openid.png",
+                            :alt => t("application.auth_providers.openid.title"),
+                            :size => "24"),
+                  "#",
+                  :id => "openid_open_url",
+                  :title => t("application.auth_providers.openid.title"),
+                  :class => "p-2 d-block" %>
 
       <% %w[google facebook microsoft github wikipedia].each do |provider| %>
         <% unless @preferred_auth_provider == provider %>
           <% if Settings.key?("#{provider}_auth_id".to_sym) -%>
-            <div><%= auth_button provider, provider %></div>
+            <%= auth_button provider, provider %>
           <% end -%>
         <% end %>
       <% end -%>
index 7f2880a1c9f6b91dd7c784b66197370396213a19..77ef647a0d7817877544df342fee46024963e338 100644 (file)
@@ -31,8 +31,8 @@
       <%= link_to t("layouts.export"), export_path, :class => "btn btn-outline-primary geolink", :id => "export_tab" %>
     </div>
   </nav>
-  <nav class='secondary'>
-    <ul class='mx-1 px-0'>
+  <nav class='secondary d-flex gap-2 align-items-center'>
+    <ul class='nav flex-nowrap'>
       <% if Settings.status != "database_offline" && can?(:index, Issue) %>
         <li class="compact-hide nav-item">
           <%= link_to issues_path(:status => "open"), :class => header_nav_link_class(issues_path) do %>
     </ul>
     <% if current_user && current_user.id %>
       <div class='d-inline-flex dropdown user-menu logged-in'>
-        <button class='dropdown-toggle btn btn-outline-secondary border-secondary-subtle bg-body text-secondary px-2 py-1 flex-grow-1' type='button' data-bs-toggle='dropdown'>
+        <button class='d-flex gap-1 align-items-center justify-content-center dropdown-toggle btn btn-outline-secondary border-secondary-subtle bg-body text-secondary px-2 py-1 flex-grow-1' type='button' data-bs-toggle='dropdown'>
           <%= user_thumbnail_tiny(current_user, :width => 25, :height => 25, :class => "user_thumbnail_tiny rounded-1 bg-body") %>
           <% if current_user.new_messages.size > 0 %>
-            <span class="badge count-number m-1"><%= current_user.new_messages.size %></span>
+            <span class="badge count-number position-static m-1"><%= current_user.new_messages.size %></span>
           <% end %>
-          <span class='username'>
+          <span class='username align-middle text-truncate'>
             <%= current_user.display_name %>
           </span>
         </button>
index 41529e0c2d92293b58bcd9c16d33382183b54d4b..da9aa1c9e4ab89b4f6d3bc31cd54f03783925513 100644 (file)
         </div>
       </div>
       <div class="col-auto">
-        <%= link_to image_tag("directions.png", :width => "20", :height => "20", :class => "align-bottom"), directions_path, :class => "btn btn-sm btn-primary switch_link", :title => t("site.search.get_directions_title") %>
+        <%= link_to directions_path, :class => "btn btn-sm btn-primary px-1 switch_link", :title => t("site.search.get_directions_title") do %>
+          <svg width="28" height="20" class="align-bottom">
+            <path d="M11.5 9.5 v-3h3v-1l-5 -5l-5 5v1h3v6" fill="none" stroke="#fff8" />
+            <path d="M7.5 19.5h4v-5a1 1 0 0 1 1 -1h5v3h1l5 -5l-5 -5h-1v3h-6a4 4 0 0 0 -4 4z" fill="#fff8" stroke="#fff" />
+          </svg>
+        <% end %>
       </div>
     </div>
   </form>
index 6728b32ffbc6a501abb252fc6941b3ec3e2cfdcd..c9b1275b9493f43c9bca1525341dd9b6910af7d2 100644 (file)
@@ -15,7 +15,7 @@
     <div class="mb-3">
       <textarea class="form-control" name="text" cols="40" rows="10" maxlength="2000" placeholder="<%= t(".advice") %>"></textarea>
     </div>
-    <div class="btn-wrapper">
+    <div>
       <input type="submit" name="add" value="<%= t(".add") %>" disabled="1" class="btn btn-primary">
     </div>
   </form>
index b3f1244338dc6ab4b704304caf73036715786194..a04cbf9d9b215dee8fa5da9578bc27a0ef398c6c 100644 (file)
@@ -51,7 +51,7 @@
         </div>
         <div id="comment-error" class="alert alert-danger p-2 mb-3" hidden>
         </div>
-        <div class="btn-wrapper">
+        <div class="d-flex flex-wrap gap-1">
           <% if current_user.moderator? -%>
             <%= submit_tag t(".hide"), :name => "hide", :class => "btn btn-light",
                                        :data => { :method => "DELETE",
@@ -77,7 +77,7 @@
       <input type="hidden" name="text" value="" autocomplete="off">
       <div id="comment-error" class="alert alert-danger p-2 mb-3" hidden>
       </div>
-      <div class="btn-wrapper">
+      <div class="d-flex flex-wrap gap-1">
         <% if @note.status != "hidden" and current_user and current_user.moderator? -%>
           <input type="submit" name="hide" value="<%= t(".hide") %>" class="btn btn-light" data-method="DELETE" data-url="<%= api_note_url(@note, "json") %>">
         <% end -%>
index acbf8dab01d22bdc3ede7082ca0fe3155ce7f22d..70839d1608533e0da9f29eb5f1ef81a7e8cd75d9 100644 (file)
@@ -25,7 +25,7 @@
 <div id="login_login" class="auth-container mx-auto my-0">
   <% if @preferred_auth_provider %>
     <%= render :partial => "auth_providers" %>
-    <div class="d-flex justify-content-center align-items-center">
+    <div class="d-flex justify-content-center align-items-center mb-2">
       <div class="border-bottom border-1 flex-grow-1"></div>
       <div class="text-secondary mx-3"><%= t ".or" %></div>
       <div class="border-bottom border-1 flex-grow-1"></div>
 
     <div class="row">
       <div class="col">
-        <%= f.label :password, :class => "form-label" %>
+        <%= f.label :password, t(".password"), :class => "form-label" %>
       </div>
       <div class="col text-end">
         <small><%= link_to(t(".lost password link"), user_forgot_password_path) %></small>
       </div>
     </div>
-    <input class="form-control mb-3" type="password" name="password" id="password" tabindex="2" value="" autocomplete="off" />
+    <input class="form-control mb-3" type="password" name="password" id="password" tabindex="2" value="" autocomplete="on" />
 
     <%= f.form_group do %>
       <%= f.check_box :remember_me, { :label => t(".remember"), :tabindex => 3, :checked => (params[:remember_me] == "yes") }, "yes" %>
index b1a85d60d60768fdcbdcff91374a107d568b6181..b618f381107260222c9343f3e7db44ef64173654 100644 (file)
@@ -31,7 +31,7 @@
 
     <% unless @preferred_auth_provider.nil? %>
       <%= render :partial => "auth_providers" %>
-      <div class="d-flex justify-content-center align-items-center">
+      <div class="d-flex justify-content-center align-items-center mb-2">
         <div class="border-bottom border-1 flex-grow-1"></div>
         <div class="text-secondary mx-3"><%= t ".or" %></div>
         <div class="border-bottom border-1 flex-grow-1"></div>
index 2bc4f5e59d40d07f552d36417bd3f211eda8d6ee..9d59656c7b2cd4255d019c523bf57952249e0648 100644 (file)
@@ -6,7 +6,7 @@ if defined?(ActiveRecord::ConnectionAdaptors::AbstractAdapter)
           if e.is_a?(Timeout::Error) || e.is_a?(OSM::APITimeoutError)
             e
           else
-            super(e, sql)
+            super
           end
         end
       end
index 5ce53e86360117b4f320d7e8f84d4da09edb2769..9ddaf70f94598b62f6d65a272457d61c68c05ed6 100644 (file)
@@ -6,7 +6,7 @@
 
 Rails.application.configure do
   connect_src = [:self]
-  img_src = [:self, :data, "www.gravatar.com", "*.wp.com", "tile.openstreetmap.org", "*.tile.thunderforest.com", "tile.tracestrack.com", "*.openstreetmap.fr"]
+  img_src = [:self, :data, "www.gravatar.com", "*.wp.com", "tile.openstreetmap.org", "gps.tile.openstreetmap.org", "*.tile.thunderforest.com", "tile.tracestrack.com", "*.openstreetmap.fr"]
   script_src = [:self]
 
   connect_src << Settings.matomo["location"] if defined?(Settings.matomo)
index fdbf11a2ce05cacaaffcdd4a90a822518be92e81..e7b813b73f788fb7bf4cac947007c2ff0154340d 100644 (file)
@@ -6,7 +6,7 @@
 module OpenStreetMap
   class Cors < Rack::Cors
     def call(env)
-      status, headers, body = super(env)
+      status, headers, body = super
       headers["Cache-Control"] = "no-cache" if headers["Access-Control-Allow-Origin"]
       [status, headers, body]
     end
index 266e41cbb98d501435ba985efbdba9af475c8d63..8f74c3cd39455a0b5548aa8d6a364da9259a1309 100644 (file)
@@ -18,7 +18,7 @@ module OpenStreetMap
       def store_translations(locale, data, options = {})
         locale = ::I18n::Locale::Tag::Rfc4646.tag(locale).to_s
 
-        super(locale, data, options)
+        super
       end
     end
 
index 4bab2000b03ed897a600133b22bb9231ca32d4e8..30b23d2ddb47fa298df8dcba50a8aa5a82d3edc6 100644 (file)
@@ -4,7 +4,7 @@ module OpenStreetMap
       def perform(mailer, mail_method, delivery_method, *args, **kwargs)
         kwargs = args.pop if kwargs.empty? && args.last.is_a?(Hash)
 
-        super(mailer, mail_method, delivery_method, *args, **kwargs)
+        super
       end
     end
   end
index fbe4ad219161a6c87d58c872a98aced64b1acdfd..812e6610d9e67a46b1df270cd5a201cf41d3dff4 100644 (file)
@@ -45,7 +45,7 @@ module OpenStreetMap
         status = options.delete(:status) || :ok
         head status, options
       else
-        super(options)
+        super
       end
     end
 
@@ -61,7 +61,7 @@ module OpenStreetMap
           end
         end
 
-        super(controller)
+        super
       end
     end
   end
index 4357a87f25f47ea0cc98c8da6d9f155ed8dad750..849aba2ad15f428785b83f457b0141933dbdfd7a 100644 (file)
@@ -5,7 +5,7 @@ module OpenStreetMap
   module Router
     module ForceEncoding
       def normalize_path(path)
-        super(path).force_encoding("UTF-8")
+        super.force_encoding("UTF-8")
       end
     end
   end
index 11e4e0d5c053894f3752e730c06879d48e667dbb..793c484fc40127058a5ab790dcf0ae337151e6c8 100644 (file)
@@ -2,7 +2,7 @@ require "rtlcss"
 
 class RtlcssSCSSProcessor < SassC::Rails::ScssTemplate
   def self.call(input)
-    output = super(input)
+    output = super
     data = Rtlcss.flip_css(output[:data])
     output.delete(:map)
     output.merge(:data => data)
index a9f60ec4e3f1b5f22ac5626e2a04b92a7210cecb..0c1cf6f6f69b805c5f798488b2fb9b353b36e6f6 100644 (file)
@@ -19,6 +19,7 @@
 # Author: R4356th
 # Author: R4bb1
 # Author: Rasal Lia
+# Author: RiazACU
 # Author: Sayma Jahan
 # Author: Tahmid
 # Author: Tauhid16
index b3202260d3bc82415e8daa7f92aaadf7cf22b122..d91b60e3b4a1ede4b5bcf689268fe87a6df3cdcb 100644 (file)
@@ -2198,7 +2198,7 @@ br:
       close: Serriñ
     search:
       search: Klask
-      get_directions: Kaout an tuioù
+      get_directions: Kaout an durc'hadurioù
       get_directions_title: Kavit an hentoù etre an daou boent
       from: Eus
       to: Da
@@ -3097,7 +3097,7 @@ br:
         fossgis_valhalla_car: Karr (Valhalla)
         fossgis_valhalla_foot: War droad (Valhalla)
       descend: Diskenn
-      directions: Tuioù
+      directions: Durc'hadurioù
       distance: Hed
       distance_m: '%{distance}m'
       distance_km: '%{distance}km'
index f609f48500f1c5ceaa670efa677c318ff3c7d051..c84032e2dedbd967d6ce65d632138f921e73d269 100644 (file)
@@ -2876,8 +2876,8 @@ cs:
       continue: Zaregistrovat se
       terms accepted: Děkujeme za odsouhlasení nových podmínek pro přispěvatele!
       email_help_html: Vaše adresa se nezobrazuje veřejně, více informací získáte
-        v našich %{privacy_policy_link}.
-      privacy_policy: pravidlech ochrany osobních údajů
+        na stránce s našimi %{privacy_policy_link}.
+      privacy_policy: pravidly ochrany osobních údajů
       privacy_policy_title: Pravidla ochrany osobních údajů OSMF, včetně části o e-mailových
         adresách
       consider_pd_html: Své příspěvky považuji za %{consider_pd_link}.
index de3966bf3bd9ac902669334513aba66af1083d82..4a018f7d79f81219979545486db05a1b6eb32bc1 100644 (file)
@@ -149,7 +149,7 @@ diq:
         new_email: E-postay adresiyo neweh
         active: Aktiv
         display_name: Nameyo ke Aseno
-        description: Şınasiya weci
+        description: Şınasiya Profili
         home_lat: 'Verıniye:'
         home_lon: Derganiye
         languages: Zıwanê tercihi
index 0c3b1427cc614ef55eb2f673fb980dc2427c31d4..3ab6a2a2dcdd67527113844becd1124e9739300f 100644 (file)
@@ -108,7 +108,7 @@ et:
       diary_entry:
         user: Kasutaja
         title: Teema
-        body: Päevikusissekanne
+        body: Kehatekst
         latitude: Laius
         longitude: Pikkus
         language_code: Keel
@@ -1662,8 +1662,8 @@ et:
           Märkus on koha %{place} lähedal.'
         commented_note_html: '%{commenter} on taasaktiveerinud märkuse, mida oled
           kommenteerinud. Märkus on koha %{place} lähedal.'
-      details: Üksikasjad märkuse kohta leiad aadressilt %{url}.
-      details_html: Üksikasjad märkuse kohta leiad aadressilt %{url}.
+      details: Vasta või loe veel märkuse kohta aadressil %{url}.
+      details_html: Vasta või loe veel märkuse kohta aadressil %{url}.
     changeset_comment_notification:
       description: 'OpenStreetMapi muudatuskogum #%{id}'
       hi: Tere, %{to_user}
@@ -1682,8 +1682,8 @@ et:
         partial_changeset_with_comment: kommentaariga '%{changeset_comment}'.
         partial_changeset_with_comment_html: kommentaariga '%{changeset_comment}'.
         partial_changeset_without_comment: ilma kommentaarita.
-      details: Üksikasjad muudatuskogumi kohta leiad aadressilt %{url}.
-      details_html: Üksikasjad muudatuskogumi kohta leiad aadressilt %{url}.
+      details: Vasta või loe muudatuskogumi kohta veel aadressil %{url}.
+      details_html: Vasta või loe muudatuskogumi kohta veel aadressil %{url}.
       unsubscribe: Saad muudatuskogumi uuendusteadetest ära ütelda aadressil %{url}.
       unsubscribe_html: Saad muudatuskogumi uuendusteadetest ära ütelda aadressil
         %{url}.
@@ -1859,7 +1859,7 @@ et:
       lost password link: Kas unustasid parooli?
       login_button: Logi sisse
       register now: Registreeru nüüd
-      with external: 'Teise võimalusena võid sisse logida kolmanda osapoole kaudu:'
+      with external: või logi sisse kolmanda osapoole kaudu
       auth failure: Kahjuks ei õnnestu nende andmetega sisse logida.
     destroy:
       title: Logi välja
@@ -2653,6 +2653,7 @@ et:
       title: Minu volitatud rakendused
       application: Rakendus
       permissions: Õigused
+      last_authorized: Viimati volitatud
       no_applications_html: Sa pole volitanud veel ühtegi %{oauth2} rakendust.
     application:
       revoke: Eemalda juurdepääs
@@ -2660,27 +2661,33 @@ et:
   users:
     new:
       title: Registreerumine
+      tab_title: Registreeru
       no_auto_account_create: Kahjuks ei ole meil võimalik luua hetkel sinu jaoks
         automaatselt kontot.
       please_contact_support_html: Palun võta ühendust %{support_link}, et kasutajakonto
         luua. Üritame tegeleda selle taotlusega nii kiiresti kui võimalik.
       support: toega
       about:
-        header: Vaba ja muudetav
+        header: Vaba ja muudetav.
         paragraph_1: Erinevalt teistest kaartidest on kogu OpenStreetMapi loonud sinusugused
           inimesed ja igaüks võib seda parandada, täiendada, alla laadida ja kasutada.
-        paragraph_2: Registreeru, et alustada kaardi täiendamist. Saadame sulle e-kirja,
-          et saaksid kinnitada enda kasutajakonto.
+        paragraph_2: Registreeru, et alustada kaardi täiendamist.
       display name description: Avalikult kuvatud kasutajanimi. Seda saate muuta hiljem
         eelistustes.
+      by_signing_up_html: Registreerudes nõustud meie %{tou_link}, %{privacy_policy_link}
+        ja %{contributor_terms_link}.
+      tou: kasutustingimustega
+      contributor_terms: kaastöötingimustega
       external auth: 'Kolmanda osapoole autentimine:'
       continue: Registreeru
       terms accepted: Täname, et nõustusid uute kaastöötingimustega!
-      email_help_html: Sinu aadressi ei kuvata avalikult, loe täpsemalt meie %{privacy_policy_link}.
-      privacy_policy: andmekaitsereeglitest
+      email_help_html: Sinu aadressi ei kuvata avalikult, tutvu meie %{privacy_policy_link}.
+      privacy_policy: andmekaitsereeglitega
       privacy_policy_title: OSMF-i andmekaitsereeglid, milles on alaosa e-posti aadresside
         kohta
-      use external auth: Teise võimalusena võid sisse logida kolmanda osapoole kaudu
+      consider_pd_html: Pean enda kaastööd %{consider_pd_link} kuuluvaks.
+      consider_pd: avalikku omandisse
+      use external auth: või registreeru kolmanda osapoole kaudu
     terms:
       title: Tingimused
       heading: Tingimused
@@ -2856,8 +2863,8 @@ et:
         andis.
       success: Blokeering uuendatud.
     index:
-      title: Kasutaja blokeeringud
-      heading: Kasutaja blokeeringute loetelu
+      title: Kasutajate blokeeringud
+      heading: Kasutajate blokeeringute loetelu
       empty: Ühtegi blokeeringut pole veel antud.
     revoke:
       title: Kasutaja %{block_on} blokeeringu eemaldamine
@@ -3001,6 +3008,10 @@ et:
       intro: Kas märkasid viga või midagi, mis vajab täiendamist? Anna sellest teistele
         kaardistajatele teada, et nad saaksid seda parandada. Lohista marker õigele
         kohale ja kirjuta märkus, et probleemi selgitada.
+      anonymous_warning_html: Sa pole sisse logitud. Palun %{log_in} või %{sign_up},
+        kui soovid saada enda märkuse kohta uuendusi.
+      anonymous_warning_log_in: logi sisse
+      anonymous_warning_sign_up: registreeru
       advice: Märkus on avalik ja seda võidakse kasutada kaardi uuendamiseks. Seega
         palun ära kirjuta siia isiklikku teavet ega teavet autoriõigustega kaitstud
         kaartidelt ega kataloogiloenditest.
@@ -3105,24 +3116,24 @@ et:
         continue_without_exit: 'Liigu edasi teele: %{name}'
         slight_right_without_exit: 'Pööra kergelt paremal pool asuvale teele: %{name}'
         offramp_right: Sõida paremal asuvale kaldteele
-        offramp_right_with_exit: Lahku teelt paremal asuva ärapöörde %{exit} kaudu
-        offramp_right_with_exit_name: 'Lahku teelt paremal asuva ärapöörde %{exit}
-          kaudu sõites teele: %{name}'
-        offramp_right_with_exit_directions: 'Lahku teelt paremal asuva ärapöörde %{exit}
-          kaudu võttes suunaks: %{directions}'
-        offramp_right_with_exit_name_directions: 'Lahku teelt paremal asuva ärapöörde
-          %{exit} kaudu sõites teele: %{name} suunaga %{directions} poole'
+        offramp_right_with_exit: Lahku teelt %{exit}. väljumise kaudu paremal
+        offramp_right_with_exit_name: 'Lahku paremalt %{exit}. väljumise kaudu sõites
+          teele: %{name}'
+        offramp_right_with_exit_directions: Lahku paremalt %{exit}. väljumise kaudu,
+          sõites tee %{directions} suunas
+        offramp_right_with_exit_name_directions: Lahku paremalt %{exit}. väljumise
+          kaudu sõites teele %{name} tee %{directions} suunas
         offramp_right_with_name: 'Pööra paremal asuvalt kaldteelt teele: %{name}'
-        offramp_right_with_directions: Pööra paremal asuvale kaldteele suunaga %{directions}
-          poole
+        offramp_right_with_directions: Pööra paremal asuvale kaldteele, liikudes tee
+          %{directions} suunas
         offramp_right_with_name_directions: 'Pööra paremal asuvale kaldteele: uus
           tee on %{name} ja suunaks %{directions}'
         onramp_right_without_exit: 'Pööra paremale ja sõida kaldteed mööda teele:
           %{name}'
-        onramp_right_with_directions: Pööra paremale ja sõida kaldteelt %{directions}
+        onramp_right_with_directions: Pööra paremale ja sõida kaldteelt tee %{directions}
           suunas
-        onramp_right_with_name_directions: Pööra paremal asuvale kaldteele %{name}
-          poole, suunaks %{directions}
+        onramp_right_with_name_directions: Pööra paremal asuvalt kaldteelt teele %{name},
+          sõites tee %{directions} suunas
         onramp_right_without_directions: Sõida paremal asuvale kaldteele
         onramp_right: Sõida paremal asuvale kaldteele
         endofroad_right_without_exit: 'Tee lõpus pööra paremale teele: %{name}'
@@ -3134,20 +3145,20 @@ et:
         sharp_left_without_exit: 'Pööra järsult vasakul pool asuvale teele: %{name}'
         turn_left_without_exit: 'Pööra vasakul pool asuvale teele: %{name}'
         offramp_left: Sõida vasakul asuvale kaldteele
-        offramp_left_with_exit: Lahku teelt vasakul asuva ärapöörde %{exit} kaudu
-        offramp_left_with_exit_name: 'Lahku teelt vasakul asuva ärapöörde %{exit}
-          kaudu sõites teele: %{name}'
-        offramp_left_with_exit_directions: 'Lahku teelt vasakul asuva ärapöörde %{exit}
-          kaudu võttes suunaks: %{directions}'
-        offramp_left_with_exit_name_directions: 'Lahku teelt vasakul asuva ärapöörde
-          %{exit} kaudu sõites teele: %{name} suunaga %{directions} poole'
+        offramp_left_with_exit: Lahku vasakult %{exit}. väljumise kaudu
+        offramp_left_with_exit_name: 'Lahku vasakult %{exit}. väljumise kaudu sõites
+          teele: %{name}'
+        offramp_left_with_exit_directions: Lahku vasakult %{exit}. väljumise kaudu,
+          sõites tee %{directions} suunas
+        offramp_left_with_exit_name_directions: Lahku vasakult %{exit}. väljumise
+          kaudu sõites teele %{name} tee %{directions} suunas
         offramp_left_with_name: 'Pööra vasakul asuvalt kaldteelt teele: %{name}'
-        offramp_left_with_directions: Pööra vasakul asuvale kaldteele suunaga %{directions}
-          poole
+        offramp_left_with_directions: Pööra vasakul asuvale kaldteele, liikudes tee
+          %{directions} suunas
         offramp_left_with_name_directions: 'Pööra vasakul asuvale kaldteele: uus tee
           on %{name} ja suunaks %{directions}'
         onramp_left_without_exit: 'Pööra vasakule ja sõida kaldteed mööda teele: %{name}'
-        onramp_left_with_directions: Pööra vasakule ja sõida kaldteelt %{directions}
+        onramp_left_with_directions: Pööra vasakule ja sõida kaldteelt tee %{directions}
           suunas
         onramp_left_with_name_directions: 'Pööra vaskul asuvale kaldteele: uus tee
           on %{name} ja suunaks %{directions}'
@@ -3159,7 +3170,7 @@ et:
         slight_left_without_exit: 'Pööra kergelt vasakule teele: %{name}'
         via_point_without_exit: (teekonnapunkti kaudu)
         follow_without_exit: 'Sõida edasi mööda teed: %{name}'
-        roundabout_without_exit: 'Pööra ringteelt järgnevale teele: %{name}'
+        roundabout_without_exit: 'Pööra ringteelt järgmisele teele: %{name}'
         leave_roundabout_without_exit: Pööra ära ringteelt - %{name}
         stay_roundabout_without_exit: Jätka sõitmist ringteel - %{name}
         start_without_exit: 'Alusta teelt: %{name}'
index da9281e0d215dad78daf74aeb7d7f361e6d39394..1bb90b0629980ff569e6d077d651897f0d90b9a4 100644 (file)
@@ -38,6 +38,7 @@
 # Author: GeorgeKaplan
 # Author: Gileri
 # Author: Gomoko
+# Author: Graineahumus
 # Author: Gravitystorm
 # Author: Guilhelma
 # Author: Hashar
@@ -75,6 +76,7 @@
 # Author: Orikrin1998
 # Author: Otourly
 # Author: Oupsa
+# Author: Overflorian
 # Author: Peter17
 # Author: Phoenamandre
 # Author: Pipo
@@ -457,6 +459,7 @@ fr:
     view_unredacted_history: Voir l'historique non censuré
     view_details: Afficher les détails
     view_redacted_data: Afficher les données censurées
+    view_redaction_message: Afficher le message de rédaction
     location: 'Emplacement :'
     common_details:
       coordinates_html: '%{latitude} ; %{longitude}'
@@ -583,6 +586,7 @@ fr:
         closed: Fermé
         belongs_to: Auteur
     subscribe:
+      heading: S'abonner à la discussion sur l'ensemble de modifications suivante ?
       button: S'abonner à la discussion
     unsubscribe:
       heading: Se désabonner de la discussion du groupe de modifications suivant ?
@@ -591,6 +595,7 @@ fr:
       title: Groupe de modifications %{id}
       created_by_html: Créé par %{link_user} le %{created}.
     no_such_entry:
+      title: Aucun ensemble de modifications de ce type
       heading: 'Aucune entrée avec l’identifiant : %{id}'
       body: Désolé, il n’y a aucun groupe de modifications avec l'identifiant %{id}.
         Veuillez vérifier l'orthographe ou la validité du lien sur lequel vous avez
@@ -740,8 +745,10 @@ fr:
       newer_comments: Commentaires plus récents
       older_comments: Commentaires plus anciens
     subscribe:
+      heading: S'abonner à la discussion suivante sur les entrées de journal ?
       button: S'abonner à la discussion
     unsubscribe:
+      heading: Se désinscrire de la discussion suivante sur les entrées du journal ?
       button: Se désinscrire de la discussion
   doorkeeper:
     errors:
@@ -785,6 +792,10 @@ fr:
       contact_the_community_html: N’hésitez pas à %{contact_link} la communauté OpenStreetMap
         si vous avez trouvé un lien cassé ou une anomalie. Notez l’URL exacte de votre
         demande.
+    bad_request:
+      title: Mauvaise requête
+      description: L'opération que vous avez demandée sur le serveur OpenStreetMap
+        n'est pas valide (HTTP 400)
     forbidden:
       title: Interdit
       description: L’opération que vous avez demandée sur le serveur OpenStreetMap
@@ -1725,6 +1736,7 @@ fr:
     hosting_partners_2024_html: L’hébergement est pris en charge par %{fastly}, %{corpmembers},
       et d’autres %{partners}.
     partners_fastly: Fastly
+    partners_corpmembers: Membres d'entreprise de l'OSMF
     partners_partners: partenaires
     tou: Conditions d’utilisation
     osm_offline: La base de données OpenStreetMap est actuellement hors ligne ; une
@@ -1860,8 +1872,8 @@ fr:
           La note se trouve près de %{place}.'
         commented_note_html: '%{commenter} a réactivé une note de carte que vous avez
           commentée. La note est près de %{place}.'
-      details: Plus de détails concernant la note se trouvent à %{url}.
-      details_html: Plus de détails concernant la note se trouvent à %{url}.
+      details: Répondez ou apprenez-en plus sur la note sur %{url}.
+      details_html: Répondez ou en savoir plus sur la note sur %{url}.
     changeset_comment_notification:
       description: 'Groupe de modifications OpenStreetMap #%{id}'
       hi: Bonjour %{to_user},
@@ -1882,9 +1894,8 @@ fr:
         partial_changeset_with_comment: avec le commentaire « %{changeset_comment} »
         partial_changeset_with_comment_html: avec le commentaire « %{changeset_comment} »
         partial_changeset_without_comment: sans commentaire
-      details: Plus de détails sur l’ensemble de modifications à %{url}.
-      details_html: Vous pouvez trouver plus de détails sur l’ensemble de modifications
-        sur %{url}.
+      details: Répondez ou en savoir plus sur l'ensemble de changements sur %{url}.
+      details_html: Répondre ou en savoir plus sur l'ensemble de changements sur %{url}.
       unsubscribe: Vous pouvez vous désabonner des mises à jour de cet ensemble de
         modifications depuis %{url}.
       unsubscribe_html: Vous pouvez vous désabonner des mises à jour de cet ensemble
@@ -1983,9 +1994,9 @@ fr:
       unread_button: Marque comme non lu
       destroy_button: Supprimer
       back: Retour
-      wrong_user: Vous êtes identifié comme « %{user} » mais le message que vous essayez
-        de lire n’a pas été envoyé par cet utilisateur, ni ne lui a été destiné. Veuillez
-        vous connecter avec l’identifiant correct pour pouvoir le lire.
+      wrong_user: Vous êtes identifié comme « %{user} » mais le message que vous avez
+        demandé de lire n’a pas été envoyé par cet utilisateur, ni ne lui a été destiné.
+        Veuillez vous connecter avec le bon identifiant pour pouvoir le lire.
     sent_message_summary:
       destroy_button: Supprimer
     heading:
@@ -2067,6 +2078,7 @@ fr:
     new:
       title: Se connecter
       tab_title: Se connecter
+      login_to_authorize_html: Connectez-vous à OpenStreetMap pour accéder à %{client_app_name}.
       email or username: 'Adresse de courriel ou nom d’utilisateur :'
       password: 'Mot de passe :'
       remember: Se souvenir de moi
@@ -2266,7 +2278,12 @@ fr:
           générale des finances publiques (anciennement la Direction générale des
           impôts).'
         contributors_fr_france: France
+        contributors_hr_credit_html: |-
+          %{croatia} : contient des données de %{dgu_link} et %{open_data_portal}
+          (informations publiques de Croatie).
         contributors_hr_croatia: Croatie
+        contributors_hr_dgu: Administration géodésique de l'État de Croatie
+        contributors_hr_open_data_portal: Portail national des données ouvertes
         contributors_nl_credit_html: '%{netherlands} : contient des données © AND,
           2007 (%{and_link})'
         contributors_nl_netherlands: Pays-Bas
@@ -2719,6 +2736,8 @@ fr:
       identifiable: IDENTIFIABLE
       private: PRIVÉE
       trackable: PISTABLE
+      details_with_tags_html: '%{time_ago} par %{user} dans %{tags}'
+      details_without_tags_html: '%{time_ago} par %{user}'
     index:
       public_traces: Traces GPS publiques
       my_gps_traces: Mes traces GPS
@@ -2776,17 +2795,18 @@ fr:
       muted_users: Utilisateurs silencieux
     auth_providers:
       openid_logo_alt: Se connecter avec OpenID
+      openid_login_button: Continuer
       openid:
         title: Connexion avec OpenID
         alt: Se connecter avec une URL OpenID
       google:
-        title: Connexion avec Google
+        title: Se connecter avec Google
         alt: Se connecter avec un OpenID de Google
       facebook:
         title: Connexion avec Facebook
         alt: Se connecter avec un compte de Facebook
       microsoft:
-        title: Connexion avec Microsoft
+        title: Se connecter avec Microsoft
         alt: Se connecter avec un compte Microsoft
       github:
         title: Connexion avec GitHub
@@ -2798,7 +2818,7 @@ fr:
         title: Connexion avec Wordpress
         alt: Se connecter avec un OpenID de Wordpress
       aol:
-        title: Connexion avec AOL
+        title: Se connecter avec AOL
         alt: Se connecter avec un OpenID d’AOL
   oauth:
     authorize:
@@ -2843,6 +2863,9 @@ fr:
       write_redactions: Caviarder les données cartographiques
       read_email: Lire l’adresse courriel de l’utilisateur
       skip_authorization: Demande d’approbation automatique
+    for_roles:
+      moderator: Cette autorisation concerne les actions disponibles uniquement pour
+        les modérateurs
   oauth_clients:
     new:
       title: Inscrire une nouvelle application
@@ -2939,6 +2962,7 @@ fr:
   users:
     new:
       title: S’inscrire
+      tab_title: Créer un compte
       no_auto_account_create: Malheureusement, nous ne sommes actuellement pas en
         mesure de vous créer un compte automatiquement.
       please_contact_support_html: Veuillez contacter %{support_link} pour organiser
@@ -2952,8 +2976,15 @@ fr:
           la réparer, la mettre à jour, la télécharger et l’utiliser.
         paragraph_2: Inscrivez-vous pour commencer à contribuer. Nous vous enverrons
           un courriel pour confirmer votre compte.
+      duplicate_social_email: Si vous possédez déjà un compte OpenStreetMap et souhaitez
+        utiliser un fournisseur d'identité tiers, veuillez vous connecter en utilisant
+        votre mot de passe et modifier les paramètres de votre compte.
       display name description: Votre nom d’utilisateur affiché publiquement. Vous
         pouvez changer ceci ultérieurement dans les préférences.
+      by_signing_up_html: En vous inscrivant, vous acceptez nos %{tou_link}, %{privacy_policy_link}
+        et %{contributor_terms_link}.
+      tou: conditions d'utilisation
+      contributor_terms: Conditions de contribution
       external auth: 'Authentification tierce :'
       continue: S’inscrire
       terms accepted: Merci d’avoir accepté les nouveaux termes du contributeur !
@@ -2962,8 +2993,10 @@ fr:
       privacy_policy: politique de confidentialité
       privacy_policy_title: Politique de confidentialité de l’OSMF, qui comprend une
         section sur les adresses de courriel
-      use external auth: Vous pouvez également utiliser un service tiers pour vous
-        connecter.
+      consider_pd_html: Je considère que mes contributions se situent dans le %{consider_pd_link}.
+      consider_pd: domaine public
+      or: ou
+      use external auth: ou vous pouvez vous connecter avec un service tiers.
     terms:
       title: Conditions
       heading: Conditions
@@ -3074,6 +3107,9 @@ fr:
       heading: Utilisateurs
       older: Utilisateurs plus anciens
       newer: Utilisateurs plus récents
+      found_users:
+        one: '%{count} utilisateur trouvé'
+        other: '%{count} utilisateurs trouvés'
       summary_html: '%{name} créé depuis %{ip_address} le %{date}'
       summary_no_ip_html: '%{name} créé le %{date}'
       confirm: Confirmer les utilisateurs sélectionnés
@@ -3098,9 +3134,9 @@ fr:
       heading: Votre identifiant n’est pas encore associé à un compte OpenStreetMap.
       option_1: Si vous êtes nouveau sur OpenStreetMap, veuillez créer un nouveau
         compte à l’aide du formulaire ci-dessous.
-      option_2: Si vous avez déjà un compte, vous pouvez vous connecter avec en utilisant
-        votre nom d’utilisateur et votre mot de passe, puis associer le compte avec
-        votre ID dans vos préférences utilisateur.
+      option_2: Si vous avez déjà un compte, vous pouvez vous y connecter avec en
+        utilisant votre nom d’utilisateur et votre mot de passe, puis associer le
+        compte avec votre ID dans vos préférences utilisateur.
   user_role:
     filter:
       not_a_role: La chaîne « %{role} » n’est pas un rôle valide.
@@ -3231,6 +3267,8 @@ fr:
       reason: Motif du blocage
       status: État
       revoker_name: Révoqué par
+      older: Blocs plus anciens
+      newer: Blocs plus récents
     navigation:
       all_blocks: Tous les blocages
       blocks_on_me: Blocages me concernant
@@ -3312,6 +3350,10 @@ fr:
       intro: Vous avez repéré une erreur ou un manque ? Faites-le savoir aux autres
         cartographes afin qu’ils puissent y remédier. Déplacez le marqueur à la position
         exacte et écrivez une note pour expliquer le problème.
+      anonymous_warning_html: Vous n'êtes pas connecté. Veuillez %{log_in} ou %{sign_up}
+        si vous souhaitez recevoir des mises à jour pour votre note.
+      anonymous_warning_log_in: se connecter
+      anonymous_warning_sign_up: créer un compte
       advice: Votre note est publique et peut être utilisée pour mettre à jour la
         carte, aussi n’entrez aucune information personnelle, ni aucune information
         venant de cartes protégées, ni aucune entrée de répertoire ou d’annuaire.
index 15f2dbadeff67c226d9571212fffb0235cfc05cb..444c0b841c360cc4a3ecca964f0bb01bde59d261 100644 (file)
@@ -632,6 +632,8 @@ ko:
       contact: 여러 연락 수단
       contact_the_community_html: 끊어진 링크나 버그를 발견했다면 언제든지 오픈스트리트맵 커뮤니티에 %{contact_link}으로
         알려주십시오. 요청의 정확한 URL을 기록해 두십시오.
+    bad_request:
+      title: 잘못된 요청
     forbidden:
       title: 접근 거부됨
       description: 오픈스트리트맵 서버에 요청한 이 작업은 관리자만 사용할 수 있습니다(HTTP 403).
index 1439d1c1e298e860ae4f71d69acd2f0f9540b778..07edc2883f0f9c07ceec2d0844955860a7ab4599 100644 (file)
@@ -4,6 +4,7 @@
 # Author: Aalam
 # Author: Babanwalia
 # Author: Bgo eiu
+# Author: Cabal
 # Author: Jimidar
 # Author: Kuldeepburjbhalaike
 # Author: Satnam S Virdi
@@ -18,7 +19,7 @@ pa:
       diary_comment:
         create: ਸਾਂਭੋ
       diary_entry:
-        create: à¨\9bਾਪ
+        create: à¨¸à¨¾à¨\82ਭ
         update: ਅੱਪਡੇਟ ਕਰੋ
       issue_comment:
         create: ਟਿੱਪਣੀ ਕਰੋ
@@ -166,7 +167,7 @@ pa:
     download_xml: XML ਲਾਹੋ
     view_history: ਅਤੀਤ ਵੇਖੋ
     view_details: ਵੇਰਵੇ ਵੇਖੋ
-    location: 'ਸਥਿਤà©\80:'
+    location: 'à¨\9fਿà¨\95ਾਣਾ:'
     relation:
       members: ਜੀਅ
     relation_member:
@@ -196,7 +197,7 @@ pa:
         relation: ਸਬੰਧ
     start_rjs:
       load_data: ਡਾਟਾ ਲੋਡ ਕਰੋ
-      loading: à¨²à©\8bਡ à¨¹à©\8b à¨°à¨¿à¨¹à¨¾ à¨¹à©\88â\80¦
+      loading: à¨²à©±à¨¦ à¨°à¨¿à¨¹à¨¾ à¨¹à©\88...
     tag_details:
       tags: ਟੈਗ
       wikipedia_link: '%{page} ਲੇਖ ਵਿਕਿਪੀਡਿਆ ਉੱਤੇ'
@@ -369,7 +370,7 @@ pa:
           waste_basket: ਕੂੜਾਦਾਨ
           waste_disposal: ਕੂੜੇਦਾਨ
         boundary:
-          administrative: à¨ªà©\8dਰਸ਼ਾਸਕੀ ਸਰਹੱਦ
+          administrative: à¨ªà©\8dਰਬੰਧਕੀ ਸਰਹੱਦ
           census: ਮਰਦਮਸ਼ੁਮਾਰੀ ਸਰਹੱਦ
           national_park: ਕੌਮੀ ਬਾਗ਼
           protected_area: ਸੁਰੱਖਿਅਤ ਖੇਤਰ
@@ -730,7 +731,7 @@ pa:
     sign_up: ਭਰਤੀ ਹੋਵੋ
     start_mapping: ਨਕਸ਼ਾਬੰਦੀ ਸ਼ੁਰੂ ਕਰੋ
     edit: ਸੋਧੋ
-    history: à¨\85ਤà©\80ਤ
+    history: à¨ªà©\81ਰਾਣਾ
     export: ਬਰਾਮਦ
     data: ਸਮੱਗਰੀ
     export_data: ਸਮੱਗਰੀ ਬਰਾਮਦ ਕਰੋ
@@ -783,7 +784,7 @@ pa:
       date: ਮਿਤੀ
     message_summary:
       reply_button: ਜੁਆਬ
-      destroy_button: à¨®à¨¿à¨\9fਾà¨\89
+      destroy_button: à¨®à¨¿à¨\9fਾà¨\93
     new:
       title: ਸੁਨੇਹਾ ਘੱਲੋ
     create:
@@ -799,7 +800,7 @@ pa:
       unread_button: ਅਣ-ਪੜ੍ਹਿਆ ਨਿਸ਼ਾਨ ਲਾਉ
       back: ਪਿੱਛੇ
     sent_message_summary:
-      destroy_button: à¨®à¨¿à¨\9fਾà¨\89
+      destroy_button: à¨®à¨¿à¨\9fਾà¨\93
     heading:
       my_inbox: ਮੇਰਾ ਇਨਬਾਕਸ
     destroy:
@@ -869,7 +870,7 @@ pa:
     export:
       title: ਬਰਾਮਦ
       manually_select: ਆਪਣੇ ਆਪ ਇੱਕ ਵੱਖਰਾ ਖੇਤਰ ਚੁਣੋ
-      licence: à¨²à¨¾à¨\87ਸੰਸ
+      licence: ਲਸੰਸ
       too_large:
         other:
           title: ਹੋਰ ਸਰੋਤ
@@ -879,7 +880,7 @@ pa:
       how_to_help:
         title: ਮਦਦ ਕਿਵੇਂ ਕਰਨੀ ਹੈ
         join_the_community:
-          title: ਭਾਈਚਾਰੇ ਨਾਲ ਜੁੜੋ
+          title: ਭਾਈਚਾਰੇ ਨਾਲ ਜੁੜੋ
       other_concerns:
         title: ਹੋਰ ਫ਼ਿਕਰ
     help:
@@ -923,7 +924,7 @@ pa:
           runway: ਹਵਾਈ ਅੱਡੇ ਦੀ ਉਡਾਣ ਪੱਟੀ
           taxiway: ਟੈਕਸੀਵੇਅ
           apron: ਹਵਾਈ ਅੱਡੇ ਦਾ ਐਪਰਨ
-          admin: à¨ªà©\8dਰਸ਼ਾਸਕੀ ਸਰਹੱਦ
+          admin: à¨ªà©\8dਰਬੰਧਕੀ ਸਰਹੱਦ
           forest: ਜੰਗਲ
           wood: ਜੰਗਲ
           golf: ਗੋਲਫ਼ ਮੈਦਾਨ
@@ -1059,10 +1060,10 @@ pa:
       created from: 'ਕਿੱਥੋਂ ਉਸਾਰਿਆ:'
       status: 'ਦਰਜਾ:'
       role:
-        administrator: à¨\87ਹ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨\87ੱà¨\95 à¨ªà©\8dਰਸ਼ਾਸਕ ਹੈ।
+        administrator: à¨\87ਹ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨\87ੱà¨\95 à¨ªà©\8dਰਬੰਧਕ ਹੈ।
         moderator: ਇਹ ਵਰਤੋਂਕਾਰ ਇੱਕ ਵਿਚੋਲਾ ਹੈ।
         grant:
-          administrator: à¨ªà©\8dਰਸ਼ਾਸà¨\95à©\80 à¨¹à©±à¨\95 à¨¦à¨¿à¨\89
+          administrator: à¨ªà©\8dਰਬੰਧà¨\95à©\80 à¨¹à©±à¨\95 à¨¦à¨¿à¨\93
           moderator: ਵਿਚੋਲਗੀ ਦੇ ਹੱਕ ਦਿਉ
       comments: ਟਿੱਪਣੀਆਂ
       create_block: ਇਸ ਵਰਤੋਂਕਾਰ 'ਤੇ ਰੋਕ ਲਾਉ
index 1dc5c537ac548062dc9a93a372d6466b073a967d..638a310b0a11a80b4575a092e0b273b3c3c65928 100644 (file)
@@ -710,6 +710,10 @@ pt-PT:
       contact_the_community_html: Fique à vontade para %{contact_link} a comunidade
         OpenStreetMap caso tenha encontrado uma ligação inativa ou um erro. Deixe
         uma nota da URL exata da sua solicitação.
+    bad_request:
+      title: Pedido inválido
+      description: A operação solicitada no servidor OpenStreetMap não é válida (HTTP
+        400)
     forbidden:
       title: Proibido
       description: A operação solicitada no servidor do OpenStreetMap só está disponível
@@ -1778,8 +1782,8 @@ pt-PT:
           perto de %{place}.'
         commented_note_html: '%{commenter} reabriu uma nota comentada por ti. A nota
           fica perto de %{place}.'
-      details: Podes ver mais detalhes sobre a nota em %{url}.
-      details_html: Podes ver mais detalhes sobre a nota em %{url}.
+      details: Responde ou descobre mais sobre a nota em %{url}.
+      details_html: Responde ou descobre mais sobre a nota em %{url}.
     changeset_comment_notification:
       description: Conjunto de alterações n.º %{id}
       hi: Olá, %{to_user}.
@@ -1800,10 +1804,8 @@ pt-PT:
         partial_changeset_with_comment: com o comentário '%{changeset_comment}'
         partial_changeset_with_comment_html: com o comentário '%{changeset_comment}'
         partial_changeset_without_comment: sem comentários
-      details: Podes encontrar mais informações sobre o conjunto de alterações em
-        %{url}.
-      details_html: Podes encontrar mais informações sobre o conjunto de alterações
-        em %{url}.
+      details: Responde ou descobre mais sobre o conjunto de alterações em %{url}.
+      details_html: Responde ou descobre mais sobre o conjunto de alterações em %{url}.
       unsubscribe: Podes deixar de acompanhar as atualizações deste conjunto de alterações
         em %{url}.
       unsubscribe_html: Podes deixar de acompanhar as atualizações deste conjunto
@@ -1980,13 +1982,15 @@ pt-PT:
     new:
       title: Entrar
       tab_title: Iniciar sessão
+      login_to_authorize_html: Inicia sessão no OpenStreetMap para acederes a %{client_app_name}.
       email or username: 'E-mail ou Nome de utilizador:'
       password: Palavra-passe
       remember: Ficar autenticado entre sessões
       lost password link: Perdeste a tua palavra-passe?
       login_button: Iniciar sessão
       register now: Regista-te agora
-      with external: 'Em alternativa, usa um serviço externo para iniciares sessão:'
+      with external: ou inicia sessão com uma aplicação de terceiros
+      or: ou
       auth failure: Lamentamos, mas não foi possível iniciar sessão com os dados fornecidos.
     destroy:
       title: Sair
@@ -2157,6 +2161,12 @@ pt-PT:
         contributors_fr_credit_html: '%{france}: contém dados provenientes da Direção
           Geral de Impostos.'
         contributors_fr_france: França
+        contributors_hr_credit_html: |-
+          %{croatia}: Contém dados de %{dgu_link} e %{open_data_portal}
+          (informação pública da Croácia).
+        contributors_hr_croatia: Croácia
+        contributors_hr_dgu: Administração Geodésica Estatal da Croácia
+        contributors_hr_open_data_portal: Portal Nacional de Dados Abertos
         contributors_nl_credit_html: '%{netherlands}: Contém &copy; e dados, 2007
           (%{and_link})'
         contributors_nl_netherlands: Países Baixos
@@ -2617,6 +2627,9 @@ pt-PT:
         other: Ficheiro GPX com %{count} pontos de %{user}
       description_without_count: Ficheiro GPX de %{user}
   application:
+    basic_auth_disabled: 'A Autenticação Básica HTTP está desativada: %{link}'
+    oauth_10a_disabled: 'OAuth 1.0 e 1.0a estão desativados: %{link}'
+    auth_disabled_link: https://wiki.openstreetmap.org/wiki/2024_authentication_update
     permission_denied: Não tens permissões para realizar essa operação
     require_cookies:
       cookies_needed: Parece que tens os "cookies" desativados - por favor, ativa-os
@@ -2639,6 +2652,7 @@ pt-PT:
       muted_users: Utilizadores Silenciados
     auth_providers:
       openid_logo_alt: Iniciar sessão com um OpenID
+      openid_login_button: Continuar
       openid:
         title: Iniciar sessão com OpenID
         alt: Iniciar sessão com um URL do OpenID
@@ -2703,6 +2717,8 @@ pt-PT:
       write_redactions: Rever dados do mapa
       read_email: ‎Ler e-mail de utilizador
       skip_authorization: Aprovar a aplicação automaticamente
+    for_roles:
+      moderator: Esta permissão é para ações disponíveis apenas para moderadores
   oauth_clients:
     new:
       title: Registar uma nova aplicação
@@ -2798,20 +2814,29 @@ pt-PT:
   users:
     new:
       title: Criar conta
+      tab_title: Registar
+      signup_to_authorize_html: Inicia sessão no OpenStreetMap para acederes a %{client_app_name}.
       no_auto_account_create: Infelizmente, e de momento, não é possível criar uma
         conta automaticamente.
       please_contact_support_html: Por favor, contacta %{support_link} para pedir
         a criação de uma conta - tentaremos tratar do pedido o mais rapidamente possível.
       support: apoio
       about:
-        header: Livre e editável
+        header: Gratuito e editável.
         paragraph_1: Ao contrário de outros mapas, o OpenStreetMap é completamente
           criado por pessoas como tu, e qualquer pessoa o pode corrigir, transferir
           e usar de forma gratuita.
-        paragraph_2: Regista-te para começares a contribuir. Iremos enviar um e-mail
-          para confirmar a tua conta.
+        paragraph_2: Regista-te para começares a contribuir.
+        welcome: Bem-vind@ ao OpenStreetMap
+      duplicate_social_email: Se já tens uma conta OpenStreetMap e desejas utilizar
+        um provedor de identidade externo, inicia sessão com a tua palavra-passe e
+        modifica as definições da tua conta.
       display name description: O nome de utilizador ficará visível publicamente.
         Poderás alterar o nome posteriormente nas configurações do teu perfil.
+      by_signing_up_html: Ao registares-te, aceitas os nossos %{tou_link}, %{privacy_policy_link}
+        e %{contributor_terms_link}.
+      tou: Termos de Utilização
+      contributor_terms: Termos de Contribuidor
       external auth: 'Autenticação por terceiros:'
       continue: Criar conta
       terms accepted: Obrigado por aceitares os novos termos de contribuidor!
@@ -2820,7 +2845,10 @@ pt-PT:
       privacy_policy: política de privacidade
       privacy_policy_title: Política de privacidade da OSMF incluindo secção sobre
         endereços de correio eletrónico
-      use external auth: Em alternativa, usa um serviço externo para iniciares sessão
+      consider_pd_html: Considero que as minhas contribuições estão no %{consider_pd_link}.
+      consider_pd: domínio público
+      or: ou
+      use external auth: ou regista-te com um serviço externo
     terms:
       title: Termos
       heading: Termos
@@ -3091,6 +3119,13 @@ pt-PT:
       revoker_name: Revogado por
       older: Blocos mais antigos
       newer: Blocos mais recentes
+    navigation:
+      all_blocks: Todos os bloqueios
+      blocks_on_me: Quem me bloqueou
+      blocks_on_user: Bloqueios a %{user}
+      blocks_by_me: Os meus bloqueios
+      blocks_by_user: Bloqueios de %{user}
+      block: 'Bloqueio #%{id}'
   user_mutes:
     index:
       title: Utilizadores Silenciados
@@ -3166,6 +3201,10 @@ pt-PT:
         o mais pormenorizada possível sobre o que pretendes ver alterado no mapa,
         para que outros mapeadores te possam ajudar. Posiciona o marcador no local
         correto e escreve uma nota que explique o problema.
+      anonymous_warning_html: Não tens sessão iniciada. Por favor, %{log_in} ou %{sign_up}
+        se quiseres receber atualizações sobre a tua nota.
+      anonymous_warning_log_in: inicia sessão
+      anonymous_warning_sign_up: regista-te
       advice: 'Lembra-te: a tua nota é pública e poderá ser usada para atualizar o
         mapa, portanto, não introduzas informações pessoais, dados de mapas ou catálogos
         protegidos por direitos de autor.'
index 83a1f5f2883af5bd5458dd3659a29aa7778a9241..0023f649b954073e3c8a21e8d643f5c5e45fc9f3 100644 (file)
@@ -1834,8 +1834,8 @@ ru:
           заметок недалеко от %{place}.'
         commented_note_html: '%{commenter} открыл заново одну из вами прокомментированных
           заметок недалеко от %{place}.'
-      details: Ð\9fодÑ\80обнее о заметке %{url}.
-      details_html: 'Ð\9fодÑ\80обнее о заметке: %{url}.'
+      details: Ð\9eÑ\82веÑ\82иÑ\82Ñ\8c Ð¸Ð»Ð¸ Ñ\83знаÑ\82Ñ\8c Ð±Ð¾Ð»Ñ\8cÑ\88е о заметке %{url}.
+      details_html: 'Ð\9eÑ\82веÑ\82иÑ\82Ñ\8c Ð¸Ð»Ð¸ Ñ\83знаÑ\82Ñ\8c Ð±Ð¾Ð»Ñ\8cÑ\88е о заметке: %{url}.'
     changeset_comment_notification:
       hi: Здравствуйте, %{to_user},
       greeting: Здравствуйте,
@@ -1855,8 +1855,8 @@ ru:
         partial_changeset_with_comment: с комментарием '%{changeset_comment}'
         partial_changeset_with_comment_html: с комментарием '%{changeset_comment}'
         partial_changeset_without_comment: без комментария
-      details: Дополнительные сведения о пакете правок можно найти на %{url}.
-      details_html: Ð\94ополниÑ\82елÑ\8cнÑ\8bе Ñ\81ведениÑ\8f Ð¾ Ð¿Ð°ÐºÐµÑ\82е Ð¿Ñ\80авок Ð¼Ð¾Ð¶Ð½Ð¾ Ð½Ð°Ð¹Ñ\82и на %{url}.
+      details: 'Ответить или узнать больше о пакете правок: %{url}.'
+      details_html: Ð\9eÑ\82веÑ\82иÑ\82Ñ\8c Ð¸Ð»Ð¸ Ñ\83знаÑ\82Ñ\8c Ð±Ð¾Ð»Ñ\8cÑ\88е Ð¾ Ð¿Ð°ÐºÐµÑ\82е Ð¿Ñ\80авок Ð¼Ð¾Ð¶Ð½Ð¾ на %{url}.
       unsubscribe: Чтобы отказаться от новых сообщений для этого пакета правок, перейдите
         по ссылке %{url} и нажмите кнопку "Отписаться".
       unsubscribe_html: Чтобы отказаться от подписки на обновления этого набора изменений,
index 184082f24e115d5275b0818ceac0baa2459f816c..b25c1466a3505b8ed793e1b555944fc855166d71 100644 (file)
@@ -369,6 +369,7 @@ sv:
     deleted_ago_by_html: Raderades %{time_ago} av %{user}
     edited_ago_by_html: Redigerades %{time_ago} av %{user}
     version: Version
+    redacted_version: Redigerad version
     in_changeset: Ändringsuppsättning
     anonymous: anonym
     no_comment: (inga kommentarer)
@@ -381,7 +382,10 @@ sv:
       other: '%{count} sträckor'
     download_xml: Ladda ner XML
     view_history: Visa historik
+    view_unredacted_history: Visa oredigerad historik
     view_details: Visa detaljer
+    view_redacted_data: Visa redigerad data
+    view_redaction_message: Visa redigeringsmeddelande
     location: 'Plats:'
     node:
       title_html: 'Nod: %{name}'
@@ -503,8 +507,12 @@ sv:
         created: Skapad
         closed: Stängd
         belongs_to: Författare
+    subscribe:
+      button: Prenumerera på diskussion
     show:
       title: 'Ändringsuppsättning: %{id}'
+      created: 'Skapades: %{when}'
+      closed: 'Stängdes: %{when}'
       created_ago_html: Skapades %{time_ago}
       closed_ago_html: Stängdes %{time_ago}
       created_ago_by_html: Skapades %{time_ago} av %{user}
@@ -588,6 +596,7 @@ sv:
     show:
       title: '%{user}s dagbok | %{title}'
       user_title: '%{user}s dagbok'
+      discussion: Diskussion
       leave_a_comment: Lämna en kommentar
       login_to_leave_a_comment_html: '%{login_link} för att lämna en kommentar'
       login: Logga in
@@ -640,6 +649,8 @@ sv:
       comment: Kommentar
       newer_comments: Nyare kommentarer
       older_comments: Äldre kommentarer
+    subscribe:
+      button: Prenumerera på diskussion
   doorkeeper:
     errors:
       messages:
@@ -1928,13 +1939,15 @@ sv:
     new:
       title: Logga in
       tab_title: Logga in
+      login_to_authorize_html: Logga in på OpenStreetMap för att komma åt %{client_app_name}.
       email or username: E-postadress eller Användarnamn
       password: Lösenord
       remember: Kom ihåg mig
       lost password link: Glömt ditt lösenord?
       login_button: Logga in
       register now: Registrera dig nu
-      with external: 'Alternativt kan du använda en tredje part för att logga in:'
+      with external: eller logga in med en tredje part
+      or: eller
       auth failure: Kunde inte logga in med de uppgifterna.
     destroy:
       title: Logga ut
@@ -2110,6 +2123,7 @@ sv:
           %{france}: Innehåller data hämtade från
           Direction Générale des Impôts.
         contributors_fr_france: Frankrike
+        contributors_hr_croatia: Kroatien
         contributors_nl_credit_html: '%{netherlands}: Innehåller &copy; AND data,
           2007 (%{and_link}).'
         contributors_nl_netherlands: Nederländerna
@@ -2581,6 +2595,7 @@ sv:
       muted_users: Tystade användare
     auth_providers:
       openid_logo_alt: Logga in med ett OpenID
+      openid_login_button: Fortsätt
       openid:
         title: Logga in med OpenID
         alt: Logga in med en OpenID-URL
@@ -2646,6 +2661,9 @@ sv:
       write_redactions: Omarbeta kartdata
       read_email: Läs användarens e-postadress
       skip_authorization: Godkänn applikation automatiskt
+    for_roles:
+      moderator: Denna behörighet är till för åtgärder som endast är tillgängliga
+        för moderatorer
   oauth_clients:
     new:
       title: Registrera en ny applikation
@@ -2741,20 +2759,25 @@ sv:
   users:
     new:
       title: Registrera
+      tab_title: Registrera
+      signup_to_authorize_html: Registrera dig på OpenStreetMap för att få åtkomst
+        till %{client_app_name}
       no_auto_account_create: Tyvärr kan vi för närvarande inte kan skapa ett konto
         åt dig automatiskt.
       please_contact_support_html: Kontakta %{support_link} för att ordna att ett
         konto ska skapas - vi kommer att försöka ta itu med begäran så fort som möjligt.
       support: support
       about:
-        header: Fri och redigerbar
+        header: Fri och redigerbar.
         paragraph_1: Till skillnad från andra kartor är OpenStreetMap helt skapad
           av människor som du, och det är gratis för alla att fixa, uppdatera, ladda
           ner och använda.
-        paragraph_2: Registrera dig för att börja bidra. Vi skickar ett e-postmeddelande
-          för att bekräfta ditt konto.
+        paragraph_2: Registrera dig för att börja bidra.
+        welcome: Välkommen till OpenStreetMap
       display name description: Ditt offentligt visade användarnamn. Du kan ändra
         detta senare i alternativ.
+      tou: användarvillkor
+      contributor_terms: bidragsvillkor
       external auth: 'Tredjepartsautentisering:'
       continue: Registrera
       terms accepted: Tack för att du accepterat de nya villkoren för bidrag till
@@ -2763,7 +2786,9 @@ sv:
         för mer information.
       privacy_policy: integritetspolicy
       privacy_policy_title: OSMFs integritetspolicy inklusive avsnitt om e-postadresser
-      use external auth: Alternativt kan du använda en tredje part för att logga in
+      consider_pd: public domain
+      or: eller
+      use external auth: eller registrera med en tredje part
     terms:
       title: Villkor för deltagare
       heading: Villkor för deltagare
@@ -2868,6 +2893,8 @@ sv:
     index:
       title: Användare
       heading: Användare
+      older: Äldre användare
+      newer: Nyare användare
       summary_html: '%{name} skapades från %{ip_address} den %{date}'
       summary_no_ip_html: '%{name} skapad den %{date}'
       confirm: Bekräfta valda användare
@@ -3024,6 +3051,15 @@ sv:
       reason: Orsak till blockering
       status: Status
       revoker_name: Återkallad av
+      older: Äldre blockeringar
+      newer: Nya blockeringar
+    navigation:
+      all_blocks: Alla blockeringar
+      blocks_on_me: Blockeringar på mig
+      blocks_on_user: Blockeringar på %{user}
+      blocks_by_me: Blockeringar av mig
+      blocks_by_user: Blockeringar av %{user}
+      block: 'Blockering #%{id}'
   user_mutes:
     index:
       title: Tystade användare
@@ -3096,6 +3132,10 @@ sv:
       intro: Upptäckt ett misstag eller något som saknas? Låt andra karterare veta
         så att vi kan fixa det. Flytta markören till rätt position och skriv in en
         kommentar som förklarar problemet.
+      anonymous_warning_html: Du är inte inloggad. %{log_in} eller %{sign_up} om du
+        vill få uppdateringar för din anteckning.
+      anonymous_warning_log_in: logga in
+      anonymous_warning_sign_up: registrera dig
       advice: Din anteckning är offentlig och kan användas för att uppdatera kartan,
         så skriv inte personuppgifter eller information från upphovsrättsligt skyddade
         kartor eller kataloger.
@@ -3144,6 +3184,7 @@ sv:
         standard: Standard
         cycle_map: Cykelkarta
         transport_map: Transportkarta
+        tracestracktop_topo: Tracetrack Topo
         hot: Humanitärt
       layers:
         header: Kartskikt
index 9bb10218432737f422c765b2ba131c33b85e8034..1ecfa3182e58fac6ca4dee0f92b507938f1c930f 100644 (file)
@@ -1729,8 +1729,8 @@ zh-CN:
         your_note_html: '%{commenter} 重新激活了您在 %{place} 附近的一个注记。'
         commented_note: '%{commenter} 重新激活了您感兴趣的一个地图注记。该注记位于 %{place} 附近。'
         commented_note_html: '%{commenter} 重新激活了您感兴趣的一个地图注记。该注记位于 %{place} 附近。'
-      details: 更多关于笔记的详细信息可以在%{url}找到
-      details_html: 更多关于笔记的详细信息可以在%{url}找到
+      details: 在 %{url} 回复或了解更多有关注记的信息
+      details_html: 在 %{url} 回复或了解更多有关注记的信息
     changeset_comment_notification:
       description: 'OpenStreetMap 变更集 #%{id}'
       hi: 您好,%{to_user}:
@@ -1745,8 +1745,8 @@ zh-CN:
         partial_changeset_with_comment: 带评论“%{changeset_comment}”
         partial_changeset_with_comment_html: 带有评论“%{changeset_comment}”
         partial_changeset_without_comment: 没有评论
-      details: 更多关于变更集的详细信息可以在 %{url} 找到
-      details_html: 更多有关变更集的详细信息,请参见 %{url}
+      details: 在 %{url} 回复或了解更多有关变更集的信息
+      details_html: 在 %{url} 回复或了解更多有关变更集的信息
       unsubscribe: 您可访问%{url}以从该变更集中退订。
       unsubscribe_html: 您可访问%{url}以从该变更集中退订。
   confirmations:
index 65eab6907a00ff6008299f28d7d2beb8b674d78c..a0fcef8b9f2cf86a238844b0b5170f8dd0552fde 100644 (file)
@@ -8,7 +8,7 @@ module OSM
   # The base class for API Errors.
   class APIError < RuntimeError
     def initialize(message = "Generic API Error")
-      super(message)
+      super
     end
 
     def status
index 46ebb6a3741ea0d8f8ce934311a2f279b5460b25..7d2feed292dc585be422d6b67e165581fb1d08d5 100644 (file)
@@ -71,5 +71,75 @@ module Api
       assert_equal "online", js["api"]["status"]["gpx"]
       assert_equal Settings.imagery_blacklist.length, js["policy"]["imagery"]["blacklist"].length
     end
+
+    def test_capabilities_api_readonly
+      with_settings(:status => "api_readonly") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='online']", :count => 1
+            assert_select "status[api='readonly']", :count => 1
+            assert_select "status[gpx='online']", :count => 1
+          end
+        end
+      end
+    end
+
+    def test_capabilities_api_offline
+      with_settings(:status => "api_offline") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='online']", :count => 1
+            assert_select "status[api='offline']", :count => 1
+            assert_select "status[gpx='online']", :count => 1
+          end
+        end
+      end
+    end
+
+    def test_capabilities_database_readonly
+      with_settings(:status => "database_readonly") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='readonly']", :count => 1
+            assert_select "status[api='readonly']", :count => 1
+            assert_select "status[gpx='readonly']", :count => 1
+          end
+        end
+      end
+    end
+
+    def test_capabilities_database_offline
+      with_settings(:status => "database_offline") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='offline']", :count => 1
+            assert_select "status[api='offline']", :count => 1
+            assert_select "status[gpx='offline']", :count => 1
+          end
+        end
+      end
+    end
+
+    def test_capabilities_gpx_offline
+      with_settings(:status => "gpx_offline") do
+        get api_capabilities_path
+        assert_response :success
+        assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "status[database='online']", :count => 1
+            assert_select "status[api='online']", :count => 1
+            assert_select "status[gpx='offline']", :count => 1
+          end
+        end
+      end
+    end
   end
 end
index 1c70831c93c9b65293cb107ac1f04b059f4fd90c..d2b353a8edfe5142f8697b099c0346eb39050590 100644 (file)
@@ -46,5 +46,17 @@ module Api
       assert_response :success
       assert_select "osm[version]", :count => 0
     end
+
+    def test_versions_available_while_offline
+      with_settings(:status => "api_offline") do
+        get api_versions_path
+        assert_response :success
+        assert_select "osm[generator='#{Settings.generator}']", :count => 1 do
+          assert_select "api", :count => 1 do
+            assert_select "version", Settings.api_version
+          end
+        end
+      end
+    end
   end
 end
index 4611860d02552705267c588419d8e275353d1faa..1b0933d32b0f9c760f704ba707e49362cdc7f5ff 100644 (file)
@@ -45,47 +45,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     assert_select "form > div > input.is-invalid#user_email"
   end
 
-  def test_user_create_association_bad_auth_provider
-    assert_difference("User.count", 0) do
-      assert_no_difference("ActionMailer::Base.deliveries.size") do
-        perform_enqueued_jobs do
-          post "/user/new",
-               :params => { :user => { :email => "test@example.com",
-                                       :display_name => "new_tester",
-                                       :pass_crypt => "testtest",
-                                       :pass_crypt_confirmation => "testtest",
-                                       :auth_provider => "noprovider",
-                                       :auth_uid => "123454321",
-                                       :consider_pd => "1" } }
-          assert_redirected_to auth_path(:provider => "noprovider", :origin => "/user/new")
-          post response.location
-        end
-      end
-    end
-    assert_response :not_found
-  end
-
-  def test_user_create_association_no_auth_uid
-    OmniAuth.config.mock_auth[:google] = :invalid_credentials
-    assert_difference("User.count", 0) do
-      assert_no_difference("ActionMailer::Base.deliveries.size") do
-        perform_enqueued_jobs do
-          post "/user/new",
-               :params => { :user => { :email => "test@example.com",
-                                       :display_name => "new_tester",
-                                       :pass_crypt => "testtest",
-                                       :pass_crypt_confirmation => "testtest",
-                                       :auth_provider => "google",
-                                       :consider_pd => "1" } }
-          assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
-          post response.location
-        end
-      end
-    end
-    follow_redirect!
-    assert_redirected_to auth_failure_path(:strategy => "google", :message => "invalid_credentials", :origin => "/user/new")
-  end
-
   def test_user_create_association_submit_duplicate_email
     dup_email = create(:user).email
     display_name = "new_tester"
@@ -275,6 +234,7 @@ class UserCreationTest < ActionDispatch::IntegrationTest
   def test_user_create_openid_success
     new_email = "newtester-openid@osm.org"
     display_name = "new_tester-openid"
+    openid_url = "http://localhost:1000/new.tester"
     auth_uid = "http://localhost:1123/new.tester"
 
     OmniAuth.config.add_mock(:openid,
@@ -284,8 +244,8 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
         perform_enqueued_jobs do
-          post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-          assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+          post auth_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
+          assert_redirected_to auth_success_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
           follow_redirect!
           assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
                                :auth_provider => "openid", :auth_uid => auth_uid
@@ -294,11 +254,8 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                :params => { :user => { :email => new_email,
                                        :display_name => display_name,
                                        :auth_provider => "openid",
-                                       :auth_uid => "http://localhost:1123/new.tester",
+                                       :auth_uid => auth_uid,
                                        :consider_pd => "1" } }
-          assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-          post response.location
-          follow_redirect!
         end
       end
     end
@@ -335,22 +292,10 @@ class UserCreationTest < ActionDispatch::IntegrationTest
   def test_user_create_openid_failure
     OmniAuth.config.mock_auth[:openid] = :connection_failed
 
-    new_email = "newtester-openid2@osm.org"
-    display_name = "new_tester-openid2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
         perform_enqueued_jobs do
-          post "/user/new",
-               :params => { :user => { :email => new_email,
-                                       :email_confirmation => new_email,
-                                       :display_name => display_name,
-                                       :auth_provider => "openid",
-                                       :auth_uid => "http://localhost:1123/new.tester",
-                                       :pass_crypt => "",
-                                       :pass_crypt_confirmation => "" } }
-          assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+          post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
           follow_redirect!
           assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
           follow_redirect!
@@ -363,6 +308,7 @@ class UserCreationTest < ActionDispatch::IntegrationTest
   end
 
   def test_user_create_openid_redirect
+    openid_url = "http://localhost:1000/new.tester"
     auth_uid = "http://localhost:1123/new.tester"
     new_email = "redirect_tester_openid@osm.org"
     display_name = "redirect_tester_openid"
@@ -374,8 +320,8 @@ class UserCreationTest < ActionDispatch::IntegrationTest
     assert_difference("User.count") do
       assert_difference("ActionMailer::Base.deliveries.size", 1) do
         perform_enqueued_jobs do
-          post auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-          assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
+          post auth_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
+          assert_redirected_to auth_success_path(:provider => "openid", :openid_url => openid_url, :origin => "/user/new")
           follow_redirect!
           assert_redirected_to :controller => :users, :action => "new", :nickname => display_name, :email => new_email,
                                :auth_provider => "openid", :auth_uid => auth_uid
@@ -386,11 +332,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                                        :auth_provider => "openid",
                                        :auth_uid => auth_uid,
                                        :consider_pd => "1" } }
-          assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
-          follow_redirect!
-          assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
           follow_redirect!
         end
       end
@@ -454,10 +395,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                                        :auth_uid => auth_uid,
                                        :consider_pd => "1" },
                             :email_hmac => email_hmac }
-          assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "google")
-          follow_redirect!
           assert_redirected_to welcome_path
           follow_redirect!
         end
@@ -499,22 +436,11 @@ class UserCreationTest < ActionDispatch::IntegrationTest
   def test_user_create_google_failure
     OmniAuth.config.mock_auth[:google] = :connection_failed
 
-    new_email = "newtester-google2@osm.org"
-    display_name = "new_tester-google2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
         perform_enqueued_jobs do
-          post "/user/new",
-               :params => { :user => { :email => new_email,
-                                       :email_confirmation => new_email,
-                                       :display_name => display_name,
-                                       :auth_provider => "google",
-                                       :auth_uid => "123454321",
-                                       :pass_crypt => "",
-                                       :pass_crypt_confirmation => "" } }
-          assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "google")
+          post auth_path(:provider => "google", :origin => "/user/new")
+          assert_response :redirect
           follow_redirect!
           assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
           follow_redirect!
@@ -555,11 +481,7 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                                        :auth_provider => "google",
                                        :auth_uid => auth_uid,
                                        :consider_pd => "1" } }
-          assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "google")
-          follow_redirect!
-          assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
+          assert_response :redirect
           follow_redirect!
         end
       end
@@ -622,10 +544,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                                        :auth_uid => auth_uid,
                                        :consider_pd => "1" },
                             :email_hmac => email_hmac }
-          assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "facebook")
-          follow_redirect!
           assert_redirected_to welcome_path
           follow_redirect!
         end
@@ -666,22 +584,11 @@ class UserCreationTest < ActionDispatch::IntegrationTest
   def test_user_create_facebook_failure
     OmniAuth.config.mock_auth[:facebook] = :connection_failed
 
-    new_email = "newtester-facebook2@osm.org"
-    display_name = "new_tester-facebook2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
         perform_enqueued_jobs do
-          post "/user/new",
-               :params => { :user => { :email => new_email,
-                                       :email_confirmation => new_email,
-                                       :display_name => display_name,
-                                       :auth_provider => "facebook",
-                                       :auth_uid => "123454321",
-                                       :pass_crypt => "",
-                                       :pass_crypt_confirmation => "" } }
-          assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "facebook")
+          post auth_path(:provider => "facebook", :origin => "/user/new")
+          assert_response :redirect
           follow_redirect!
           assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
           follow_redirect!
@@ -723,11 +630,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                                        :auth_provider => "facebook",
                                        :auth_uid => auth_uid,
                                        :consider_pd => "1" } }
-          assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "facebook")
-          follow_redirect!
-          assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
           assert_response :redirect
           follow_redirect!
         end
@@ -790,10 +692,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                                        :auth_uid => auth_uid,
                                        :consider_pd => "1" },
                             :email_hmac => email_hmac }
-          assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "microsoft")
-          follow_redirect!
           assert_redirected_to welcome_path
           follow_redirect!
         end
@@ -834,22 +732,11 @@ class UserCreationTest < ActionDispatch::IntegrationTest
   def test_user_create_microsoft_failure
     OmniAuth.config.mock_auth[:microsoft] = :connection_failed
 
-    new_email = "newtester-microsoft2@osm.org"
-    display_name = "new_tester-microsoft2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
         perform_enqueued_jobs do
-          post "/user/new",
-               :params => { :user => { :email => new_email,
-                                       :email_confirmation => new_email,
-                                       :display_name => display_name,
-                                       :auth_provider => "microsoft",
-                                       :auth_uid => "123454321",
-                                       :pass_crypt => "",
-                                       :pass_crypt_confirmation => "" } }
-          assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "microsoft")
+          post auth_path(:provider => "microsoft", :origin => "/user/new")
+          assert_response :redirect
           follow_redirect!
           assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new")
           follow_redirect!
@@ -890,11 +777,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                                        :auth_provider => "microsoft",
                                        :auth_uid => auth_uid,
                                        :consider_pd => "1" } }
-          assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "microsoft")
-          follow_redirect!
-          assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
           assert_response :redirect
           follow_redirect!
         end
@@ -962,10 +844,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                             :read_ct => 1,
                             :read_tou => 1,
                             :email_hmac => email_hmac }
-          assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "github")
-          follow_redirect!
           assert_redirected_to welcome_path
           follow_redirect!
         end
@@ -1007,22 +885,10 @@ class UserCreationTest < ActionDispatch::IntegrationTest
   def test_user_create_github_failure
     OmniAuth.config.mock_auth[:github] = :connection_failed
 
-    new_email = "newtester-github2@osm.org"
-    display_name = "new_tester-github2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
         perform_enqueued_jobs do
-          post "/user/new",
-               :params => { :user => { :email => new_email,
-                                       :email_confirmation => new_email,
-                                       :display_name => display_name,
-                                       :auth_provider => "github",
-                                       :auth_uid => "123454321",
-                                       :pass_crypt => "",
-                                       :pass_crypt_confirmation => "" } }
-          assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "github")
+          post auth_path(:provider => "github", :origin => "/user/new")
           follow_redirect!
           assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
           follow_redirect!
@@ -1062,11 +928,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                                        :auth_provider => "github",
                                        :auth_uid => auth_uid,
                                        :consider_pd => "1" } }
-          assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "github")
-          follow_redirect!
-          assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
           assert_response :redirect
           follow_redirect!
         end
@@ -1133,10 +994,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                             :read_ct => 1,
                             :read_tou => 1,
                             :email_hmac => email_hmac }
-          assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
-          follow_redirect!
           assert_redirected_to welcome_path
           follow_redirect!
         end
@@ -1175,22 +1032,11 @@ class UserCreationTest < ActionDispatch::IntegrationTest
   def test_user_create_wikipedia_failure
     OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
 
-    new_email = "newtester-wikipedia2@osm.org"
-    display_name = "new_tester-wikipedia2"
     assert_difference("User.count", 0) do
       assert_difference("ActionMailer::Base.deliveries.size", 0) do
         perform_enqueued_jobs do
-          post "/user/new",
-               :params => { :user => { :email => new_email,
-                                       :email_confirmation => new_email,
-                                       :display_name => display_name,
-                                       :auth_provider => "wikipedia",
-                                       :auth_uid => "123454321",
-                                       :pass_crypt => "",
-                                       :pass_crypt_confirmation => "" } }
-          assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
+          post auth_path(:provider => "wikipedia", :origin => "/user/new")
+          assert_response :redirect
           follow_redirect!
           assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
           follow_redirect!
@@ -1232,11 +1078,6 @@ class UserCreationTest < ActionDispatch::IntegrationTest
                                        :auth_provider => "wikipedia",
                                        :auth_uid => auth_uid,
                                        :consider_pd => "1" } }
-          assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
-          post response.location
-          assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
-          follow_redirect!
-          assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name
           assert_response :redirect
           follow_redirect!
         end
index 230c1c716a0c97461471e69eeb10d1faca714896..dec04559d1beb6d10efceed8149bc69bceab5009 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
@@ -576,9 +576,9 @@ optionator@^0.9.3:
     type-check "^0.4.0"
 
 osm-community-index@^5.2.0:
-  version "5.7.0"
-  resolved "https://registry.yarnpkg.com/osm-community-index/-/osm-community-index-5.7.0.tgz#1c1a785fd13a2e00535da8db132c4e49780f0b28"
-  integrity sha512-r5h58L9mGh2Wu4XcJoGKLdw3oBY41jWAMUVBNE9tBS9sZINwSZccrImhxuOS5DmpslTjZ6w1cn7x9sE8tnFGpQ==
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/osm-community-index/-/osm-community-index-5.7.1.tgz#2341666c83d14c00ef3d9a90298c96d5e791b56c"
+  integrity sha512-E+Xib5m//WliNq2iqeUXyKqZk7yhZu/vSJbwwyxDAPzcNWxgIMoO0B7cUMeFNckhMQsKM2UuC2BAjWuVfbYf1Q==
   dependencies:
     diacritics "^1.3.0"