]> git.openstreetmap.org Git - rails.git/commitdiff
Make preferences page editable without clicking 'Edit Preferences'
authorAnton Khorev <tony29@yandex.ru>
Sun, 29 Dec 2024 17:08:17 +0000 (20:08 +0300)
committerAnton Khorev <tony29@yandex.ru>
Sun, 29 Dec 2024 17:08:17 +0000 (20:08 +0300)
app/controllers/preferences_controller.rb
app/views/preferences/edit.html.erb [deleted file]
app/views/preferences/show.html.erb
config/locales/en.yml
config/routes.rb
test/controllers/preferences_controller_test.rb
test/system/preferences_test.rb
test/system/view_communities_test.rb

index 1d96766ef227b7dbaa86b870f03ca1534c8513c6..910f6a24fc44350e490b771d34fb417dd5cedfa0 100644 (file)
@@ -11,8 +11,6 @@ class PreferencesController < ApplicationController
 
   def show; end
 
-  def edit; end
-
   def update
     current_user.languages = params[:user][:languages].split(",")
 
@@ -40,7 +38,7 @@ class PreferencesController < ApplicationController
       redirect_to preferences_path
     else
       flash.now[:error] = t ".failure"
-      render :edit
+      render :show
     end
   end
 end
diff --git a/app/views/preferences/edit.html.erb b/app/views/preferences/edit.html.erb
deleted file mode 100644 (file)
index aaf07e9..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<% content_for :heading do %>
-  <h1><%= t ".title" %></h1>
-<% end %>
-
-<%= bootstrap_form_for current_user, :url => { :action => :update } do |f| %>
-  <%= f.select :preferred_editor, [[t("editor.default", :name => t("editor.#{Settings.default_editor}.name")), "default"]] + Editors::AVAILABLE_EDITORS.collect { |e| [t("editor.#{e}.description"), e] } %>
-
-  <%= f.text_field :languages %>
-
-  <div class="mb-3">
-    <%= label_tag "site_color_scheme", t("preferences.show.preferred_site_color_scheme"), :class => "form-label" %>
-    <%= select_tag "site_color_scheme",
-                   options_for_select(%w[auto light dark].map { |scheme| [t("preferences.show.site_color_schemes.#{scheme}"), scheme] },
-                                      preferred_color_scheme(:site)),
-                   :class => "form-select" %>
-  </div>
-
-  <div class="mb-3">
-    <%= label_tag "map_color_scheme", t("preferences.show.preferred_map_color_scheme"), :class => "form-label" %>
-    <%= select_tag "map_color_scheme",
-                   options_for_select(%w[auto light dark].map { |scheme| [t("preferences.show.map_color_schemes.#{scheme}"), scheme] },
-                                      preferred_color_scheme(:map)),
-                   :class => "form-select" %>
-  </div>
-
-  <%= f.primary t(".save") %>
-  <%= link_to t(".cancel"), preferences_path, :class => "btn btn-link" %>
-<% end %>
index 9bf83cbf1f0f72b846e3c43bbac278703fcef61a..f23afda002bbdaafe7eb49e36e966143cd3c05ef 100644 (file)
@@ -2,36 +2,26 @@
   <h1><%= t ".title" %></h1>
 <% end %>
 
-<dl class="row">
-  <dt class="col-sm-4"><%= t ".preferred_editor" %></dt>
+<%= bootstrap_form_for current_user, :url => { :action => :update } do |f| %>
+  <%= f.select :preferred_editor, [[t("editor.default", :name => t("editor.#{Settings.default_editor}.name")), "default"]] + Editors::AVAILABLE_EDITORS.collect { |e| [t("editor.#{e}.description"), e] } %>
 
-  <% if current_user.preferred_editor? %>
-    <dd class="col-sm-8"><%= t("editor.#{current_user.preferred_editor}.description") %></dd>
-  <% else %>
-    <dd class="col-sm-8"><%= t("editor.default", :name => t("editor.#{Settings.default_editor}.name")) %></dd>
-  <% end %>
+  <%= f.text_field :languages %>
 
-  <dt class="col-sm-4"><%= t ".preferred_languages" %></dt>
+  <div class="mb-3">
+    <%= label_tag "site_color_scheme", t(".preferred_site_color_scheme"), :class => "form-label" %>
+    <%= select_tag "site_color_scheme",
+                   options_for_select(%w[auto light dark].map { |scheme| [t(".site_color_schemes.#{scheme}"), scheme] },
+                                      preferred_color_scheme(:site)),
+                   :class => "form-select" %>
+  </div>
 
-  <dd class="col-sm-8">
-    <ul class="list-unstyled">
-      <% current_user.preferred_languages.each do |locale| %>
-        <li><%= locale %></li>
-      <% end %>
-    </ul>
-  </dd>
+  <div class="mb-3">
+    <%= label_tag "map_color_scheme", t(".preferred_map_color_scheme"), :class => "form-label" %>
+    <%= select_tag "map_color_scheme",
+                   options_for_select(%w[auto light dark].map { |scheme| [t(".map_color_schemes.#{scheme}"), scheme] },
+                                      preferred_color_scheme(:map)),
+                   :class => "form-select" %>
+  </div>
 
