From 586a442abcffd75e7bf8560cd5bc3be7e1e4ab30 Mon Sep 17 00:00:00 2001 From: Luka Murn Date: Wed, 5 Sep 2018 16:36:32 +0200 Subject: [PATCH] Refactor the settings page, rename setting to tooltips_enabled --- .../settings/account/preferences/index.js | 23 ++- .../account/preferences_controller.rb | 38 +++-- app/models/user.rb | 8 +- app/views/layouts/application.html.erb | 2 +- .../account/preferences/index.html.erb | 160 +++++++++--------- config/routes.rb | 6 +- ...0_add_tooltips_enabled_to_user_settings.rb | 15 ++ db/schema.rb | 2 +- 8 files changed, 146 insertions(+), 108 deletions(-) create mode 100644 db/migrate/20180905142400_add_tooltips_enabled_to_user_settings.rb diff --git a/app/assets/javascripts/users/settings/account/preferences/index.js b/app/assets/javascripts/users/settings/account/preferences/index.js index bb29998d3..892ceb761 100644 --- a/app/assets/javascripts/users/settings/account/preferences/index.js +++ b/app/assets/javascripts/users/settings/account/preferences/index.js @@ -66,13 +66,13 @@ }); notificationsSettings(); - initNotificationSettingsForm(); + tooltipSettings(); + initTogglableSettingsForm(); // Setup notification checkbox buttons function notificationsSettings() { var notification_settings = [ "recent_notification", - "assignments_notification", - "popovers_enabled" ] + "assignments_notification" ] for (var i = 0; i < notification_settings.length; i++ ) { var setting = $('[name="' + notification_settings[i] + '"]'); @@ -142,9 +142,22 @@ ); } +// Initialize tooltips settings form + function tooltipSettings() { + var toggleInput = $('[name="tooltips_enabled"]'); + toggleInput + .checkboxpicker({ onActiveCls: 'btn-toggle', offActiveCls: 'btn-toggle' }); + + if (toggleInput.attr('value') === 'true') { + toggleInput.prop('checked', true); + } else { + toggleInput.prop('checked', false); + } + } + // triggers submit action when the user clicks - function initNotificationSettingsForm() { - $('#notifications-settings-panel') + function initTogglableSettingsForm() { + $('#togglable-settings-panel') .find('.btn-group') .on('click', function() { $(this).submit(); diff --git a/app/controllers/users/settings/account/preferences_controller.rb b/app/controllers/users/settings/account/preferences_controller.rb index 0224594a1..51f767be8 100644 --- a/app/controllers/users/settings/account/preferences_controller.rb +++ b/app/controllers/users/settings/account/preferences_controller.rb @@ -5,7 +5,7 @@ module Users before_action :load_user, only: [ :index, :update, - :notifications_settings + :update_togglable_settings ] layout 'fluid' @@ -30,19 +30,25 @@ module Users end end - def notifications_settings - @user.assignments_notification = - params[:assignments_notification] ? true : false - @user.recent_notification = - params[:recent_notification] ? true : false - @user.recent_email_notification = - params[:recent_notification_email] ? true : false - @user.assignments_email_notification = - params[:assignments_notification_email] ? true : false - @user.system_message_email_notification = - params[:system_message_notification_email] ? true : false - @user.popovers_enabled = - params[:popovers_enabled] ? true : false + def update_togglable_settings + read_from_params(:assignments_notification) do |val| + @user.assignments_notification = val + end + read_from_params(:recent_notification) do |val| + @user.recent_notification = val + end + read_from_params(:recent_notification_email) do |val| + @user.recent_email_notification = val + end + read_from_params(:assignments_notification_email) do |val| + @user.assignments_email_notification = val + end + read_from_params(:system_message_notification_email) do |val| + @user.system_message_email_notification = val + end + read_from_params(:tooltips_enabled) do |val| + @user.settings[:tooltips_enabled] = val + end if @user.save respond_to do |format| format.json do @@ -73,6 +79,10 @@ module Users :time_zone ) end + + def read_from_params(name) + yield(params.include?(name) ? true : false) + end end end end diff --git a/app/models/user.rb b/app/models/user.rb index 61b2fe45a..fbab2c132 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -44,8 +44,8 @@ class User < ApplicationRecord recent: true, recent_email: false, system_message_email: false, - popovers_enabled: true - } + }, + tooltips_enabled: true ) # Relations @@ -457,8 +457,8 @@ class User < ApplicationRecord NOTIFICATIONS_TYPES = %w(assignments_notification recent_notification assignments_email_notification recent_email_notification - system_message_email_notification - popovers_enabled ) + system_message_email_notification) + # declare notifications getters NOTIFICATIONS_TYPES.each do |name| define_method(name) do diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 4171475a5..d51cf1209 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -29,7 +29,7 @@ data-atwho-rep-items-url="<%= atwho_rep_items_team_path(current_team) %>" data-atwho-menu-items="<%= atwho_menu_items_team_path(current_team) %>" data-file-max-size-mb="<%= Rails.configuration.x.file_max_size_mb %>" - data-popover_v2_enabled="<%= current_user.popovers_enabled %>" + data-tooltips-enabled="<%= current_user.settings[:tooltips_enabled] %>" <% end %> > diff --git a/app/views/users/settings/account/preferences/index.html.erb b/app/views/users/settings/account/preferences/index.html.erb index 5a453edf2..cc9fac02c 100644 --- a/app/views/users/settings/account/preferences/index.html.erb +++ b/app/views/users/settings/account/preferences/index.html.erb @@ -50,52 +50,27 @@ <% end %>
-
-

