alchemy-ajax-form 1.0.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.
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>