activity_notification 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.codeclimate.yml +33 -0
- data/.rubocop.yml +1157 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +25 -0
- data/Gemfile.lock +15 -17
- data/README.md +154 -27
- data/activity_notification.gemspec +1 -1
- data/app/controllers/activity_notification/notifications_controller.rb +30 -104
- data/app/controllers/activity_notification/notifications_with_devise_controller.rb +1 -33
- data/app/controllers/activity_notification/subscriptions_controller.rb +184 -0
- data/app/controllers/activity_notification/subscriptions_with_devise_controller.rb +6 -0
- data/app/mailers/activity_notification/mailer.rb +3 -3
- data/app/views/activity_notification/notifications/default/_index.html.erb +3 -0
- data/app/views/activity_notification/notifications/default/index.html.erb +8 -10
- data/app/views/activity_notification/notifications/default/show.html.erb +24 -2
- data/app/views/activity_notification/subscriptions/default/_form.html.erb +52 -0
- data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +89 -0
- data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +73 -0
- data/app/views/activity_notification/subscriptions/default/_subscriptions.html.erb +13 -0
- data/app/views/activity_notification/subscriptions/default/create.js.erb +5 -0
- data/app/views/activity_notification/subscriptions/default/destroy.js.erb +5 -0
- data/app/views/activity_notification/subscriptions/default/index.html.erb +197 -0
- data/app/views/activity_notification/subscriptions/default/show.html.erb +177 -0
- data/app/views/activity_notification/subscriptions/default/subscribe.js.erb +8 -0
- data/app/views/activity_notification/subscriptions/default/subscribe_to_email.js.erb +6 -0
- data/app/views/activity_notification/subscriptions/default/unsubscribe.js.erb +8 -0
- data/app/views/activity_notification/subscriptions/default/unsubscribe_to_email.js.erb +6 -0
- data/gemfiles/Gemfile.rails-4.2.lock +18 -20
- data/gemfiles/Gemfile.rails-5.0.lock +18 -20
- data/lib/activity_notification.rb +7 -3
- data/lib/activity_notification/apis/notification_api.rb +95 -61
- data/lib/activity_notification/apis/subscription_api.rb +51 -0
- data/lib/activity_notification/common.rb +1 -1
- data/lib/activity_notification/config.rb +65 -17
- data/lib/activity_notification/controllers/common_controller.rb +118 -0
- data/lib/activity_notification/controllers/devise_authentication_controller.rb +41 -0
- data/lib/activity_notification/helpers/view_helpers.rb +131 -3
- data/lib/activity_notification/mailers/helpers.rb +6 -8
- data/lib/activity_notification/models/concerns/notifiable.rb +45 -27
- data/lib/activity_notification/models/concerns/subscriber.rb +149 -0
- data/lib/activity_notification/models/concerns/target.rb +100 -66
- data/lib/activity_notification/models/notification.rb +7 -5
- data/lib/activity_notification/models/subscription.rb +93 -0
- data/lib/activity_notification/rails/routes.rb +148 -33
- data/lib/activity_notification/renderable.rb +3 -4
- data/lib/activity_notification/roles/acts_as_notifiable.rb +14 -1
- data/lib/activity_notification/roles/acts_as_target.rb +11 -8
- data/lib/activity_notification/version.rb +1 -1
- data/lib/generators/activity_notification/controllers_generator.rb +2 -2
- data/lib/generators/activity_notification/install_generator.rb +0 -1
- data/lib/generators/activity_notification/migration/migration_generator.rb +8 -2
- data/lib/generators/activity_notification/models_generator.rb +53 -0
- data/lib/generators/activity_notification/views_generator.rb +7 -7
- data/lib/generators/templates/activity_notification.rb +17 -3
- data/lib/generators/templates/controllers/notifications_controller.rb +18 -17
- data/lib/generators/templates/controllers/notifications_with_devise_controller.rb +18 -17
- data/lib/generators/templates/controllers/subscriptions_controller.rb +79 -0
- data/lib/generators/templates/controllers/subscriptions_with_devise_controller.rb +87 -0
- data/lib/generators/templates/migrations/migration.rb +57 -0
- data/lib/generators/templates/models/README +10 -0
- data/lib/generators/templates/{notification → models}/notification.rb +1 -3
- data/lib/generators/templates/models/subscription.rb +4 -0
- data/spec/concerns/apis/notification_api_spec.rb +48 -11
- data/spec/concerns/apis/subscription_api_spec.rb +167 -0
- data/spec/concerns/models/notifiable_spec.rb +60 -0
- data/spec/concerns/models/subscriber_spec.rb +525 -0
- data/spec/concerns/models/target_spec.rb +271 -42
- data/spec/controllers/common_controller_spec.rb +25 -0
- data/spec/controllers/dummy_common_controller.rb +5 -0
- data/spec/controllers/notifications_controller_shared_examples.rb +2 -6
- data/spec/controllers/subscriptions_controller_shared_examples.rb +735 -0
- data/spec/controllers/subscriptions_controller_spec.rb +12 -0
- data/spec/controllers/subscriptions_with_devise_controller_spec.rb +91 -0
- data/spec/factories/dummy/dummy_subscriber.rb +4 -0
- data/spec/factories/subscriptions.rb +8 -0
- data/spec/generators/controllers_generator_spec.rb +25 -2
- data/spec/generators/migration/migration_generator_spec.rb +3 -3
- data/spec/generators/models_generator_spec.rb +96 -0
- data/spec/generators/views_generator_spec.rb +84 -0
- data/spec/helpers/view_helpers_spec.rb +143 -0
- data/spec/mailers/mailer_spec.rb +5 -4
- data/spec/models/dummy/dummy_subscriber_spec.rb +5 -0
- data/spec/models/notification_spec.rb +7 -7
- data/spec/models/subscription_spec.rb +158 -0
- data/spec/rails_app/app/controllers/users/notifications_controller.rb +67 -0
- data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +75 -0
- data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +79 -0
- data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +87 -0
- data/spec/rails_app/app/models/admin.rb +1 -0
- data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +4 -0
- data/spec/rails_app/app/models/user.rb +2 -1
- data/spec/rails_app/app/views/activity_notification/mailer/dummy_subscribers/test_key.text.erb +1 -0
- data/spec/rails_app/app/views/articles/index.html.erb +6 -0
- data/spec/rails_app/config/initializers/activity_notification.rb +17 -3
- data/spec/rails_app/config/routes.rb +2 -2
- data/spec/rails_app/db/migrate/20160715050420_create_activity_notification_tables.rb +33 -0
- data/spec/rails_app/db/schema.rb +18 -0
- data/spec/roles/acts_as_notifiable_spec.rb +1 -1
- data/spec/roles/acts_as_target_spec.rb +1 -1
- metadata +70 -11
- data/lib/generators/activity_notification/notification/notification_generator.rb +0 -20
- data/lib/generators/templates/active_record/migration.rb +0 -18
- data/spec/generators/notification/notification_generator_spec.rb +0 -41
- data/spec/rails_app/db/migrate/20160715050420_create_notifications.rb +0 -18
@@ -21,16 +21,16 @@ if defined?(ActionMailer)
|
|
21
21
|
#
|
22
22
|
# @param [Object] target Target of batch notification email
|
23
23
|
# @param [Array<Notification>] notifications Target notifications to send batch notification email
|
24
|
+
# @param [String] batch_key Key of the batch notification email
|
24
25
|
# @param [Hash] options Options for notification email
|
25
26
|
# @option options [String, Symbol] :fallback (:batch_default) Fallback template to use when MissingTemplate is raised
|
26
|
-
# @option options [String] :batch_key (nil) Key of the batch notification email, a key of the first notification will be used if not specified
|
27
27
|
# @return [Mail::Message|ActionMailer::DeliveryJob] Email message or its delivery job
|
28
|
-
def send_batch_notification_email(target, notifications, options = {})
|
28
|
+
def send_batch_notification_email(target, notifications, batch_key, options = {})
|
29
29
|
options[:fallback] ||= :batch_default
|
30
30
|
if options[:fallback] == :none
|
31
31
|
options.delete(:fallback)
|
32
32
|
end
|
33
|
-
batch_notification_mail(target, notifications, options)
|
33
|
+
batch_notification_mail(target, notifications, batch_key, options)
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
@@ -13,6 +13,9 @@
|
|
13
13
|
</p>
|
14
14
|
<p class="notification_header_menu">
|
15
15
|
<%= link_to "Open all", open_all_notifications_path_for(@target, parameters), method: :post, remote: true %>
|
16
|
+
<% if @target.class.subscription_enabled? %>
|
17
|
+
<%= link_to "Subscriptions", subscriptions_path_for(@target) %>
|
18
|
+
<% end %>
|
16
19
|
</p>
|
17
20
|
</div>
|
18
21
|
<div class="notifications">
|
@@ -2,16 +2,14 @@
|
|
2
2
|
<div class="notification_header">
|
3
3
|
<h1>Notifications to <%= @target.printable_target_name %> <%= link_to open_all_notifications_path_for(@target, @index_options), method: :post, remote: true do %><span class="notification_count"><span class="<%= 'unopened' if @target.has_unopened_notifications?(@index_options) %>"><%= @target.unopened_notification_count(@index_options) %></span></span><% end %></h1>
|
4
4
|
</div>
|
5
|
-
<
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
</div>
|
14
|
-
</ul>
|
5
|
+
<div class="notifications">
|
6
|
+
<% if @index_options[:with_group_members] %>
|
7
|
+
<%= render_notification @notifications, fallback: :default_without_grouping, with_group_members: true %>
|
8
|
+
<% else %>
|
9
|
+
<%= render_notification @notifications, fallback: :default %>
|
10
|
+
<%#= render_notification @notifications, fallback: :text %>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
15
13
|
</div>
|
16
14
|
|
17
15
|
<%#= render_notifications_of @target, fallback: :default, index_content: :with_attributes %>
|
@@ -1,2 +1,24 @@
|
|
1
|
-
<
|
2
|
-
|
1
|
+
<div class="notification_wrapper">
|
2
|
+
<div class="notification_header">
|
3
|
+
<h1>Notification to <%= @target.printable_target_name %></h1>
|
4
|
+
</div>
|
5
|
+
<ul>
|
6
|
+
<div class="notifications">
|
7
|
+
<%= render_notification(@notification, fallback: :default) %>
|
8
|
+
<%#= render_notification @notification, fallback: :text %>
|
9
|
+
</div>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<style>
|
14
|
+
.notification_wrapper .notification_header h1 span span{
|
15
|
+
color: #fff;
|
16
|
+
background-color: #e5e5e5;
|
17
|
+
border-radius: 4px;
|
18
|
+
font-size: 12px;
|
19
|
+
padding: 4px 8px;
|
20
|
+
}
|
21
|
+
.notification_wrapper .notification_header h1 span span.unopened{
|
22
|
+
background-color: #f87880;
|
23
|
+
}
|
24
|
+
</style>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<div class="fields_area">
|
2
|
+
<div class="fields_wrapper">
|
3
|
+
<%= form_for(ActivityNotification::Subscription.new, as: :subscription, url: subscriptions_url_for(target, option_params), data: { remote: true }) do |f| %>
|
4
|
+
<div class="field_wrapper">
|
5
|
+
<div class="field_label">
|
6
|
+
<%= f.label :key, "Notification key" %>
|
7
|
+
</div>
|
8
|
+
<div class="field">
|
9
|
+
<div class="ui text_field">
|
10
|
+
<%= f.text_field :key, placeholder: "Notification key" %>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div class="field_wrapper subscribing">
|
16
|
+
<div class="field_label">
|
17
|
+
<label>
|
18
|
+
Notification
|
19
|
+
</label>
|
20
|
+
</div>
|
21
|
+
<div class="field">
|
22
|
+
<div class="ui checkbox">
|
23
|
+
<label>
|
24
|
+
<%= f.check_box :subscribing, { checked: ActivityNotification.config.subscribe_as_default }, 'true', 'false' %>
|
25
|
+
<div class="slider"></div>
|
26
|
+
</label>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<div class="field_wrapper subscribing_to_email <%= 'hidden' unless ActivityNotification.config.subscribe_as_default %>">
|
32
|
+
<div class="field_label">
|
33
|
+
<label>
|
34
|
+
Email notification
|
35
|
+
</label>
|
36
|
+
</div>
|
37
|
+
<div class="field">
|
38
|
+
<div class="ui checkbox">
|
39
|
+
<label>
|
40
|
+
<%= f.check_box :subscribing_to_email, { checked: ActivityNotification.config.subscribe_as_default }, 'true', 'false' %>
|
41
|
+
<div class="slider"></div>
|
42
|
+
</label>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<div class="ui button">
|
48
|
+
<button type="submit">Create subscription</button>
|
49
|
+
</div>
|
50
|
+
<% end %>
|
51
|
+
</div>
|
52
|
+
</div>
|
@@ -0,0 +1,89 @@
|
|
1
|
+
<% if notification_keys.present? %>
|
2
|
+
<div class="fields_area">
|
3
|
+
<% notification_keys.each do |key| %>
|
4
|
+
<div class="fields_wrapper">
|
5
|
+
<%= form_for(ActivityNotification::Subscription.new, as: :subscription, url: subscriptions_url_for(target, option_params), data: { remote: true }) do |f| %>
|
6
|
+
<%= f.hidden_field :key, value: key %>
|
7
|
+
<div class="fields_title_wrapper">
|
8
|
+
<h3 class="fields_title">
|
9
|
+
<%= key %>
|
10
|
+
</h3>
|
11
|
+
<p>
|
12
|
+
<%= link_to "Notifications", notifications_path_for(target, filtered_by_key: key) %>
|
13
|
+
</p>
|
14
|
+
</div>
|
15
|
+
<div class="field_wrapper subscribing">
|
16
|
+
<div class="field_label">
|
17
|
+
<label>
|
18
|
+
Notification
|
19
|
+
</label>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<div class="field">
|
23
|
+
<div class="ui checkbox">
|
24
|
+
<label>
|
25
|
+
<%= f.check_box :subscribing, { checked: ActivityNotification.config.subscribe_as_default }, 'true', 'false' %>
|
26
|
+
<div class="slider"></div>
|
27
|
+
</label>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<div class="field_wrapper subscribing_to_email <%= 'hidden' unless ActivityNotification.config.subscribe_as_default %>">
|
33
|
+
<div class="field_label">
|
34
|
+
<label>
|
35
|
+
Email notification
|
36
|
+
</label>
|
37
|
+
</div>
|
38
|
+
<div class="field">
|
39
|
+
<div class="ui checkbox">
|
40
|
+
<label>
|
41
|
+
<%= f.check_box :subscribing_to_email, { checked: ActivityNotification.config.subscribe_as_default }, 'true', 'false' %>
|
42
|
+
<div class="slider"></div>
|
43
|
+
</label>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
<div class="ui button">
|
49
|
+
<button type="submit">Configure subscription</button>
|
50
|
+
</div>
|
51
|
+
<% end %>
|
52
|
+
</div>
|
53
|
+
<% end %>
|
54
|
+
</div>
|
55
|
+
<% else %>
|
56
|
+
<div class="fields_area">
|
57
|
+
<div class="fields_wrapper">
|
58
|
+
No notification keys are available.
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
<% end %>
|
62
|
+
|
63
|
+
<!--
|
64
|
+
<%# if notification_keys.present? %>
|
65
|
+
<%# notification_keys.each do |key| %>
|
66
|
+
Key: <%#= key %>
|
67
|
+
<%#= form_for(ActivityNotification::Subscription.new, as: :subscription, url: subscriptions_url_for(target, option_params), data: {remote: true}) do |f| %>
|
68
|
+
<%#= f.hidden_field :key, value: key %>
|
69
|
+
<div class="field">
|
70
|
+
<%#= f.label :subscribing, "Subscribe to this notification?" %>
|
71
|
+
<%#= f.check_box :subscribing, {checked: true}, 'true', 'false' %>
|
72
|
+
</div>
|
73
|
+
<div class="field">
|
74
|
+
<%#= f.label :subscribing_to_email, "Subscribe to this notification email?" %>
|
75
|
+
<%#= f.check_box :subscribing_to_email, {checked: true}, 'true', 'false' %>
|
76
|
+
</div>
|
77
|
+
<div class="actions">
|
78
|
+
<%#= f.submit "Save" %>
|
79
|
+
</div>
|
80
|
+
<%# end %>
|
81
|
+
<%#= link_to "See notifications", notifications_path_for(target, filtered_by_key: key) %>
|
82
|
+
<br/><br/>
|
83
|
+
<%# end %>
|
84
|
+
<%# else %>
|
85
|
+
No notification keys are available.
|
86
|
+
<%# end %>
|
87
|
+
<br/><br/>
|
88
|
+
-->
|
89
|
+
|
@@ -0,0 +1,73 @@
|
|
1
|
+
<div class="fields_wrapper configured">
|
2
|
+
<div class="fields_title_wrapper">
|
3
|
+
<h3 class="fields_title">
|
4
|
+
<%= subscription.key %>
|
5
|
+
</h3>
|
6
|
+
|
7
|
+
<p>
|
8
|
+
<%= link_to "Notifications", notifications_path_for(subscription.target, filtered_by_key: subscription.key) %>
|
9
|
+
</p>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div class="field_wrapper subscribing">
|
13
|
+
<div class="field_label">
|
14
|
+
<label>
|
15
|
+
Notification
|
16
|
+
</label>
|
17
|
+
</div>
|
18
|
+
<div class="field">
|
19
|
+
<div class="ui checkbox">
|
20
|
+
<% if subscription.subscribing? %>
|
21
|
+
<%= link_to unsubscribe_path_for(subscription, option_params), onclick: '$(this).find("input").prop("checked", false);$(this).parent().parent().parent().next().slideUp();', method: :post, remote: true do %>
|
22
|
+
<%= check_box :subscribing, "", { checked: true }, 'true', 'false' %>
|
23
|
+
<div class="slider"></div>
|
24
|
+
<% end %>
|
25
|
+
<% else %>
|
26
|
+
<% if ActivityNotification.config.subscribe_as_default %>
|
27
|
+
<%= link_to subscribe_path_for(subscription, option_params), onclick: '$(this).find("input").prop("checked", true);$(this).parent().parent().parent().next().slideDown();$(this).parent().parent().parent().next().find("input").prop("checked", true);', method: :post, remote: true do %>
|
28
|
+
<%= check_box :subscribing, "", { checked: false }, 'true', 'false' %>
|
29
|
+
<div class="slider"></div>
|
30
|
+
<% end %>
|
31
|
+
<% else %>
|
32
|
+
<%= link_to subscribe_path_for(subscription, option_params.merge(with_email_subscription: false)), onclick: '$(this).find("input").prop("checked", true);$(this).parent().parent().parent().next().slideDown();', method: :post, remote: true do %>
|
33
|
+
<%= check_box :subscribing, "", { checked: false }, 'true', 'false' %>
|
34
|
+
<div class="slider"></div>
|
35
|
+
<% end %>
|
36
|
+
<% end %>
|
37
|
+
<% end %>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
|
42
|
+
<div class="field_wrapper subscribing_to_email <%= 'hidden' unless subscription.subscribing? %>">
|
43
|
+
<div class="field_label">
|
44
|
+
<label>
|
45
|
+
Email notification
|
46
|
+
</label>
|
47
|
+
</div>
|
48
|
+
<div class="field">
|
49
|
+
<div class="ui checkbox">
|
50
|
+
<% if subscription.subscribing_to_email? %>
|
51
|
+
<%= link_to unsubscribe_to_email_url_for(subscription, option_params), onclick: '$(this).find("input").prop("checked", false)', method: :post, remote: true do %>
|
52
|
+
<label>
|
53
|
+
<%= check_box :subscribing_to_email, "", { checked: true }, 'true', 'false' %>
|
54
|
+
<div class="slider"></div>
|
55
|
+
</label>
|
56
|
+
<% end %>
|
57
|
+
<% else %>
|
58
|
+
<%= link_to subscribe_to_email_url_for(subscription, option_params), onclick: '$(this).find("input").prop("checked", true)', method: :post, remote: true do %>
|
59
|
+
<label>
|
60
|
+
<%= check_box :subscribing_to_email, "", { checked: false }, 'true', 'false' %>
|
61
|
+
<div class="slider"></div>
|
62
|
+
</label>
|
63
|
+
<% end %>
|
64
|
+
<% end %>
|
65
|
+
</div>
|
66
|
+
</div>
|
67
|
+
</div>
|
68
|
+
|
69
|
+
<div class="ui button">
|
70
|
+
<%#= link_to "Show", subscription_path_for(subscription, option_params), class: "button" %>
|
71
|
+
<%= link_to "Destroy", subscription_path_for(subscription, option_params), method: :delete, remote: true, data: { confirm: 'Are you sure?' }, class: "button" %>
|
72
|
+
</div>
|
73
|
+
</div>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if subscriptions.present? %>
|
2
|
+
<div class="fields_area">
|
3
|
+
<% subscriptions.each do |subscription| %>
|
4
|
+
<%= render 'subscription', subscription: subscription, option_params: option_params %>
|
5
|
+
<% end %>
|
6
|
+
</div>
|
7
|
+
<% else %>
|
8
|
+
<div class="fields_area">
|
9
|
+
<div class="fields_wrapper">
|
10
|
+
No subscriptions are available.
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
$("#subscriptions").html("<%= escape_javascript( render 'subscriptions', subscriptions: @subscriptions, option_params: @index_options ) %>");
|
2
|
+
$("#notification_keys").html("<%= escape_javascript( render 'notification_keys', target: @target, notification_keys: @notification_keys, option_params: @index_options ) %>");
|
3
|
+
$("#subscription_form").html("<%= escape_javascript( render 'form', target: @target, option_params: @index_options ) %>");
|
4
|
+
|
5
|
+
loadSubscription();
|
@@ -0,0 +1,5 @@
|
|
1
|
+
$("#subscriptions").html("<%= escape_javascript( render 'subscriptions', subscriptions: @subscriptions, option_params: @index_options ) %>");
|
2
|
+
$("#notification_keys").html("<%= escape_javascript( render 'notification_keys', target: @target, notification_keys: @notification_keys, option_params: @index_options ) %>");
|
3
|
+
$("#subscription_form").html("<%= escape_javascript( render 'form', target: @target, option_params: @index_options ) %>");
|
4
|
+
|
5
|
+
loadSubscription();
|
@@ -0,0 +1,197 @@
|
|
1
|
+
<div class="subscription_wrapper">
|
2
|
+
<% unless @subscriptions.nil? %>
|
3
|
+
<div class="subscription_header">
|
4
|
+
<h1>Configured subscriptions</h1>
|
5
|
+
</div>
|
6
|
+
<div class="subscriptions" id="subscriptions">
|
7
|
+
<%= render 'subscriptions', subscriptions: @subscriptions, option_params: @index_options %>
|
8
|
+
</div>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% unless @notification_keys.nil? %>
|
12
|
+
<div class="subscription_header">
|
13
|
+
<h1>Unconfigured notification keys</h1>
|
14
|
+
</div>
|
15
|
+
<div class="notification_keys" id="notification_keys">
|
16
|
+
<%= render 'notification_keys', target: @target, notification_keys: @notification_keys, option_params: @index_options %>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
19
|
+
|
20
|
+
<div class="subscription_header">
|
21
|
+
<h1>Create a new subscription</h1>
|
22
|
+
</div>
|
23
|
+
<div class="subscription_form" id="subscription_form">
|
24
|
+
<%= render 'form', target: @target, option_params: @index_options %>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
|
28
|
+
<style>
|
29
|
+
.fields_area {
|
30
|
+
border: 1px solid #e5e5e5;
|
31
|
+
width: 600px;
|
32
|
+
box-sizing: border-box;
|
33
|
+
margin-bottom: 30px;
|
34
|
+
}
|
35
|
+
|
36
|
+
.fields_area .fields_wrapper {
|
37
|
+
position: relative;
|
38
|
+
background-color: #fff;
|
39
|
+
padding: 20px;
|
40
|
+
box-sizing: border-box;
|
41
|
+
border-bottom: 1px solid #e5e5e5;
|
42
|
+
}
|
43
|
+
.fields_area .fields_wrapper.configured {
|
44
|
+
background-color: #f8f9fb;
|
45
|
+
}
|
46
|
+
|
47
|
+
.fields_area .fields_wrapper:last-child {
|
48
|
+
border-bottom: none;
|
49
|
+
}
|
50
|
+
|
51
|
+
.fields_area .fields_wrapper .fields_title_wrapper {
|
52
|
+
margin-bottom: 16px;
|
53
|
+
border-bottom: none;
|
54
|
+
}
|
55
|
+
|
56
|
+
.fields_area .fields_wrapper .fields_title_wrapper .fields_title {
|
57
|
+
font-size: 16px;
|
58
|
+
font-weight: bold;
|
59
|
+
}
|
60
|
+
|
61
|
+
.fields_area .fields_wrapper .fields_title_wrapper p {
|
62
|
+
position: absolute;
|
63
|
+
top: 15px;
|
64
|
+
right: 15px;
|
65
|
+
}
|
66
|
+
|
67
|
+
.fields_area .fields_wrapper .field_wrapper {
|
68
|
+
margin-bottom: 16px;
|
69
|
+
}
|
70
|
+
|
71
|
+
.fields_area .fields_wrapper .field_wrapper:last-child {
|
72
|
+
margin-bottom: 0;
|
73
|
+
}
|
74
|
+
|
75
|
+
.fields_area .fields_wrapper .field_wrapper.hidden {
|
76
|
+
display: none;
|
77
|
+
}
|
78
|
+
|
79
|
+
.fields_area .fields_wrapper .field_wrapper .field_label {
|
80
|
+
margin-bottom: 8px;
|
81
|
+
}
|
82
|
+
|
83
|
+
.fields_area .fields_wrapper .field_wrapper .field_label label {
|
84
|
+
font-size: 14px;
|
85
|
+
}
|
86
|
+
|
87
|
+
.ui label {
|
88
|
+
font-size: 14px;
|
89
|
+
}
|
90
|
+
|
91
|
+
/* button */
|
92
|
+
.ui.button button,
|
93
|
+
.ui.button .button {
|
94
|
+
cursor: pointer;
|
95
|
+
color: #4f4f4f;
|
96
|
+
font-weight: bold;
|
97
|
+
font-size: 12px;
|
98
|
+
padding: 10px 14px;
|
99
|
+
margin-left: 10px;
|
100
|
+
border: 1px solid #e5e5e5;
|
101
|
+
background-color: #fafafa;
|
102
|
+
}
|
103
|
+
|
104
|
+
.ui.button button:first-child,
|
105
|
+
.ui.button .button:first-child {
|
106
|
+
margin-left: 0;
|
107
|
+
}
|
108
|
+
|
109
|
+
.ui.text_field input {
|
110
|
+
margin: 0;
|
111
|
+
outline: 0;
|
112
|
+
padding: 10px;
|
113
|
+
font-size: 14px;
|
114
|
+
border: 1px solid #e5e5e5;
|
115
|
+
border-radius: 3px;
|
116
|
+
box-shadow: 0 0 0 0 transparent inset;
|
117
|
+
}
|
118
|
+
|
119
|
+
/* checkbox */
|
120
|
+
.ui.checkbox {
|
121
|
+
position: relative;
|
122
|
+
left: 300px;
|
123
|
+
margin-top: -26px;
|
124
|
+
width: 40px;
|
125
|
+
}
|
126
|
+
|
127
|
+
.ui.checkbox input {
|
128
|
+
position: absolute;
|
129
|
+
margin-left: -9999px;
|
130
|
+
visibility: hidden;
|
131
|
+
}
|
132
|
+
|
133
|
+
.ui.checkbox .slider {
|
134
|
+
display: block;
|
135
|
+
position: relative;
|
136
|
+
cursor: pointer;
|
137
|
+
outline: none;
|
138
|
+
user-select: none;
|
139
|
+
|
140
|
+
padding: 2px;
|
141
|
+
width: 36px;
|
142
|
+
height: 20px;
|
143
|
+
background-color: #dddddd;
|
144
|
+
border-radius: 20px;
|
145
|
+
}
|
146
|
+
|
147
|
+
.ui.checkbox .slider:before,
|
148
|
+
.ui.checkbox .slider:after {
|
149
|
+
display: block;
|
150
|
+
position: absolute;
|
151
|
+
top: 1px;
|
152
|
+
left: 1px;
|
153
|
+
bottom: 1px;
|
154
|
+
content: "";
|
155
|
+
}
|
156
|
+
|
157
|
+
.ui.checkbox .slider:before {
|
158
|
+
right: 1px;
|
159
|
+
background-color: #f1f1f1;
|
160
|
+
border-radius: 20px;
|
161
|
+
transition: background 0.4s;
|
162
|
+
}
|
163
|
+
|
164
|
+
.ui.checkbox .slider:after {
|
165
|
+
width: 20px;
|
166
|
+
background-color: #fff;
|
167
|
+
border-radius: 100%;
|
168
|
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3);
|
169
|
+
transition: margin 0.4s;
|
170
|
+
}
|
171
|
+
|
172
|
+
.ui.checkbox input:checked + .slider:before {
|
173
|
+
background-color: #8ce196;
|
174
|
+
}
|
175
|
+
|
176
|
+
.ui.checkbox input:checked + .slider:after {
|
177
|
+
margin-left: 18px;
|
178
|
+
}
|
179
|
+
</style>
|
180
|
+
|
181
|
+
<script>
|
182
|
+
loadSubscription();
|
183
|
+
function loadSubscription() {
|
184
|
+
$(".field_wrapper.subscribing").find("input[type='checkbox']").change(function () {
|
185
|
+
$thisFieldWrapper = $(this).parent().parent().parent().parent();
|
186
|
+
if ($(this).prop('checked')) {
|
187
|
+
$thisFieldWrapper.next().slideDown();
|
188
|
+
$thisFieldWrapper.next().find("input[type='checkbox']").prop("checked", <%= ActivityNotification.config.subscribe_as_default %>);
|
189
|
+
} else {
|
190
|
+
$thisFieldWrapper.next().slideUp();
|
191
|
+
setTimeout(function () {
|
192
|
+
$thisFieldWrapper.next().find("input[type='checkbox']").prop("checked", false);
|
193
|
+
}, 400);
|
194
|
+
}
|
195
|
+
})
|
196
|
+
}
|
197
|
+
</script>
|