<%= t('notifications.title') %>

- <%= form_for(@user, - url: notifications_settings_path(format: :json), - html: { method: :post, id: 'notifications-settings-panel' }, - remote: true) do |f| %> -
-
- -
-
- <%=t 'notifications.form.assignments' %> -

<%=t 'notifications.form.assignments_description' %>

-
-
- <%=t 'notifications.form.notification_scinote' %> -
-
- <%= check_box_tag :assignments_notification, @user.assignments_notification %> -
+ <%= form_for(@user, + url: update_togglable_settings_path(format: :json), + html: { method: :post, id: 'togglable-settings-panel' }, + remote: true) do |f| %> +
+

<%= t('notifications.title') %>

+
+
+
-
-
- <%=t 'notifications.form.notification_email' %> -
-
- <%= check_box_tag :assignments_notification_email, @user.assignments_email_notification %> -
-
-
-
-
-
- <%= image_tag 'icon_small/missing.png', class: 'img-circle ' %> -
-
- <%=t 'notifications.form.recent_notification' %> -

<%=t 'notifications.form.recent_notification_description' %>

+
+ <%=t 'notifications.form.assignments' %> +

<%=t 'notifications.form.assignments_description' %>

<%=t 'notifications.form.notification_scinote' %>
- <%= check_box_tag :recent_notification, @user.recent_notification %> + <%= check_box_tag :assignments_notification, @user.assignments_notification %>
@@ -103,58 +78,83 @@ <%=t 'notifications.form.notification_email' %>
- <%= check_box_tag :recent_notification_email, @user.recent_email_notification %> + <%= check_box_tag :assignments_notification_email, @user.assignments_email_notification %>
-
-
-
-
- -
-
- <%=t 'notifications.form.system_message' %> -

<%=t 'notifications.form.system_message_description' %>

-
-
- <%=t 'notifications.form.notification_scinote' %> -
-
- <%= check_box_tag :system_message_notification %> -
-
-
- <%=t 'notifications.form.notification_email' %> +
+
+
+ <%= image_tag 'icon_small/missing.png', class: 'img-circle ' %> +
+
+ <%=t 'notifications.form.recent_notification' %> +

<%=t 'notifications.form.recent_notification_description' %>

+
+
+ <%=t 'notifications.form.notification_scinote' %> +
+
+ <%= check_box_tag :recent_notification, @user.recent_notification %> +
+
+
+
+ <%=t 'notifications.form.notification_email' %> +
+
+ <%= check_box_tag :recent_notification_email, @user.recent_email_notification %> +
+
+
+
+
+
+ +
+
+ <%=t 'notifications.form.system_message' %> +

<%=t 'notifications.form.system_message_description' %>

+
+
+ <%=t 'notifications.form.notification_scinote' %> +
+
+ <%= check_box_tag :system_message_notification %> +
-
- <%= check_box_tag :system_message_notification_email, @user.system_message_email_notification %> +
+
+ <%=t 'notifications.form.notification_email' %> +
+
+ <%= check_box_tag :system_message_notification_email, @user.system_message_email_notification %> +
-

<%= t('users.settings.account.preferences.edit.tips.title') %>

-
-
- -
-
-

<%=t 'users.settings.account.preferences.edit.tips.text1' %>

-

<%=t 'users.settings.account.preferences.edit.tips.text2' %>

-
-
- <%=t 'users.settings.account.preferences.edit.tips.toggle' %> -
-
- <%= check_box_tag :popovers_enabled, @user.popovers_enabled %> +
+
+

<%= t('users.settings.account.preferences.edit.tips.title') %>

+
+
+
+
+

<%=t 'users.settings.account.preferences.edit.tips.text1' %>

+

<%=t 'users.settings.account.preferences.edit.tips.text2' %>

+
+
+ <%=t 'users.settings.account.preferences.edit.tips.toggle' %> +
+
+ <%= check_box_tag :tooltips_enabled, @user.settings[:tooltips_enabled] %> +
- <% end %> -
+ <% end %>
diff --git a/config/routes.rb b/config/routes.rb index 785cd4805..58ff33bc7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -56,9 +56,9 @@ Rails.application.routes.draw do put 'users/settings/account/preferences', to: 'users/settings/account/preferences#update', as: 'update_preferences' - post 'users/settings/account/preferences/notifications_settings', - to: 'users/settings/account/preferences#notifications_settings', - as: 'notifications_settings', + post 'users/settings/account/preferences/togglable_settings', + to: 'users/settings/account/preferences#update_togglable_settings', + as: 'update_togglable_settings', defaults: { format: 'json' } # Change user's current team diff --git a/db/migrate/20180905142400_add_tooltips_enabled_to_user_settings.rb b/db/migrate/20180905142400_add_tooltips_enabled_to_user_settings.rb new file mode 100644 index 000000000..26cb7535f --- /dev/null +++ b/db/migrate/20180905142400_add_tooltips_enabled_to_user_settings.rb @@ -0,0 +1,15 @@ +class AddTooltipsEnabledToUserSettings < ActiveRecord::Migration[5.1] + def up + User.find_each do |user| + user.settings[:tooltips_enabled] = true + user.save + end + end + + def down + User.find_each do |user| + user.settings.delete(:tooltips_enabled) + user.save + end + end +end diff --git a/db/schema.rb b/db/schema.rb index ce0aa9260..4d1cfd7aa 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180524091143) do +ActiveRecord::Schema.define(version: 20180905142400) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql"