motor-admin-cstham8 0.4.35
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +661 -0
- data/README.md +230 -0
- data/Rakefile +11 -0
- data/app/channels/motor/application_cable/channel.rb +14 -0
- data/app/channels/motor/application_cable/connection.rb +27 -0
- data/app/channels/motor/notes_channel.rb +9 -0
- data/app/channels/motor/notifications_channel.rb +9 -0
- data/app/controllers/concerns/motor/current_ability.rb +21 -0
- data/app/controllers/concerns/motor/current_user_method.rb +18 -0
- data/app/controllers/concerns/motor/load_and_authorize_dynamic_resource.rb +73 -0
- data/app/controllers/concerns/motor/wrap_io_params.rb +25 -0
- data/app/controllers/motor/active_storage_attachments_controller.rb +64 -0
- data/app/controllers/motor/alerts_controller.rb +82 -0
- data/app/controllers/motor/api_base_controller.rb +33 -0
- data/app/controllers/motor/api_configs_controller.rb +54 -0
- data/app/controllers/motor/application_controller.rb +8 -0
- data/app/controllers/motor/assets_controller.rb +43 -0
- data/app/controllers/motor/audits_controller.rb +16 -0
- data/app/controllers/motor/auth_tokens_controller.rb +36 -0
- data/app/controllers/motor/configs_controller.rb +33 -0
- data/app/controllers/motor/dashboards_controller.rb +64 -0
- data/app/controllers/motor/data_controller.rb +88 -0
- data/app/controllers/motor/forms_controller.rb +61 -0
- data/app/controllers/motor/icons_controller.rb +22 -0
- data/app/controllers/motor/note_tags_controller.rb +13 -0
- data/app/controllers/motor/notes_controller.rb +58 -0
- data/app/controllers/motor/notifications_controller.rb +33 -0
- data/app/controllers/motor/queries_controller.rb +64 -0
- data/app/controllers/motor/reminders_controller.rb +38 -0
- data/app/controllers/motor/resource_default_queries_controller.rb +23 -0
- data/app/controllers/motor/resource_methods_controller.rb +23 -0
- data/app/controllers/motor/resources_controller.rb +26 -0
- data/app/controllers/motor/run_api_requests_controller.rb +56 -0
- data/app/controllers/motor/run_graphql_requests_controller.rb +48 -0
- data/app/controllers/motor/run_queries_controller.rb +77 -0
- data/app/controllers/motor/schema_controller.rb +31 -0
- data/app/controllers/motor/send_alerts_controller.rb +26 -0
- data/app/controllers/motor/sessions_controller.rb +23 -0
- data/app/controllers/motor/slack_conversations_controller.rb +11 -0
- data/app/controllers/motor/tags_controller.rb +11 -0
- data/app/controllers/motor/ui_controller.rb +51 -0
- data/app/controllers/motor/users_for_autocomplete_controller.rb +23 -0
- data/app/jobs/motor/alert_sending_job.rb +13 -0
- data/app/jobs/motor/application_job.rb +6 -0
- data/app/jobs/motor/notify_note_mentions_job.rb +9 -0
- data/app/jobs/motor/notify_reminder_job.rb +9 -0
- data/app/mailers/motor/alerts_mailer.rb +39 -0
- data/app/mailers/motor/application_mailer.rb +33 -0
- data/app/mailers/motor/notifications_mailer.rb +33 -0
- data/app/models/motor/alert.rb +30 -0
- data/app/models/motor/alert_lock.rb +7 -0
- data/app/models/motor/api_config.rb +28 -0
- data/app/models/motor/application_record.rb +18 -0
- data/app/models/motor/audit.rb +13 -0
- data/app/models/motor/config.rb +13 -0
- data/app/models/motor/dashboard.rb +26 -0
- data/app/models/motor/form.rb +23 -0
- data/app/models/motor/note.rb +18 -0
- data/app/models/motor/note_tag.rb +7 -0
- data/app/models/motor/note_tag_tag.rb +8 -0
- data/app/models/motor/notification.rb +14 -0
- data/app/models/motor/query.rb +33 -0
- data/app/models/motor/reminder.rb +13 -0
- data/app/models/motor/resource.rb +15 -0
- data/app/models/motor/tag.rb +7 -0
- data/app/models/motor/taggable_tag.rb +8 -0
- data/app/views/layouts/motor/application.html.erb +17 -0
- data/app/views/layouts/motor/mailer.html.erb +72 -0
- data/app/views/motor/alerts_mailer/alert_email.html.erb +54 -0
- data/app/views/motor/notifications_mailer/notify_mention_email.html.erb +28 -0
- data/app/views/motor/notifications_mailer/notify_reminder_email.html.erb +28 -0
- data/app/views/motor/ui/show.html.erb +1 -0
- data/config/locales/el.yml +420 -0
- data/config/locales/en.yml +340 -0
- data/config/locales/es.yml +420 -0
- data/config/locales/ja.yml +340 -0
- data/config/locales/pt.yml +416 -0
- data/config/routes.rb +65 -0
- data/lib/generators/motor/install_generator.rb +24 -0
- data/lib/generators/motor/install_notes_generator.rb +22 -0
- data/lib/generators/motor/migration.rb +17 -0
- data/lib/generators/motor/templates/install.rb +271 -0
- data/lib/generators/motor/templates/install_api_configs.rb +86 -0
- data/lib/generators/motor/templates/install_notes.rb +83 -0
- data/lib/generators/motor/templates/upgrade_motor_api_actions.rb +71 -0
- data/lib/generators/motor/upgrade_generator.rb +43 -0
- data/lib/motor/active_record_utils/action_text_attribute_patch.rb +19 -0
- data/lib/motor/active_record_utils/active_record_connection_column_patch.rb +14 -0
- data/lib/motor/active_record_utils/active_record_filter.rb +405 -0
- data/lib/motor/active_record_utils/active_storage_blob_patch.rb +30 -0
- data/lib/motor/active_record_utils/active_storage_links_extension.rb +11 -0
- data/lib/motor/active_record_utils/defined_scopes_extension.rb +25 -0
- data/lib/motor/active_record_utils/fetch_methods.rb +24 -0
- data/lib/motor/active_record_utils/types.rb +64 -0
- data/lib/motor/active_record_utils.rb +45 -0
- data/lib/motor/admin.rb +141 -0
- data/lib/motor/alerts/persistance.rb +97 -0
- data/lib/motor/alerts/scheduled_alerts_cache.rb +29 -0
- data/lib/motor/alerts/scheduler.rb +30 -0
- data/lib/motor/alerts/slack_sender.rb +74 -0
- data/lib/motor/alerts.rb +52 -0
- data/lib/motor/api_configs.rb +41 -0
- data/lib/motor/api_query/apply_scope.rb +44 -0
- data/lib/motor/api_query/build_json.rb +171 -0
- data/lib/motor/api_query/build_meta.rb +20 -0
- data/lib/motor/api_query/filter.rb +125 -0
- data/lib/motor/api_query/paginate.rb +19 -0
- data/lib/motor/api_query/search.rb +60 -0
- data/lib/motor/api_query/sort.rb +64 -0
- data/lib/motor/api_query.rb +24 -0
- data/lib/motor/assets.rb +62 -0
- data/lib/motor/build_schema/active_storage_attachment_schema.rb +125 -0
- data/lib/motor/build_schema/adjust_devise_model_schema.rb +60 -0
- data/lib/motor/build_schema/apply_permissions.rb +64 -0
- data/lib/motor/build_schema/defaults.rb +66 -0
- data/lib/motor/build_schema/find_display_column.rb +65 -0
- data/lib/motor/build_schema/find_icon.rb +135 -0
- data/lib/motor/build_schema/find_searchable_columns.rb +33 -0
- data/lib/motor/build_schema/load_from_rails.rb +361 -0
- data/lib/motor/build_schema/merge_schema_configs.rb +157 -0
- data/lib/motor/build_schema/reorder_schema.rb +88 -0
- data/lib/motor/build_schema/utils.rb +31 -0
- data/lib/motor/build_schema.rb +125 -0
- data/lib/motor/cancan_utils/ability_patch.rb +31 -0
- data/lib/motor/cancan_utils/can_manage_all.rb +14 -0
- data/lib/motor/cancan_utils.rb +9 -0
- data/lib/motor/configs/build_configs_hash.rb +90 -0
- data/lib/motor/configs/build_ui_app_tag.rb +177 -0
- data/lib/motor/configs/load_from_cache.rb +110 -0
- data/lib/motor/configs/sync_from_file.rb +35 -0
- data/lib/motor/configs/sync_from_hash.rb +159 -0
- data/lib/motor/configs/sync_middleware.rb +72 -0
- data/lib/motor/configs/sync_with_remote.rb +47 -0
- data/lib/motor/configs/write_to_file.rb +36 -0
- data/lib/motor/configs.rb +39 -0
- data/lib/motor/dashboards/persistance.rb +73 -0
- data/lib/motor/dashboards.rb +8 -0
- data/lib/motor/forms/persistance.rb +93 -0
- data/lib/motor/forms.rb +8 -0
- data/lib/motor/hash_serializer.rb +21 -0
- data/lib/motor/net_http_utils.rb +50 -0
- data/lib/motor/notes/notify_mentions.rb +71 -0
- data/lib/motor/notes/notify_reminder.rb +48 -0
- data/lib/motor/notes/persist.rb +36 -0
- data/lib/motor/notes/reminders_scheduler.rb +39 -0
- data/lib/motor/notes/tags.rb +34 -0
- data/lib/motor/notes.rb +12 -0
- data/lib/motor/queries/persistance.rb +90 -0
- data/lib/motor/queries/postgresql_exec_query.rb +28 -0
- data/lib/motor/queries/render_sql_template.rb +61 -0
- data/lib/motor/queries/run_query.rb +289 -0
- data/lib/motor/queries.rb +11 -0
- data/lib/motor/railtie.rb +11 -0
- data/lib/motor/resources/custom_sql_columns_cache.rb +17 -0
- data/lib/motor/resources/fetch_configured_model.rb +269 -0
- data/lib/motor/resources/persist_configs.rb +232 -0
- data/lib/motor/resources.rb +19 -0
- data/lib/motor/slack/client.rb +62 -0
- data/lib/motor/slack.rb +16 -0
- data/lib/motor/tags.rb +32 -0
- data/lib/motor/tasks/motor.rake +54 -0
- data/lib/motor/version.rb +5 -0
- data/lib/motor-admin-cstham8.rb +3 -0
- data/lib/motor.rb +87 -0
- data/ui/dist/manifest.json +1990 -0
- metadata +303 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Motor
|
4
|
+
class Note < ::Motor::ApplicationRecord
|
5
|
+
audited
|
6
|
+
|
7
|
+
belongs_to :author, polymorphic: true, optional: true
|
8
|
+
belongs_to :record, polymorphic: true
|
9
|
+
|
10
|
+
has_many :note_tag_tags, dependent: :destroy
|
11
|
+
has_many :tags, through: :note_tag_tags, class_name: 'Motor::NoteTag'
|
12
|
+
|
13
|
+
has_many :reminders, as: :record, dependent: :destroy
|
14
|
+
has_many :notifications, as: :record, dependent: :destroy
|
15
|
+
|
16
|
+
scope :active, -> { where(deleted_at: nil) }
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Motor
|
4
|
+
class Notification < ::Motor::ApplicationRecord
|
5
|
+
STATUSES = [
|
6
|
+
PENDING = 'pending'
|
7
|
+
].freeze
|
8
|
+
|
9
|
+
belongs_to :record, polymorphic: true, optional: true
|
10
|
+
belongs_to :recipient, polymorphic: true
|
11
|
+
|
12
|
+
attribute :status, type: :string, default: PENDING
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Motor
|
4
|
+
class Query < ::Motor::ApplicationRecord
|
5
|
+
audited
|
6
|
+
|
7
|
+
belongs_to :author, polymorphic: true, optional: true
|
8
|
+
|
9
|
+
has_many :taggable_tags, as: :taggable, dependent: :destroy
|
10
|
+
has_many :tags, through: :taggable_tags, class_name: 'Motor::Tag'
|
11
|
+
has_many :alerts, dependent: :destroy
|
12
|
+
|
13
|
+
attribute :preferences, default: -> { ActiveSupport::HashWithIndifferentAccess.new }
|
14
|
+
|
15
|
+
if Rails.version.to_f >= 7.1
|
16
|
+
serialize :preferences, coder: HashSerializer
|
17
|
+
else
|
18
|
+
serialize :preferences, HashSerializer
|
19
|
+
end
|
20
|
+
|
21
|
+
scope :active, -> { where(deleted_at: nil) }
|
22
|
+
|
23
|
+
def result(variables_hash = {})
|
24
|
+
result = Motor::Queries::RunQuery.call!(self, variables_hash: variables_hash)
|
25
|
+
column_names = result.columns.pluck(:name)
|
26
|
+
|
27
|
+
result.data.map { |row| column_names.zip(row).to_h }
|
28
|
+
end
|
29
|
+
alias run result
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
ActiveSupport.run_load_hooks(:motor_query, Motor::Query)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Motor
|
4
|
+
class Reminder < ::Motor::ApplicationRecord
|
5
|
+
audited
|
6
|
+
|
7
|
+
belongs_to :record, polymorphic: true, optional: true
|
8
|
+
belongs_to :author, polymorphic: true
|
9
|
+
belongs_to :recipient, polymorphic: true
|
10
|
+
|
11
|
+
has_many :notifications, as: :record, dependent: :destroy
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Motor
|
4
|
+
class Resource < ::Motor::ApplicationRecord
|
5
|
+
audited
|
6
|
+
|
7
|
+
attribute :preferences, default: -> { ActiveSupport::HashWithIndifferentAccess.new }
|
8
|
+
|
9
|
+
if Rails.version.to_f >= 7.1
|
10
|
+
serialize :preferences, coder: HashSerializer
|
11
|
+
else
|
12
|
+
serialize :preferences, HashSerializer
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="<%= I18n.locale %>">
|
3
|
+
<head>
|
4
|
+
<title><%= Motor.company_name %></title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
|
6
|
+
<link rel="stylesheet" media="all" href="<%= Motor::Assets.asset_path('main.css') %>">
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
<%= csp_meta_tag %>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<%= yield %>
|
12
|
+
<script src="<%= Motor::Assets.asset_path('main.js') %>"></script>
|
13
|
+
<% if params[:controller] === 'motor/ui' %>
|
14
|
+
<%= raw(custom_html) %>
|
15
|
+
<% end %>
|
16
|
+
</body>
|
17
|
+
</html>
|
@@ -0,0 +1,72 @@
|
|
1
|
+
<!doctype html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta name="viewport" content="width=device-width">
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
6
|
+
<style>
|
7
|
+
@media only screen and (max-width: 620px) {
|
8
|
+
table[class=body] h1 {
|
9
|
+
font-size: 28px !important;
|
10
|
+
margin-bottom: 10px !important;
|
11
|
+
}
|
12
|
+
table[class=body] p,
|
13
|
+
table[class=body] ul,
|
14
|
+
table[class=body] ol,
|
15
|
+
table[class=body] td,
|
16
|
+
table[class=body] span,
|
17
|
+
table[class=body] a {
|
18
|
+
font-size: 14px !important;
|
19
|
+
}
|
20
|
+
table[class=body] .wrapper,
|
21
|
+
table[class=body] .article {
|
22
|
+
padding: 10px !important;
|
23
|
+
}
|
24
|
+
table[class=body] .content {
|
25
|
+
padding: 0 !important;
|
26
|
+
}
|
27
|
+
table[class=body] .container {
|
28
|
+
padding: 0 !important;
|
29
|
+
width: 100% !important;
|
30
|
+
}
|
31
|
+
table[class=body] .main {
|
32
|
+
border-left-width: 0 !important;
|
33
|
+
border-radius: 0 !important;
|
34
|
+
border-right-width: 0 !important;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
@media all {
|
39
|
+
.ExternalClass {
|
40
|
+
width: 100%;
|
41
|
+
}
|
42
|
+
.ExternalClass,
|
43
|
+
.ExternalClass p,
|
44
|
+
.ExternalClass span,
|
45
|
+
.ExternalClass font,
|
46
|
+
.ExternalClass td,
|
47
|
+
.ExternalClass div {
|
48
|
+
line-height: 100%;
|
49
|
+
}
|
50
|
+
.apple-link a {
|
51
|
+
color: inherit !important;
|
52
|
+
font-family: inherit !important;
|
53
|
+
font-size: inherit !important;
|
54
|
+
font-weight: inherit !important;
|
55
|
+
line-height: inherit !important;
|
56
|
+
text-decoration: none !important;
|
57
|
+
}
|
58
|
+
#MessageViewBody a {
|
59
|
+
color: inherit;
|
60
|
+
text-decoration: none;
|
61
|
+
font-size: inherit;
|
62
|
+
font-family: inherit;
|
63
|
+
font-weight: inherit;
|
64
|
+
line-height: inherit;
|
65
|
+
}
|
66
|
+
}
|
67
|
+
</style>
|
68
|
+
</head>
|
69
|
+
<body class="" style="background-color: #f9fbfc; font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; line-height: 1.4; margin: 0; padding: 0; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;">
|
70
|
+
<%= yield %>
|
71
|
+
</body>
|
72
|
+
</html>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background-color: #f9fbfc;">
|
2
|
+
<tr>
|
3
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
4
|
+
<td class="container" style="font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; Margin: 0 auto; padding: 10px;">
|
5
|
+
<div class="content" style="box-sizing: border-box; display: block; Margin: 0 auto;padding: 10px;">
|
6
|
+
<h1 style="margin: 0"><%= @alert.name.presence || @alert.query.name %></h1>
|
7
|
+
<% if @query_result.data.length > 1 %>
|
8
|
+
<p style="margin: 7px 0; float: left">Showing <%= @query_result.data.first(40).size %> of <%= @query_result.data.size %> rows</p>
|
9
|
+
<% end %>
|
10
|
+
<a href="<%= Motor::Admin.routes.url_helpers.motor_ui_query_url(@alert.query, { host: 'localhost:3000' }.merge(Rails.application.config.action_mailer.default_url_options || {})) %>" target="blank" style="margin: 7px 0; float: right">Open query </a>
|
11
|
+
<table class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #ffffff; border-radius: 3px;">
|
12
|
+
<tr>
|
13
|
+
<td class="wrapper" style="font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 20px; max-width: 0px; overflow: scroll">
|
14
|
+
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: auto;">
|
15
|
+
<tbody>
|
16
|
+
<tr>
|
17
|
+
<td style="font-family: sans-serif; font-size: 14px; overflow: scroll;">
|
18
|
+
<div style="oveflow: scroll">
|
19
|
+
<table border="0" cellpadding="0" cellspacing="15" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; white-space: nowrap;">
|
20
|
+
<tr>
|
21
|
+
<% @query_result.columns.each do |column| %>
|
22
|
+
<th><%= column[:name] %></th>
|
23
|
+
<% end %>
|
24
|
+
</tr>
|
25
|
+
<% @query_result.data.first(40).each do |row| %>
|
26
|
+
<tr>
|
27
|
+
<% row.each do |col| %>
|
28
|
+
<td><%= col.respond_to?(:strftime) ? l(col, format: :long) : col.to_s.truncate(100) %></th>
|
29
|
+
<% end %>
|
30
|
+
</tr>
|
31
|
+
<% end %>
|
32
|
+
</table>
|
33
|
+
</div>
|
34
|
+
</td>
|
35
|
+
</tr>
|
36
|
+
</tbody>
|
37
|
+
</table>
|
38
|
+
</td>
|
39
|
+
</tr>
|
40
|
+
</table>
|
41
|
+
<div class="footer" style="clear: both; Margin-top: 10px; text-align: center; width: 100%;">
|
42
|
+
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
43
|
+
<tr>
|
44
|
+
<td class="content-block powered-by" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; font-size: 12px; color: #999999; text-align: center;">
|
45
|
+
Sent from <%= Motor.company_name %>
|
46
|
+
</td>
|
47
|
+
</tr>
|
48
|
+
</table>
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
</td>
|
52
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
53
|
+
</tr>
|
54
|
+
</table>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background-color: #f9fbfc;">
|
2
|
+
<tr>
|
3
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
4
|
+
<td class="container" style="font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; Margin: 0 auto; padding: 10px;">
|
5
|
+
<div class="content" style="box-sizing: border-box; display: block; Margin: 0 auto;padding: 10px;">
|
6
|
+
<h1 style="margin: 0">Mention Notification</h1>
|
7
|
+
<a href="<%= Motor::Admin.routes.url_helpers.motor_ui_data_url([Motor::BuildSchema::Utils.slugify(@note.record.class), @note.record[@note.class.primary_key]], { tab: 'notes', host: 'localhost:3000' }.merge(Rails.application.config.action_mailer.default_url_options || {})) %>" target="blank" style="margin: 7px 0; float: right">Go to Mention</a>
|
8
|
+
<table class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #ffffff; border-radius: 3px;">
|
9
|
+
<tr>
|
10
|
+
<td class="wrapper" style="font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 20px; max-width: 0px; overflow: scroll">
|
11
|
+
<%= simple_format(@note.body.gsub(URI.regexp, '<a href="\0">\0</a>')) %>
|
12
|
+
</td>
|
13
|
+
</tr>
|
14
|
+
</table>
|
15
|
+
<div class="footer" style="clear: both; Margin-top: 10px; text-align: center; width: 100%;">
|
16
|
+
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
17
|
+
<tr>
|
18
|
+
<td class="content-block powered-by" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; font-size: 12px; color: #999999; text-align: center;">
|
19
|
+
Sent from <%= Motor.company_name %>
|
20
|
+
</td>
|
21
|
+
</tr>
|
22
|
+
</table>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</td>
|
26
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
27
|
+
</tr>
|
28
|
+
</table>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background-color: #f9fbfc;">
|
2
|
+
<tr>
|
3
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
4
|
+
<td class="container" style="font-family: sans-serif; font-size: 14px; vertical-align: top; display: block; Margin: 0 auto; padding: 10px;">
|
5
|
+
<div class="content" style="box-sizing: border-box; display: block; Margin: 0 auto;padding: 10px;">
|
6
|
+
<h1 style="margin: 0">Reminder Notification</h1>
|
7
|
+
<a href="<%= Motor::Admin.routes.url_helpers.motor_ui_data_url([Motor::BuildSchema::Utils.slugify(@note.record.class), @note.record[@note.class.primary_key]], { tab: 'notes', host: 'localhost:3000' }.merge(Rails.application.config.action_mailer.default_url_options || {})) %>" target="blank" style="margin: 7px 0; float: right">Go to Reminder</a>
|
8
|
+
<table class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background: #ffffff; border-radius: 3px;">
|
9
|
+
<tr>
|
10
|
+
<td class="wrapper" style="font-family: sans-serif; font-size: 14px; vertical-align: top; box-sizing: border-box; padding: 20px; max-width: 0px; overflow: scroll">
|
11
|
+
<%= simple_format(@note.body.gsub(URI.regexp, '<a href="\0">\0</a>')) %>
|
12
|
+
</td>
|
13
|
+
</tr>
|
14
|
+
</table>
|
15
|
+
<div class="footer" style="clear: both; Margin-top: 10px; text-align: center; width: 100%;">
|
16
|
+
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
|
17
|
+
<tr>
|
18
|
+
<td class="content-block powered-by" style="font-family: sans-serif; vertical-align: top; padding-bottom: 10px; padding-top: 10px; font-size: 12px; color: #999999; text-align: center;">
|
19
|
+
Sent from <%= Motor.company_name %>
|
20
|
+
</td>
|
21
|
+
</tr>
|
22
|
+
</table>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</td>
|
26
|
+
<td style="font-family: sans-serif; font-size: 14px; vertical-align: top;"> </td>
|
27
|
+
</tr>
|
28
|
+
</table>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= raw(Motor::Configs::BuildUiAppTag.call(current_user, current_ability, cache_keys: cache_keys)) %>
|