-  <dt class="col-sm-4"><%= t ".preferred_site_color_scheme" %></dt>
-  <dd class="col-sm-8">
-    <%= t ".site_color_schemes.#{preferred_color_scheme(:site)}" %>
-  </dd>
-
-  <dt class="col-sm-4"><%= t ".preferred_map_color_scheme" %></dt>
-  <dd class="col-sm-8">
-    <%= t ".map_color_schemes.#{preferred_color_scheme(:map)}" %>
-  </dd>
-</dl>
-
-<div>
-  <%= link_to t(".edit_preferences"), edit_preferences_path, :class => "btn btn-outline-primary" %>
-</div>
+  <%= f.primary t(".save") %>
+<% end %>
index 7faf3bebcf1e42b35eef23a245fbc7e557828243..94d095c265df0ba272f41824f3b184d409e2c432 100644 (file)
@@ -1841,11 +1841,7 @@ en:
         auto: Auto
         light: Light
         dark: Dark
-      edit_preferences: Edit Preferences
-    edit:
-      title: Edit Preferences
       save: Update Preferences
-      cancel: Cancel
     update:
       failure: Couldn't update preferences.
     update_success_flash:
index 0e00da9e3b4f0555b28fd1c06b747b272bf0d5f9..5bda1b37c3383c450269275a4df15abbbf7d8bb7 100644 (file)
@@ -281,7 +281,8 @@ OpenStreetMap::Application.routes.draw do
     resource :deletion, :only => [:show]
   end
   resource :dashboard, :only => [:show]
-  resource :preferences, :only => [:show, :edit, :update]
+  resource :preferences, :only => [:show, :update]
+  get "/preferences/edit", :to => redirect(:path => "/preferences")
   resource :profile, :only => [:edit, :update]
 
   # friendships
index 1cd07b7d9f68a4adfaa6fc655215a80a21edceab..86fc89a717af16780c21e472a7c3e12a7981543f 100644 (file)
@@ -9,11 +9,6 @@ class PreferencesControllerTest < ActionDispatch::IntegrationTest
       { :controller => "preferences", :action => "show" }
     )
 
-    assert_routing(
-      { :path => "/preferences/edit", :method => :get },
-      { :controller => "preferences", :action => "edit" }
-    )
-
     assert_routing(
       { :path => "/preferences", :method => :put },
       { :controller => "preferences", :action => "update" }
@@ -27,35 +22,35 @@ class PreferencesControllerTest < ActionDispatch::IntegrationTest
     session_for(user)
 
     # Changing to a invalid editor should fail
-    user.preferred_editor = "unknown"
-    put preferences_path, :params => { :user => user.attributes }
+    put preferences_path, :params => { :user => { :preferred_editor => "unknown", :languages => [] } }
     assert_response :success
-    assert_template :edit
+    assert_template :show
     assert_select ".alert-success", false
     assert_select ".alert-danger", true
-    assert_select "form > div > select#user_preferred_editor > option[selected]", false
+    user.reload
+    assert_nil user.preferred_editor
     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
     assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
 
     # Changing to a valid editor should work
-    user.preferred_editor = "id"
-    put preferences_path, :params => { :user => user.attributes }
+    put preferences_path, :params => { :user => { :preferred_editor => "id", :languages => [] } }
     assert_redirected_to preferences_path
     follow_redirect!
     assert_template :show
     assert_select ".alert-success", /^Preferences updated/
-    assert_select "dd", "iD (in-browser editor)"
+    user.reload
+    assert_equal "id", user.preferred_editor
     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
     assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
 
     # Changing to the default editor should work
-    user.preferred_editor = "default"
-    put preferences_path, :params => { :user => user.attributes }
+    put preferences_path, :params => { :user => { :preferred_editor => "default", :languages => [] } }
     assert_redirected_to preferences_path
     follow_redirect!
     assert_template :show
     assert_select ".alert-success", /^Preferences updated/
-    assert_select "dd", "Default (currently iD)"
+    user.reload
+    assert_nil user.preferred_editor
     assert_equal "light", user.preferences.find_by(:k => "site.color_scheme")&.v
     assert_equal "light", user.preferences.find_by(:k => "map.color_scheme")&.v
   end
index 59a7209f5b4d3728fbb8f3049e4db4a03f0326f4..89728a36ee35658d5e477e6fcae4e66db792a6e2 100644 (file)
@@ -4,7 +4,7 @@ class PreferencesTest < ApplicationSystemTestCase
   def test_flash_message_shows_in_original_language
     sign_in_as(create(:user))
 
-    visit edit_preferences_path
+    visit preferences_path
     click_on "Update Preferences"
 
     assert_content "Preferences updated"
@@ -13,7 +13,7 @@ class PreferencesTest < ApplicationSystemTestCase
   def test_flash_message_shows_in_new_language
     sign_in_as(create(:user))
 
-    visit edit_preferences_path
+    visit preferences_path
     fill_in "Preferred Languages", :with => "fr"
     click_on "Update Preferences"
 
index 349d0a5bf742c4c97faf980f6055118a4ea10dad..b4b043edfce164af5aa95d381ed73c9119ba522c 100644 (file)
@@ -11,7 +11,7 @@ class ViewCommunitiesTest < ApplicationSystemTestCase
   def test_translated_links
     sign_in_as(create(:user))
 
-    visit edit_preferences_path
+    visit preferences_path
     fill_in "Preferred Languages", :with => "fr"
     click_on "Update Preferences"