alchemy-ajax-form 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +310 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/config/alchemy_ajax_form_manifest.js +3 -0
  6. data/app/assets/images/ajax_form.png +0 -0
  7. data/app/assets/images/alchemy/ajax_form.png +0 -0
  8. data/app/assets/javascripts/ajax_forms.js.erb +185 -0
  9. data/app/controllers/alchemy/admin/ajax_forms_controller.rb +53 -0
  10. data/app/controllers/alchemy/ajax_forms_controller.rb +34 -0
  11. data/app/mailers/alchemy/ajax_forms_mailer.rb +42 -0
  12. data/app/models/alchemy/ajax_form.rb +68 -0
  13. data/app/models/alchemy/ajax_form_ability.rb +22 -0
  14. data/app/views/alchemy/admin/ajax_forms/_table.html.erb +22 -0
  15. data/app/views/alchemy/ajax_forms/create.json.jbuilder +6 -0
  16. data/app/views/alchemy/ajax_forms_mailer/mjml_notify_message.mjml.erb +1 -0
  17. data/app/views/alchemy/ajax_forms_mailer/mjml_notify_user_message.mjml.erb +1 -0
  18. data/app/views/alchemy/ajax_forms_mailer/notify_message.html.erb +1 -0
  19. data/app/views/alchemy/ajax_forms_mailer/notify_user_message.html.erb +1 -0
  20. data/app/views/layouts/alchemy/base_mailer.html.erb +323 -0
  21. data/app/views/layouts/alchemy/mjml_base_mailer.mjml +23 -0
  22. data/config/initializer/assets.rb +1 -0
  23. data/config/locales/it.yml +56 -0
  24. data/config/routes.rb +4 -0
  25. data/lib/alchemy/ajax/form.rb +18 -0
  26. data/lib/alchemy/ajax/form/engine.rb +21 -0
  27. data/lib/alchemy/ajax/form/version.rb +7 -0
  28. data/lib/alchemy/ajax_form_resource.rb +45 -0
  29. data/lib/generators/custom_form/USAGE +8 -0
  30. data/lib/generators/custom_form/custom_form_generator.rb +191 -0
  31. data/lib/generators/custom_form/templates/app/controllers/admin/generic_controller.rb.tt +3 -0
  32. data/lib/generators/custom_form/templates/app/controllers/generic_controller.rb.tt +3 -0
  33. data/lib/generators/custom_form/templates/app/lib/generic_resource.rb.tt +4 -0
  34. data/lib/generators/custom_form/templates/app/model/generic_ability.rb.tt +18 -0
  35. data/lib/generators/custom_form/templates/app/model/generic_form.rb.tt +15 -0
  36. data/lib/generators/custom_form/templates/app/views/alchemy/ajax_forms_mailer/_generic_form.html.erb.tt +38 -0
  37. data/lib/generators/custom_form/templates/app/views/alchemy/ajax_forms_mailer/_generic_user_form.html.erb.tt +39 -0
  38. data/lib/generators/custom_form/templates/app/views/alchemy/elements/_generic_ajax_form_view.html.erb.tt +50 -0
  39. data/lib/generators/custom_form/templates/config/initializers/alchemy_ajax_forms.rb.tt +26 -0
  40. data/lib/generators/custom_form/templates/db/migrate/generic_migration.rb.tt +12 -0
  41. data/lib/tasks/alchemy/ajax/form_tasks.rake +4 -0
  42. metadata +182 -0
@@ -0,0 +1,53 @@
1
+ module Alchemy
2
+ module Admin
3
+ class AjaxFormsController < ResourcesController
4
+
5
+ def resource_handler
6
+ @_resource_handler ||= "::#{controller_name.classify}Resource".constantize.new(controller_path, alchemy_module)
7
+ end
8
+
9
+ def index
10
+ @query = resource_handler.model.ransack(search_filter_params[:q])
11
+ items = @query.result
12
+ items = items.order(created_at: :desc)
13
+
14
+ if contains_relations?
15
+ items = items.includes(*resource_relations_names)
16
+ end
17
+
18
+ if search_filter_params[:tagged_with].present?
19
+ items = items.tagged_with(search_filter_params[:tagged_with])
20
+ end
21
+
22
+ if search_filter_params[:filter].present?
23
+ items = items.public_send(sanitized_filter_params)
24
+ end
25
+
26
+ respond_to do |format|
27
+ format.html {
28
+ items = items.page(params[:page] || 1).per(per_page_value_for_screen_size)
29
+ instance_variable_set("@#{resource_handler.resources_name}", items)
30
+ }
31
+ format.csv {
32
+ instance_variable_set("@#{resource_handler.resources_name}", items)
33
+ }
34
+ end
35
+ end
36
+
37
+ protected
38
+
39
+ def common_search_filter_includes
40
+ [
41
+ # contrary to Rails' documentation passing an empty hash to permit all keys does not work
42
+ {options: options_from_params.keys},
43
+ {q: [resource_handler.search_field_name, :s]},
44
+ :tagged_with,
45
+ :filter,
46
+ :page
47
+ ].freeze
48
+ end
49
+
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,34 @@
1
+ module Alchemy
2
+ class AjaxFormsController < Alchemy::BaseController
3
+
4
+
5
+ def create
6
+ @object = base_class.new permitted_resource_attributes
7
+ if verify_recaptcha(model: @object) && @object.valid?
8
+ #registro dati, invio email
9
+ unless @object.send_only?
10
+ @object.save
11
+ end
12
+ @object.mail_deliver
13
+
14
+ render formats: :json
15
+ else
16
+ render formats: :json, status: :not_acceptable
17
+ end
18
+ end
19
+
20
+
21
+ private
22
+
23
+
24
+ def permitted_resource_attributes
25
+ params.require(base_class.to_s.demodulize.underscore).permit!
26
+ end
27
+
28
+ def base_class
29
+ controller_name.classify.constantize
30
+ end
31
+
32
+
33
+ end
34
+ end
@@ -0,0 +1,42 @@
1
+ module Alchemy
2
+ class AjaxFormsMailer < ApplicationMailer
3
+
4
+ if Alchemy::Ajax::Form.enable_mjml
5
+ layout "alchemy/mjml_base_mailer"
6
+ else
7
+ layout "alchemy/base_mailer"
8
+ end
9
+
10
+
11
+ include Alchemy::ConfigurationMethods
12
+ add_template_helper(Alchemy::PagesHelper)
13
+
14
+
15
+ def notify_message(r)
16
+ @rec = r
17
+ reply_to = @rec.email if @rec.respond_to? :email
18
+ if Alchemy::Ajax::Form.enable_mjml
19
+ mail(from: Alchemy::EMAIL_NOTIFY_FROM, to: r.emails_recipient, subject: r.notify_subject, reply_to: reply_to) do |format|
20
+ format.mjml { render "mjml_notify_message", locals: {recipient: @rec} }
21
+ end
22
+ else
23
+ mail(from: Alchemy::EMAIL_NOTIFY_FROM, to: r.emails_recipient, subject: r.notify_subject, reply_to: reply_to)
24
+ end
25
+ end
26
+
27
+ def notify_message_user(r)
28
+ @rec = r
29
+ if Alchemy::Ajax::Form.enable_mjml
30
+ mail(to: @rec.email, from: Alchemy::EMAIL_NOTIFY_FROM, subject: @rec.notify_user_subject) do |format|
31
+ format.mjml { render "mjml_notify_user_message", locals: {recipient: @rec} }
32
+ end
33
+ else
34
+ mail(to: @rec.email, from: Alchemy::EMAIL_NOTIFY_FROM, subject: @rec.notify_user_subject) do |format|
35
+ format.html {render "notify_user_message"}
36
+ end
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+
@@ -0,0 +1,68 @@
1
+ module Alchemy
2
+ class AjaxForm < ApplicationRecord
3
+
4
+ self.abstract_class = true
5
+
6
+ belongs_to :language, class_name: "Alchemy::Language", optional: true, required: false
7
+
8
+ def site
9
+ language.try(:site)
10
+ end
11
+
12
+
13
+ def notify_subject
14
+ I18n.translate(:default_notification_subject, scope: [:ajax_form_mailer, :subjects])
15
+ end
16
+
17
+ def notify_user_subject
18
+ I18n.translate(:default_notification_user_subject, scope: [:ajax_form_mailer, :subjects])
19
+ end
20
+
21
+ validates :email, :presence => {allow_blank: false}, if: -> {respond_to? :email}
22
+ validates_format_of :email, :with => /\A([-a-z0-9!\#$%&'*+\/=?^_`{|}~]+\.)*[-a-z0-9!\#$%&'*+\/=?^_`{|}~]+@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
23
+ if: -> {respond_to? :email and !self.email.blank?}
24
+
25
+ #with alchemy element can retrieve settings of form (ex. recipient_notification)
26
+ attr_accessor :alcm_element
27
+
28
+ before_save -> {self.language = Alchemy::Language.current}
29
+
30
+ def send_only?
31
+ element_alchemy.content_by_name(:send_only).essence.value
32
+ rescue
33
+ false
34
+ end
35
+
36
+ def send_to_staff?
37
+ element_alchemy.content_by_name(:send_staff).essence.value
38
+ rescue
39
+ false
40
+ end
41
+
42
+ def send_to_user?
43
+ element_alchemy.content_by_name(:send_user).essence.value and respond_to? :email
44
+ rescue
45
+ false
46
+ end
47
+
48
+ def mail_deliver
49
+ if send_to_staff?
50
+ AjaxFormsMailer.notify_message(self).deliver_now
51
+ end
52
+ if send_to_user?
53
+ AjaxFormsMailer.notify_message_user(self).deliver_now
54
+ end
55
+ end
56
+
57
+ def element_alchemy
58
+ Alchemy::Element.find(self.alcm_element)
59
+ end
60
+
61
+ def emails_recipient
62
+ element_alchemy.content_by_name(:recipient_notification).essence.body
63
+ rescue
64
+ Alchemy::EMAIL_NOTIFY
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,22 @@
1
+ module Alchemy
2
+ class AjaxFormAbility
3
+ include CanCan::Ability
4
+
5
+ def initialize(user)
6
+
7
+ if user.present? && user.is_admin?
8
+ # can :manage, ::UserSiteRegistration
9
+ # can :manage, :admin_user_site_registrations
10
+
11
+ can :manage, AjaxForm
12
+ cannot :create, AjaxForm
13
+ cannot :update, AjaxForm
14
+ can :manage, :admin_ahjax_forms
15
+ cannot :create, :admin_ajax_forms
16
+ cannot :update, :admin_ajax_forms
17
+
18
+ end
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ <% if resources_instance_variable.any? %>
2
+ <table class="list" id="<%= resource_handler.resources_name %>_list">
3
+ <thead>
4
+ <tr>
5
+ <% resource_handler.attributes.each do |attribute| %>
6
+ <th class="<%= attribute[:type] %> <%= attribute[:name] %>">
7
+ <%= resource_handler.model.human_attribute_name(attribute[:name]) %>
8
+
9
+ </th>
10
+ <% end %>
11
+ <th class="tools"></th>
12
+ </tr>
13
+ </thead>
14
+ <tbody>
15
+ <%= render_resources %>
16
+ </tbody>
17
+ </table>
18
+ <% elsif search_filter_params[:q].present? %>
19
+ <p><%= Alchemy.t('Nothing found') %></p>
20
+ <% end %>
21
+
22
+ <%= paginate resources_instance_variable, scope: resource_url_proxy, theme: 'alchemy' %>
@@ -0,0 +1,6 @@
1
+ if @object.errors.empty?
2
+ json.messages t(:form_sended_succesfully)
3
+ else
4
+ json.messages @object.errors.full_messages
5
+ json.errors @object.errors
6
+ end
@@ -0,0 +1 @@
1
+ <%= render partial: @rec.class.name.underscore, formats: [:html], locals: { rec: @rec } %>
@@ -0,0 +1 @@
1
+ <%= render partial: "#{@rec.class.name.underscore}_user", formats: [:html], locals: { rec: @rec } %>
@@ -0,0 +1 @@
1
+ <%= render partial: @rec.class.name.underscore, locals: { rec: @rec } %>
@@ -0,0 +1 @@
1
+ <%= render partial: "#{@rec.class.name.underscore}_user", locals: { rec: @rec } %>
@@ -0,0 +1,323 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml">
4
+ <head>
5
+ <!--[if gte mso 9]><xml><o:OfficeDocumentSettings><o:AllowPNG/><o:PixelsPerInch>96</o:PixelsPerInch></o:OfficeDocumentSettings></xml><![endif]-->
6
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
7
+ <meta content="width=device-width" name="viewport"/>
8
+ <!--[if !mso]><!-->
9
+ <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
10
+ <!--<![endif]-->
11
+ <title></title>
12
+ <!--[if !mso]><!-->
13
+ <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet" type="text/css"/>
14
+ <!--<![endif]-->
15
+ <style type="text/css">
16
+ body {
17
+ margin: 0;
18
+ padding: 0;
19
+ }
20
+
21
+ table,
22
+ td,
23
+ tr {
24
+ vertical-align: top;
25
+ border-collapse: collapse;
26
+ }
27
+
28
+ * {
29
+ line-height: inherit;
30
+ }
31
+
32
+ a[x-apple-data-detectors=true] {
33
+ color: inherit !important;
34
+ text-decoration: none !important;
35
+ }
36
+ </style>
37
+ <style id="media-query" type="text/css">
38
+ @media (max-width: 620px) {
39
+
40
+ .block-grid,
41
+ .col {
42
+ min-width: 320px !important;
43
+ max-width: 100% !important;
44
+ display: block !important;
45
+ }
46
+
47
+ .block-grid {
48
+ width: 100% !important;
49
+ }
50
+
51
+ .col {
52
+ width: 100% !important;
53
+ }
54
+
55
+ .col>div {
56
+ margin: 0 auto;
57
+ }
58
+
59
+ img.fullwidth,
60
+ img.fullwidthOnMobile {
61
+ max-width: 100% !important;
62
+ }
63
+
64
+ .no-stack .col {
65
+ min-width: 0 !important;
66
+ display: table-cell !important;
67
+ }
68
+
69
+ .no-stack.two-up .col {
70
+ width: 50% !important;
71
+ }
72
+
73
+ .no-stack .col.num4 {
74
+ width: 33% !important;
75
+ }
76
+
77
+ .no-stack .col.num8 {
78
+ width: 66% !important;
79
+ }
80
+
81
+ .no-stack .col.num4 {
82
+ width: 33% !important;
83
+ }
84
+
85
+ .no-stack .col.num3 {
86
+ width: 25% !important;
87
+ }
88
+
89
+ .no-stack .col.num6 {
90
+ width: 50% !important;
91
+ }
92
+
93
+ .no-stack .col.num9 {
94
+ width: 75% !important;
95
+ }
96
+
97
+ .video-block {
98
+ max-width: none !important;
99
+ }
100
+
101
+ .mobile_hide {
102
+ min-height: 0px;
103
+ max-height: 0px;
104
+ max-width: 0px;
105
+ display: none;
106
+ overflow: hidden;
107
+ font-size: 0px;
108
+ }
109
+
110
+ .desktop_hide {
111
+ display: block !important;
112
+ max-height: none !important;
113
+ }
114
+ }
115
+ </style>
116
+ </head>
117
+ <body class="clean-body" style="margin: 0; padding: 0; -webkit-text-size-adjust: 100%; background-color: #f3f3f3;">
118
+ <!--[if IE]><div class="ie-browser"><![endif]-->
119
+ <table bgcolor="#f3f3f3" cellpadding="0" cellspacing="0" class="nl-container" role="presentation" style="table-layout: fixed; vertical-align: top; min-width: 320px; Margin: 0 auto; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f3f3f3; width: 100%;" valign="top" width="100%">
120
+ <tbody>
121
+ <tr style="vertical-align: top;" valign="top">
122
+ <td style="word-break: break-word; vertical-align: top;" valign="top">
123
+ <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" style="background-color:#f3f3f3"><![endif]-->
124
+ <div style="background-color:transparent;">
125
+ <div class="block-grid" style="Margin: 0 auto; min-width: 320px; max-width: 600px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: transparent;">
126
+ <div style="border-collapse: collapse;display: table;width: 100%;background-color:transparent;">
127
+ <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px"><tr class="layout-full-width" style="background-color:transparent"><![endif]-->
128
+ <!--[if (mso)|(IE)]><td align="center" width="600" style="background-color:transparent;width:600px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:5px; padding-bottom:0px;"><![endif]-->
129
+ <div class="col num12" style="min-width: 320px; max-width: 600px; display: table-cell; vertical-align: top; width: 600px;">
130
+ <div style="width:100% !important;">
131
+ <!--[if (!mso)&(!IE)]><!-->
132
+ <div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:0px; padding-right: 0px; padding-left: 0px;">
133
+ <!--<![endif]-->
134
+ <div style="font-size:16px;text-align:center;font-family:'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif">
135
+ <div class="our-class" style="height:25px; background-color: #F27C1D;"> </div>
136
+ </div>
137
+ <!--[if (!mso)&(!IE)]><!-->
138
+ </div>
139
+ <!--<![endif]-->
140
+ </div>
141
+ </div>
142
+ <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
143
+ <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
144
+ </div>
145
+ </div>
146
+ </div>
147
+ <div style="background-color:transparent;">
148
+ <div class="block-grid" style="Margin: 0 auto; min-width: 320px; max-width: 600px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #FFFFFF;">
149
+ <div style="border-collapse: collapse;display: table;width: 100%;background-color:#FFFFFF;">
150
+ <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px"><tr class="layout-full-width" style="background-color:#FFFFFF"><![endif]-->
151
+ <!--[if (mso)|(IE)]><td align="center" width="600" style="background-color:#FFFFFF;width:600px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:5px; padding-bottom:5px;"><![endif]-->
152
+ <div class="col num12" style="min-width: 320px; max-width: 600px; display: table-cell; vertical-align: top; width: 600px;">
153
+ <div style="width:100% !important;">
154
+ <!--[if (!mso)&(!IE)]><!-->
155
+ <div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;">
156
+ <!--<![endif]-->
157
+ <div align="center" class="img-container center" style="padding-right: 0px;padding-left: 0px;">
158
+ <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr style="line-height:0px"><td style="padding-right: 0px;padding-left: 0px;" align="center"><![endif]-->
159
+ <!-- put here image logo -->
160
+ <!--[if mso]></td></tr></table><![endif]-->
161
+ </div>
162
+ <!--[if (!mso)&(!IE)]><!-->
163
+ </div>
164
+ <!--<![endif]-->
165
+ </div>
166
+ </div>
167
+ <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
168
+ <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
169
+ </div>
170
+ </div>
171
+ </div>
172
+ <div style="background-color:transparent;">
173
+ <div class="block-grid" style="Margin: 0 auto; min-width: 320px; max-width: 600px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #FFFFFF;">
174
+ <div style="border-collapse: collapse;display: table;width: 100%;background-color:#FFFFFF;">
175
+ <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px"><tr class="layout-full-width" style="background-color:#FFFFFF"><![endif]-->
176
+ <!--[if (mso)|(IE)]><td align="center" width="600" style="background-color:#FFFFFF;width:600px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:0px; padding-bottom:5px;"><![endif]-->
177
+ <div class="col num12" style="min-width: 320px; max-width: 600px; display: table-cell; vertical-align: top; width: 600px;">
178
+ <div style="width:100% !important;">
179
+ <!--[if (!mso)&(!IE)]><!-->
180
+ <div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:0px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;">
181
+ <!--<![endif]-->
182
+ <%= yield %>
183
+ <table border="0" cellpadding="0" cellspacing="0" class="divider" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;" valign="top" width="100%">
184
+ <tbody>
185
+ <tr style="vertical-align: top;" valign="top">
186
+ <td class="divider_inner" style="word-break: break-word; vertical-align: top; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; padding-top: 30px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;" valign="top">
187
+ <table align="center" border="0" cellpadding="0" cellspacing="0" class="divider_content" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-top: 0px solid transparent; width: 100%;" valign="top" width="100%">
188
+ <tbody>
189
+ <tr style="vertical-align: top;" valign="top">
190
+ <td style="word-break: break-word; vertical-align: top; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;" valign="top"><span></span></td>
191
+ </tr>
192
+ </tbody>
193
+ </table>
194
+ </td>
195
+ </tr>
196
+ </tbody>
197
+ </table>
198
+ <!--[if (!mso)&(!IE)]><!-->
199
+ </div>
200
+ <!--<![endif]-->
201
+ </div>
202
+ </div>
203
+ <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
204
+ <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
205
+ </div>
206
+ </div>
207
+ </div>
208
+ <div style="background-color:transparent;">
209
+ <div class="block-grid three-up" style="Margin: 0 auto; min-width: 320px; max-width: 600px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: #002543;">
210
+ <div style="border-collapse: collapse;display: table;width: 100%;background-color:#002543;">
211
+ <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px"><tr class="layout-full-width" style="background-color:#002543"><![endif]-->
212
+ <!--[if (mso)|(IE)]><td align="center" width="200" style="background-color:#002543;width:200px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 5px; padding-left: 5px; padding-top:5px; padding-bottom:5px;"><![endif]-->
213
+ <div class="col num4" style="max-width: 320px; min-width: 200px; display: table-cell; vertical-align: top; width: 200px;">
214
+ <div style="width:100% !important;">
215
+ <!--[if (!mso)&(!IE)]><!-->
216
+ <div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:5px; padding-bottom:5px; padding-right: 5px; padding-left: 5px;">
217
+ <!--<![endif]-->
218
+ <table cellpadding="0" cellspacing="0" class="social_icons" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt;" valign="top" width="100%">
219
+ <tbody>
220
+ <tr style="vertical-align: top;" valign="top">
221
+ <td style="word-break: break-word; vertical-align: top; padding-top: 15px; padding-right: 15px; padding-bottom: 15px; padding-left: 15px;" valign="top">
222
+ <table activate="activate" align="center" alignment="alignment" cellpadding="0" cellspacing="0" class="social_table" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: undefined; mso-table-tspace: 0; mso-table-rspace: 0; mso-table-bspace: 0; mso-table-lspace: 0;" to="to" valign="top">
223
+ <tbody>
224
+ <tr align="center" style="vertical-align: top; display: inline-block; text-align: center;" valign="top">
225
+ <td style="word-break: break-word; vertical-align: top; padding-bottom: 5px; padding-right: 3px; padding-left: 3px;" valign="top"><!-- put here social 1 --></td>
226
+ </tr>
227
+ </tbody>
228
+ </table>
229
+ </td>
230
+ </tr>
231
+ </tbody>
232
+ </table>
233
+ <!--[if (!mso)&(!IE)]><!-->
234
+ </div>
235
+ <!--<![endif]-->
236
+ </div>
237
+ </div>
238
+ <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
239
+ <!--[if (mso)|(IE)]></td><td align="center" width="200" style="background-color:#002543;width:200px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top:10px; padding-bottom:10px;"><![endif]-->
240
+ <div class="col num4" style="max-width: 320px; min-width: 200px; display: table-cell; vertical-align: top; width: 200px;">
241
+ <div style="width:100% !important;">
242
+ <!--[if (!mso)&(!IE)]><!-->
243
+ <div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:10px; padding-bottom:10px; padding-right: 10px; padding-left: 10px;">
244
+ <!--<![endif]-->
245
+ <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top: 20px; padding-bottom: 20px; font-family: Arial, sans-serif"><![endif]-->
246
+ <div style="color:#ffffff;font-family:'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.2;padding-top:20px;padding-right:10px;padding-bottom:20px;padding-left:10px;">
247
+ <div style="font-size: 12px; line-height: 1.2; color: #ffffff; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; mso-line-height-alt: 14px;">
248
+ <!-- pu here phone number <p style="font-size: 12px; line-height: 1.2; text-align: center; word-break: break-word; mso-line-height-alt: 14px; margin: 0;"><span style="color: #ffffff; font-size: 12px;"><span style="font-size: 12px;">Tel.:</span> +39 . 000 . 000 . 000</span></p> -->
249
+ </div>
250
+ </div>
251
+ <!--[if mso]></td></tr></table><![endif]-->
252
+ <!--[if (!mso)&(!IE)]><!-->
253
+ </div>
254
+ <!--<![endif]-->
255
+ </div>
256
+ </div>
257
+ <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
258
+ <!--[if (mso)|(IE)]></td><td align="center" width="200" style="background-color:#002543;width:200px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top:10px; padding-bottom:10px;"><![endif]-->
259
+ <div class="col num4" style="max-width: 320px; min-width: 200px; display: table-cell; vertical-align: top; width: 200px;">
260
+ <div style="width:100% !important;">
261
+ <!--[if (!mso)&(!IE)]><!-->
262
+ <div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:10px; padding-bottom:10px; padding-right: 10px; padding-left: 10px;">
263
+ <!--<![endif]-->
264
+ <!--[if mso]><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 10px; padding-left: 10px; padding-top: 20px; padding-bottom: 20px; font-family: Arial, sans-serif"><![endif]-->
265
+ <div style="color:#ffffff;font-family:'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;line-height:1.2;padding-top:20px;padding-right:10px;padding-bottom:20px;padding-left:10px;">
266
+ <div style="font-size: 12px; line-height: 1.2; color: #ffffff; font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; mso-line-height-alt: 14px;">
267
+ <!-- put here email <p style="font-size: 12px; line-height: 1.2; text-align: center; word-break: break-word; mso-line-height-alt: 14px; margin: 0;">Email: <span style="color: #ffffff; font-size: 12px;">mail@example.com</span></p> -->
268
+ </div>
269
+ </div>
270
+ <!--[if mso]></td></tr></table><![endif]-->
271
+ <!--[if (!mso)&(!IE)]><!-->
272
+ </div>
273
+ <!--<![endif]-->
274
+ </div>
275
+ </div>
276
+ <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
277
+ <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
278
+ </div>
279
+ </div>
280
+ </div>
281
+ <div style="background-color:transparent;">
282
+ <div class="block-grid" style="Margin: 0 auto; min-width: 320px; max-width: 600px; overflow-wrap: break-word; word-wrap: break-word; word-break: break-word; background-color: transparent;">
283
+ <div style="border-collapse: collapse;display: table;width: 100%;background-color:transparent;">
284
+ <!--[if (mso)|(IE)]><table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:transparent;"><tr><td align="center"><table cellpadding="0" cellspacing="0" border="0" style="width:600px"><tr class="layout-full-width" style="background-color:transparent"><![endif]-->
285
+ <!--[if (mso)|(IE)]><td align="center" width="600" style="background-color:transparent;width:600px; border-top: 0px solid transparent; border-left: 0px solid transparent; border-bottom: 0px solid transparent; border-right: 0px solid transparent;" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td style="padding-right: 0px; padding-left: 0px; padding-top:0px; padding-bottom:5px;"><![endif]-->
286
+ <div class="col num12" style="min-width: 320px; max-width: 600px; display: table-cell; vertical-align: top; width: 600px;">
287
+ <div style="width:100% !important;">
288
+ <!--[if (!mso)&(!IE)]><!-->
289
+ <div style="border-top:0px solid transparent; border-left:0px solid transparent; border-bottom:0px solid transparent; border-right:0px solid transparent; padding-top:0px; padding-bottom:5px; padding-right: 0px; padding-left: 0px;">
290
+ <!--<![endif]-->
291
+ <table border="0" cellpadding="0" cellspacing="0" class="divider" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;" valign="top" width="100%">
292
+ <tbody>
293
+ <tr style="vertical-align: top;" valign="top">
294
+ <td class="divider_inner" style="word-break: break-word; vertical-align: top; min-width: 100%; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; padding-top: 30px; padding-right: 30px; padding-bottom: 30px; padding-left: 30px;" valign="top">
295
+ <table align="center" border="0" cellpadding="0" cellspacing="0" class="divider_content" role="presentation" style="table-layout: fixed; vertical-align: top; border-spacing: 0; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-top: 0px solid transparent; width: 100%;" valign="top" width="100%">
296
+ <tbody>
297
+ <tr style="vertical-align: top;" valign="top">
298
+ <td style="word-break: break-word; vertical-align: top; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;" valign="top"><span></span></td>
299
+ </tr>
300
+ </tbody>
301
+ </table>
302
+ </td>
303
+ </tr>
304
+ </tbody>
305
+ </table>
306
+ <!--[if (!mso)&(!IE)]><!-->
307
+ </div>
308
+ <!--<![endif]-->
309
+ </div>
310
+ </div>
311
+ <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
312
+ <!--[if (mso)|(IE)]></td></tr></table></td></tr></table><![endif]-->
313
+ </div>
314
+ </div>
315
+ </div>
316
+ <!--[if (mso)|(IE)]></td></tr></table><![endif]-->
317
+ </td>
318
+ </tr>
319
+ </tbody>
320
+ </table>
321
+ <!--[if (IE)]></div><![endif]-->
322
+ </body>
323
+ </html>