commit: 7a6d95f70ccb12d61355ecd677eff40dd13260b7
parent: 9b195f5dd34ad646e1300abaaa42e10cf43cd5db
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Fri, 14 Oct 2016 02:28:49 +0200
E-mail preferences page
Diffstat:
16 files changed, 162 insertions(+), 69 deletions(-)
diff --git a/app/assets/javascripts/components/features/ui/components/navigation_bar.jsx b/app/assets/javascripts/components/features/ui/components/navigation_bar.jsx
@@ -19,7 +19,7 @@ const NavigationBar = React.createClass({
<div style={{ flex: '1 1 auto', marginLeft: '8px', color: '#9baec8' }}>
<strong style={{ fontWeight: '500', display: 'block', color: '#fff' }}>{this.props.account.get('acct')}</strong>
- <a href='/settings' style={{ color: 'inherit', textDecoration: 'none' }}>Settings</a> · <Link to='/statuses/all' style={{ color: 'inherit', textDecoration: 'none' }}>Public timeline</Link> · <a href='/auth/sign_out' data-method='delete' style={{ color: 'inherit', textDecoration: 'none' }}>Logout</a>
+ <a href='/settings/profile' style={{ color: 'inherit', textDecoration: 'none' }}>Settings</a> · <Link to='/statuses/all' style={{ color: 'inherit', textDecoration: 'none' }}>Public timeline</Link> · <a href='/auth/sign_out' data-method='delete' style={{ color: 'inherit', textDecoration: 'none' }}>Logout</a>
</div>
</div>
);
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
@@ -214,6 +214,25 @@ body {
}
}
+ .fields-group {
+ margin-bottom: 25px;
+ }
+
+ .boolean-field {
+ margin-bottom: 5px;
+
+ label {
+ font-family: 'Roboto';
+ font-size: 14px;
+ color: #9baec8;
+ }
+
+ input[type=checkbox] {
+ display: inline-block;
+ margin-bottom: -13px;
+ }
+ }
+
input[type=text], input[type=email], input[type=password], textarea {
background: transparent;
border: 0;
diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb
@@ -0,0 +1,27 @@
+class Settings::PreferencesController < ApplicationController
+ layout 'auth'
+
+ before_action :authenticate_user!
+
+ def show
+ end
+
+ def update
+ current_user.settings(:notification_emails).follow = user_params[:notification_emails][:follow] == '1'
+ current_user.settings(:notification_emails).reblog = user_params[:notification_emails][:reblog] == '1'
+ current_user.settings(:notification_emails).favourite = user_params[:notification_emails][:favourite] == '1'
+ current_user.settings(:notification_emails).mention = user_params[:notification_emails][:mention] == '1'
+
+ if current_user.save
+ redirect_to settings_preferences_path, notice: 'Changes successfully saved!'
+ else
+ render action: :show
+ end
+ end
+
+ private
+
+ def user_params
+ params.require(:user).permit(notification_emails: [:follow, :reblog, :favourite, :mention])
+ end
+end
diff --git a/app/controllers/settings/profiles_controller.rb b/app/controllers/settings/profiles_controller.rb
@@ -0,0 +1,27 @@
+class Settings::ProfilesController < ApplicationController
+ layout 'auth'
+
+ before_action :authenticate_user!
+ before_action :set_account
+
+ def show
+ end
+
+ def update
+ if @account.update(account_params)
+ redirect_to settings_profile_path, notice: 'Changes successfully saved!'
+ else
+ render action: :show
+ end
+ end
+
+ private
+
+ def account_params
+ params.require(:account).permit(:display_name, :note, :avatar, :header)
+ end
+
+ def set_account
+ @account = current_user.account
+ end
+end
diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb
@@ -1,27 +0,0 @@
-class SettingsController < ApplicationController
- layout 'auth'
-
- before_action :authenticate_user!
- before_action :set_account
-
- def show
- end
-
- def update
- if @account.update(account_params)
- redirect_to settings_path, notice: 'Changes successfully saved!'
- else
- render action: :show
- end
- end
-
- private
-
- def account_params
- params.require(:account).permit(:display_name, :note, :avatar, :header)
- end
-
- def set_account
- @account = current_user.account
- end
-end
diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb
@@ -1,2 +0,0 @@
-module SettingsHelper
-end
diff --git a/app/views/auth/registrations/edit.html.haml b/app/views/auth/registrations/edit.html.haml
@@ -10,5 +10,8 @@
= f.password_field :password_confirmation, autocomplete: "off", placeholder: 'Confirm new password'
.field
= f.password_field :current_password, autocomplete: "off", placeholder: 'Current password'
+
.actions
= f.button "Save changes", type: 'submit'
+
+.form-footer= render "settings/shared/links"
diff --git a/app/views/settings/preferences/show.html.haml b/app/views/settings/preferences/show.html.haml
@@ -0,0 +1,22 @@
+- content_for :page_title do
+ Preferences
+
+= form_for current_user, url: settings_preferences_path, html: { method: :put } do |f|
+ = f.fields_for :notification_emails, current_user.settings(:notification_emails) do |ff|
+ .boolean-field
+ = ff.check_box :follow
+ = ff.label :follow, 'Send e-mail when someone follows you'
+ .boolean-field
+ = ff.check_box :reblog
+ = ff.label :reblog, 'Send e-mail when someone reblogs your status'
+ .boolean-field
+ = ff.check_box :favourite
+ = ff.label :favourite, 'Send e-mail when someone favourites your status'
+ .boolean-field
+ = ff.check_box :mention
+ = ff.label :mention, 'Send e-mail when someone mentions you'
+
+ .actions
+ = f.button 'Save changes', type: :submit
+
+.form-footer= render "settings/shared/links"
diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml
@@ -0,0 +1,19 @@
+- content_for :page_title do
+ Edit profile
+
+= form_for @account, url: settings_profile_path, html: { method: :put } do |f|
+ .field
+ = f.text_field :display_name, placeholder: 'Display name'
+ .field
+ = f.text_area :note, placeholder: 'Bio'
+ .file-field
+ = f.label :avatar
+ = f.file_field :avatar
+ .file-field
+ = f.label :header
+ = f.file_field :header
+
+ .actions
+ = f.button 'Save changes', type: :submit
+
+.form-footer= render "settings/shared/links"
diff --git a/app/views/settings/shared/_links.html.haml b/app/views/settings/shared/_links.html.haml
@@ -0,0 +1,7 @@
+%ul.no-list
+ - if controller_name != 'profiles'
+ %li= link_to "Edit profile", settings_profile_path
+ - if controller_name != 'preferences'
+ %li= link_to "Preferences", settings_preferences_path
+ - if controller_name != 'registrations'
+ %li= link_to "Change password", edit_user_registration_path
diff --git a/app/views/settings/show.html.haml b/app/views/settings/show.html.haml
@@ -1,17 +0,0 @@
-- content_for :page_title do
- Edit profile
-
-= form_for @account, url: settings_path, html: { method: :put } do |f|
- .field
- = f.text_field :display_name, placeholder: 'Display name'
- .field
- = f.text_area :note, placeholder: 'Bio'
- .file-field
- = f.label :avatar
- = f.file_field :avatar
- .file-field
- = f.label :header
- = f.file_field :header
-
- .actions
- = f.button 'Save changes', type: :submit
diff --git a/config/routes.rb b/config/routes.rb
@@ -31,7 +31,11 @@ Rails.application.routes.draw do
end
end
- resource :settings, only: [:show, :update]
+ namespace :settings do
+ resource :profile, only: [:show, :update]
+ resource :preferences, only: [:show, :update]
+ end
+
resources :media, only: [:show]
namespace :api do
diff --git a/spec/controllers/settings/preferences_controller_spec.rb b/spec/controllers/settings/preferences_controller_spec.rb
@@ -0,0 +1,16 @@
+require 'rails_helper'
+
+RSpec.describe Settings::PreferencesController, type: :controller do
+
+ before do
+ sign_in Fabricate(:user), scope: :user
+ end
+
+ describe "GET #show" do
+ it "returns http success" do
+ get :show
+ expect(response).to have_http_status(:success)
+ end
+ end
+
+end
diff --git a/spec/controllers/settings/profiles_controller_spec.rb b/spec/controllers/settings/profiles_controller_spec.rb
@@ -0,0 +1,16 @@
+require 'rails_helper'
+
+RSpec.describe Settings::ProfilesController, type: :controller do
+
+ before do
+ sign_in Fabricate(:user), scope: :user
+ end
+
+ describe "GET #show" do
+ it "returns http success" do
+ get :show
+ expect(response).to have_http_status(:success)
+ end
+ end
+
+end
diff --git a/spec/controllers/settings_controller_spec.rb b/spec/controllers/settings_controller_spec.rb
@@ -1,16 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe SettingsController, type: :controller do
-
- before do
- sign_in Fabricate(:user), scope: :user
- end
-
- describe "GET #show" do
- it "returns http success" do
- get :show
- expect(response).to have_http_status(:success)
- end
- end
-
-end
diff --git a/spec/helpers/settings_helper_spec.rb b/spec/helpers/settings_helper_spec.rb
@@ -1,5 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe SettingsHelper, type: :helper do
-
-end