Commit 936353edfdf00653b23f6837f29095dbc3a5f5dc
1 parent
0744eac9
Exists in
spb-stable
and in
3 other branches
Improve notification settings page
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Showing
7 changed files
with
88 additions
and
83 deletions
Show diff stats
app/assets/stylesheets/sections/dashboard.scss
app/assets/stylesheets/sections/profile.scss
app/helpers/notifications_helper.rb
1 | 1 | module NotificationsHelper |
2 | 2 | def notification_icon(notification) |
3 | 3 | if notification.disabled? |
4 | - content_tag :i, nil, class: 'icon-circle cred' | |
4 | + content_tag :i, nil, class: 'icon-volume-off cred' | |
5 | 5 | elsif notification.participating? |
6 | - content_tag :i, nil, class: 'icon-circle cblue' | |
6 | + content_tag :i, nil, class: 'icon-volume-down cblue' | |
7 | 7 | elsif notification.watch? |
8 | - content_tag :i, nil, class: 'icon-circle cgreen' | |
8 | + content_tag :i, nil, class: 'icon-volume-up cgreen' | |
9 | 9 | else |
10 | 10 | content_tag :i, nil, class: 'icon-circle-blank cblue' |
11 | 11 | end | ... | ... |
app/models/notification.rb
... | ... | @@ -9,12 +9,23 @@ class Notification |
9 | 9 | |
10 | 10 | attr_accessor :target |
11 | 11 | |
12 | - def self.notification_levels | |
13 | - [N_DISABLED, N_PARTICIPATING, N_WATCH] | |
14 | - end | |
15 | - | |
16 | - def self.project_notification_levels | |
17 | - [N_DISABLED, N_PARTICIPATING, N_WATCH, N_GLOBAL] | |
12 | + class << self | |
13 | + def notification_levels | |
14 | + [N_DISABLED, N_PARTICIPATING, N_WATCH] | |
15 | + end | |
16 | + | |
17 | + def options_with_labels | |
18 | + { | |
19 | + disabled: N_DISABLED, | |
20 | + participating: N_PARTICIPATING, | |
21 | + watch: N_WATCH, | |
22 | + global: N_GLOBAL | |
23 | + } | |
24 | + end | |
25 | + | |
26 | + def project_notification_levels | |
27 | + [N_DISABLED, N_PARTICIPATING, N_WATCH, N_GLOBAL] | |
28 | + end | |
18 | 29 | end |
19 | 30 | |
20 | 31 | def initialize(target) |
... | ... | @@ -36,4 +47,8 @@ class Notification |
36 | 47 | def global? |
37 | 48 | target.notification_level == N_GLOBAL |
38 | 49 | end |
50 | + | |
51 | + def level | |
52 | + target.notification_level | |
53 | + end | |
39 | 54 | end | ... | ... |
app/views/profiles/notifications/_settings.html.haml
1 | 1 | %li |
2 | - .row | |
3 | - .col-sm-4 | |
4 | - %span | |
5 | - = notification_icon(notification) | |
6 | - | |
7 | - - if membership.kind_of? UsersGroup | |
8 | - = link_to membership.group.name, membership.group | |
9 | - - else | |
10 | - = link_to_project(membership.project) | |
11 | - .col-sm-8 | |
12 | - = form_tag profile_notifications_path, method: :put, remote: true, class: 'update-notifications' do | |
13 | - = hidden_field_tag :notification_type, type, id: dom_id(membership, 'notification_type') | |
14 | - = hidden_field_tag :notification_id, membership.id, id: dom_id(membership, 'notification_id') | |
15 | - | |
16 | - = label_tag nil, class: 'radio-inline' do | |
17 | - = radio_button_tag :notification_level, Notification::N_GLOBAL, notification.global?, id: dom_id(membership, 'notification_level'), class: 'trigger-submit' | |
18 | - %span Use global setting | |
19 | - | |
20 | - = label_tag nil, class: 'radio-inline' do | |
21 | - = radio_button_tag :notification_level, Notification::N_DISABLED, notification.disabled?, id: dom_id(membership, 'notification_level'), class: 'trigger-submit' | |
22 | - %span Disabled | |
23 | - | |
24 | - = label_tag nil, class: 'radio-inline' do | |
25 | - = radio_button_tag :notification_level, Notification::N_PARTICIPATING, notification.participating?, id: dom_id(membership, 'notification_level'), class: 'trigger-submit' | |
26 | - %span Participating | |
27 | - | |
28 | - = label_tag nil, class: 'radio-inline' do | |
29 | - = radio_button_tag :notification_level, Notification::N_WATCH, notification.watch?, id: dom_id(membership, 'notification_level'), class: 'trigger-submit' | |
30 | - %span Watch | |
2 | + %span.notification-icon-holder | |
3 | + - if notification.global? | |
4 | + = notification_icon(@notification) | |
5 | + - else | |
6 | + = notification_icon(notification) | |
31 | 7 | |
8 | + %span.str-truncated | |
9 | + - if membership.kind_of? UsersGroup | |
10 | + = link_to membership.group.name, membership.group | |
11 | + - else | |
12 | + = link_to_project(membership.project) | |
13 | + .pull-right | |
14 | + = form_tag profile_notifications_path, method: :put, remote: true, class: 'update-notifications' do | |
15 | + = hidden_field_tag :notification_type, type, id: dom_id(membership, 'notification_type') | |
16 | + = hidden_field_tag :notification_id, membership.id, id: dom_id(membership, 'notification_id') | |
17 | + = select_tag :notification_level, options_for_select(Notification.options_with_labels, notification.level), class: 'trigger-submit' | ... | ... |
app/views/profiles/notifications/show.html.haml
... | ... | @@ -3,56 +3,49 @@ |
3 | 3 | %p.light |
4 | 4 | GitLab uses the email specified in your profile for notifications |
5 | 5 | %hr |
6 | -.alert.alert-info | |
7 | - %p | |
8 | - %i.icon-circle.cred | |
9 | - %strong Disabled | |
10 | - – You will not get any notifications via email | |
11 | - %p | |
12 | - %i.icon-circle.cblue | |
13 | - %strong Participating | |
14 | - – You will only receive notifications from related resources (e.g. from your commits or assigned issues) | |
15 | - %p | |
16 | - %i.icon-circle.cgreen | |
17 | - %strong Watch | |
18 | - – You will receive all notifications from projects in which you participate | |
6 | += form_tag profile_notifications_path, method: :put, remote: true, class: 'update-notifications form-horizontal global-notifications-form' do | |
7 | + = hidden_field_tag :notification_type, 'global' | |
19 | 8 | |
20 | -.row | |
21 | - .col-sm-4 | |
22 | - %h4 | |
23 | - = notification_icon(@notification) | |
24 | - Global setting | |
25 | - .col-sm-8 | |
26 | - = form_tag profile_notifications_path, method: :put, remote: true, class: 'update-notifications' do | |
27 | - = hidden_field_tag :notification_type, 'global' | |
28 | - | |
29 | - = label_tag nil, class: 'radio-inline' do | |
9 | + = label_tag :notification_level, 'Notification level', class: 'control-label' | |
10 | + .col-sm-10 | |
11 | + .radio | |
12 | + = label_tag nil, class: '' do | |
30 | 13 | = radio_button_tag :notification_level, Notification::N_DISABLED, @notification.disabled?, class: 'trigger-submit' |
31 | - %span Disabled | |
14 | + .level-title | |
15 | + Disabled | |
16 | + %p You will not get any notifications via email | |
32 | 17 | |
33 | - = label_tag nil, class: 'radio-inline' do | |
18 | + .radio | |
19 | + = label_tag nil, class: '' do | |
34 | 20 | = radio_button_tag :notification_level, Notification::N_PARTICIPATING, @notification.participating?, class: 'trigger-submit' |
35 | - %span Participating | |
21 | + .level-title | |
22 | + Participating | |
23 | + %p You will only receive notifications from related resources (e.g. from your commits or assigned issues) | |
36 | 24 | |
37 | - = label_tag nil, class: 'radio-inline' do | |
25 | + .radio | |
26 | + = label_tag nil, class: '' do | |
38 | 27 | = radio_button_tag :notification_level, Notification::N_WATCH, @notification.watch?, class: 'trigger-submit' |
39 | - %span Watch | |
28 | + .level-title | |
29 | + Watch | |
30 | + %p You will receive all notifications from projects in which you participate | |
40 | 31 | |
41 | -%br | |
42 | -= link_to '#', class: 'js-toggle-visibility-link' do | |
43 | - %span.btn.btn-tiny | |
44 | - %i.icon-chevron-down | |
45 | - %span Advanced notifications settings | |
46 | -.js-toggle-visibility-container.hide | |
32 | +.clearfix | |
47 | 33 | %hr |
48 | - %h4 Groups: | |
49 | - %ul.bordered-list | |
50 | - - @users_groups.each do |users_group| | |
51 | - - notification = Notification.new(users_group) | |
52 | - = render 'settings', type: 'group', membership: users_group, notification: notification | |
34 | + %p | |
35 | + You can also specify notification level per group or per project | |
36 | + %br | |
37 | + By default all projects and groups uses notification level set above | |
38 | +.row.all-notifications | |
39 | + .col-md-6 | |
40 | + %h4 Groups: | |
41 | + %ul.bordered-list | |
42 | + - @users_groups.each do |users_group| | |
43 | + - notification = Notification.new(users_group) | |
44 | + = render 'settings', type: 'group', membership: users_group, notification: notification | |
53 | 45 | |
54 | - %h4 Projects: | |
55 | - %ul.bordered-list | |
56 | - - @users_projects.each do |users_project| | |
57 | - - notification = Notification.new(users_project) | |
58 | - = render 'settings', type: 'project', membership: users_project, notification: notification | |
46 | + .col-md-6 | |
47 | + %h4 Projects: | |
48 | + %ul.bordered-list | |
49 | + - @users_projects.each do |users_project| | |
50 | + - notification = Notification.new(users_project) | |
51 | + = render 'settings', type: 'project', membership: users_project, notification: notification | ... | ... |
features/steps/profile/profile_notifications.rb