c80_callback 0.1.0.1 → 0.1.0.2
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/app/assets/images/loader_button.gif +0 -0
- data/app/assets/javascripts/c80_callback/callback_decorator.js +84 -0
- data/app/assets/stylesheets/c80_callback/bs_modal.scss +15 -0
- data/app/assets/stylesheets/c80_callback/c80_callback_progress.scss +3 -0
- data/app/assets/stylesheets/c80_callback/callback_simple_form.scss +18 -1
- data/app/controllers/c80_callback/application_controller.rb +18 -0
- data/app/controllers/c80_callback/messages_controller.rb +50 -0
- data/app/helpers/c80_callback/app_helper.rb +25 -1
- data/app/helpers/c80_callback/inner/forms_helper.rb +14 -0
- data/app/helpers/c80_callback/inner/modal_helper.rb +16 -0
- data/app/mailers/c80_callback/callbacks_mailer.rb +28 -0
- data/app/models/c80_callback/cmessage.rb +20 -0
- data/app/models/c80_callback/cmessage_validator.rb +28 -0
- data/app/views/c80_callback/application/callback_popup.js.erb +23 -0
- data/app/views/c80_callback/callbacks_mailer/mail_letter.html.erb +1 -0
- data/app/views/c80_callback/messages/callback_message.js.erb +23 -0
- data/app/views/c80_callback/messages/callback_message_simple.js.erb +22 -0
- data/app/views/c80_callback/shared/_callback_simple_form.html.erb +9 -10
- data/app/views/c80_callback/shared/_popup.html.erb +2 -0
- data/app/views/c80_callback/shared/inner/forms/_full_contact_form.html.erb +67 -0
- data/app/views/c80_callback/shared/inner/modal/_bs_modal.html.erb +18 -0
- data/config/locales/ru.yml +17 -0
- data/config/routes.rb +7 -0
- data/lib/c80_callback/version.rb +1 -1
- metadata +22 -4
- data/app/assets/javascripts/c80_callback/foo.js +0 -1
- data/app/models/c80_swiper/cmessage.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4675644fb9518d3cb5bfca12415321643df921f
|
4
|
+
data.tar.gz: ceee84f0455f59c74d23f4203f05ddc10f91d5ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cfc84a2df9dd305fd774c149a3da106c4c257a3782fc2ba993092ffa47d5db1b4c6d37a8f562de1df8c1cdc5567f07cfdb9e9706b7ecede0e98c83bec9618fc5
|
7
|
+
data.tar.gz: 15b5e02c436a71b3062baa702dc650ab3cb6dc82474a96fc477952d73ebe185ff83e0d6a4e8a1247d1e39521d29ef5f64574c9b87866a8dc7d5400a266111865
|
Binary file
|
@@ -0,0 +1,84 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
// найдём на странице все элементы класса `.c80_callback_show_popup`
|
4
|
+
// и добавим поведение при клике:
|
5
|
+
// - кнопка должна перейти в состояние "in progress" и стать некликабельной
|
6
|
+
// - на сервер уходит запрос за popup формой
|
7
|
+
// также содержит "метод" removeInProgressState, который переводит все `.c80_callback_show_popup` в "нормальное" состояние
|
8
|
+
|
9
|
+
function CallbackDecorator() {
|
10
|
+
|
11
|
+
var css_selector = '.c80_callback_show_popup';
|
12
|
+
var url = '/callback_popup';
|
13
|
+
|
14
|
+
var $links;
|
15
|
+
var _mark_req_in_progress = false;
|
16
|
+
|
17
|
+
//-[ public ]-----------------------------------------------------------------------------------------------------------------------
|
18
|
+
|
19
|
+
|
20
|
+
//-[ private ]-----------------------------------------------------------------------------------------------------------------------
|
21
|
+
|
22
|
+
var _progress_state_add = function ($link) {
|
23
|
+
console.log('<_progress_state_add>');
|
24
|
+
$link.addClass('c80_callback_progress');
|
25
|
+
};
|
26
|
+
|
27
|
+
// у кнопок `.c80_callback_show_popup` уберём in_progress state
|
28
|
+
var _progress_state_remove = function () {
|
29
|
+
setTimeout(function () {
|
30
|
+
$links.removeClass('c80_callback_progress');
|
31
|
+
}, 500);
|
32
|
+
};
|
33
|
+
|
34
|
+
var _req = function () {
|
35
|
+
$.ajax({
|
36
|
+
url: url,
|
37
|
+
type: 'POST',
|
38
|
+
dataType: 'script'
|
39
|
+
}).done(function (data, result) {
|
40
|
+
|
41
|
+
if (result == "success") { // callback_form.js.erb
|
42
|
+
//markWasPasted = true;
|
43
|
+
}
|
44
|
+
|
45
|
+
_mark_req_in_progress = false;
|
46
|
+
_progress_state_remove();
|
47
|
+
|
48
|
+
})
|
49
|
+
};
|
50
|
+
|
51
|
+
var _on_link_click = function (e) {
|
52
|
+
console.log('<_on_link_click>');
|
53
|
+
|
54
|
+
e.preventDefault();
|
55
|
+
|
56
|
+
if (!_mark_req_in_progress) {
|
57
|
+
_mark_req_in_progress = true;
|
58
|
+
_progress_state_add($(this));
|
59
|
+
_req();
|
60
|
+
}
|
61
|
+
|
62
|
+
};
|
63
|
+
|
64
|
+
var _decorateLinks = function () {
|
65
|
+
console.log('<_decorateLinks>');
|
66
|
+
$links.on('click', _on_link_click);
|
67
|
+
|
68
|
+
};
|
69
|
+
|
70
|
+
//-[ fire ]-----------------------------------------------------------------------------------------------------------------------
|
71
|
+
|
72
|
+
var _fInit = function () {
|
73
|
+
console.log('<_fInit>');
|
74
|
+
|
75
|
+
$links = $(css_selector);
|
76
|
+
_decorateLinks();
|
77
|
+
};
|
78
|
+
|
79
|
+
_fInit();
|
80
|
+
}
|
81
|
+
|
82
|
+
$(document).ready(function() {
|
83
|
+
var callbackDecorator = new CallbackDecorator();
|
84
|
+
});
|
@@ -15,6 +15,23 @@
|
|
15
15
|
input {
|
16
16
|
margin-left: 44px;
|
17
17
|
width: 151px;
|
18
|
+
|
19
|
+
&::-webkit-input-placeholder {
|
20
|
+
color: #c3c3c3;
|
21
|
+
}
|
22
|
+
|
23
|
+
&:-moz-placeholder { /* Firefox 18- */
|
24
|
+
color: #c3c3c3;
|
25
|
+
}
|
26
|
+
|
27
|
+
&::-moz-placeholder { /* Firefox 19+ */
|
28
|
+
color: #c3c3c3;
|
29
|
+
}
|
30
|
+
|
31
|
+
&:-ms-input-placeholder {
|
32
|
+
color: #c3c3c3;
|
33
|
+
}
|
34
|
+
|
18
35
|
}
|
19
36
|
input[type=text] {
|
20
37
|
border-radius: 0 !important;
|
@@ -23,7 +40,7 @@
|
|
23
40
|
|
24
41
|
.has-error {
|
25
42
|
input {
|
26
|
-
border: 2px
|
43
|
+
border: 2px solid rgba(255, 153, 0, 0.67) !important;
|
27
44
|
}
|
28
45
|
}
|
29
46
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'c80_lazy_images'
|
2
|
+
|
3
|
+
module C80Callback
|
4
|
+
class ApplicationController < ActionController::Base
|
5
|
+
|
6
|
+
helper C80LazyImages::Engine.helpers
|
7
|
+
|
8
|
+
protect_from_forgery with: :exception
|
9
|
+
|
10
|
+
# обрабатываем запрос от `.c80_callback_show_popup` кнопок за popup формой
|
11
|
+
def callback_popup
|
12
|
+
respond_to do |format|
|
13
|
+
format.js
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module C80Callback
|
2
|
+
class MessagesController < ActionController::Base
|
3
|
+
|
4
|
+
protect_from_forgery with: :exception
|
5
|
+
|
6
|
+
# на этот скрипт уходят все сообщения с форм обратной связи, затем отправляется почта владельцу сайта
|
7
|
+
def callback_message
|
8
|
+
|
9
|
+
m = Cmessage.new(cmessage_params)
|
10
|
+
|
11
|
+
respond_to do |format|
|
12
|
+
|
13
|
+
if m.save
|
14
|
+
|
15
|
+
format.js
|
16
|
+
CallbacksMailer.send_email(m, 'Пользователь сайта просит перезвонить').deliver
|
17
|
+
else
|
18
|
+
Rails.logger.debug "[TRACE] <MessagesController.callback_message> errors: #{m.errors}"
|
19
|
+
format.js { render json: m.errors, status: :unprocessable_entity }
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
# на этот скрипт уходят все сообщения с простых форм заказа обратного звонка
|
27
|
+
def callback_message_simple
|
28
|
+
|
29
|
+
m = Cmessage.new(cmessage_params)
|
30
|
+
|
31
|
+
respond_to do |format|
|
32
|
+
|
33
|
+
if m.save
|
34
|
+
format.js
|
35
|
+
CallbacksMailer.send_email(m, 'Пользователь сайта просит перезвонить').deliver
|
36
|
+
else
|
37
|
+
Rails.logger.debug "[TRACE] <MessagesController.callback_message_simple> errors: #{m.errors.as_json}"
|
38
|
+
format.js { render json: m.errors, status: :unprocessable_entity }
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
def cmessage_params
|
46
|
+
params.require(:cmessage).permit(:name, :mobile, :kapcha)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -1,10 +1,34 @@
|
|
1
1
|
module C80Callback
|
2
2
|
module AppHelper
|
3
|
+
|
4
|
+
# отрисовка "упрощённой" формы "заказать обратный звонок"
|
3
5
|
def simple_callback_form
|
4
6
|
render :partial => 'c80_callback/shared/callback_simple_form',
|
5
7
|
:locals => {
|
6
|
-
:
|
8
|
+
:cmessage => Cmessage.new
|
7
9
|
}
|
8
10
|
end
|
11
|
+
|
12
|
+
# отрисовка полной формы 'перезвоните мне', завёрнутой в bootstrap modal окно
|
13
|
+
def render_popup_callback
|
14
|
+
render :partial => 'c80_callback/shared/popup',
|
15
|
+
:locals => {
|
16
|
+
title: I18n.t('c80_callback.popup_callback.title'),
|
17
|
+
content: _render_full_contact_form
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
# отрисовка success-сообщения, завёрнутого в bootstrap modal окно
|
22
|
+
def render_popup_ok(m='')
|
23
|
+
m = m.present? ? m : I18n.t('c80_callback.popup_ok.message')
|
24
|
+
|
25
|
+
render :partial => 'c80_callback/shared/popup',
|
26
|
+
:locals => {
|
27
|
+
title: I18n.t('c80_callback.popup_ok.title'),
|
28
|
+
content: I18n.t('c80_callback.popup_ok.content')
|
29
|
+
}
|
30
|
+
|
31
|
+
end
|
32
|
+
|
9
33
|
end
|
10
34
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module C80Callback
|
2
|
+
module Inner
|
3
|
+
module ModalHelper
|
4
|
+
|
5
|
+
def _render_bs_modal(content='', title='')
|
6
|
+
render :partial => 'c80_callback/shared/inner/modal/bs_modal',
|
7
|
+
:locals => {
|
8
|
+
title: title,
|
9
|
+
content: content,
|
10
|
+
close_label: 'Закрыть'
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module C80Callback
|
2
|
+
class CallbacksMailer < ActionMailer::Base
|
3
|
+
|
4
|
+
default from: Proc.new { SiteProp.first.mail_from },
|
5
|
+
to: Proc.new { SiteProp.first.mail_to }
|
6
|
+
|
7
|
+
def send_email(message, subject)
|
8
|
+
@message = format_message(message)
|
9
|
+
|
10
|
+
puts '<CallbackMailer.send_mess> Отправляем сообщение.'
|
11
|
+
mail(subject: subject) do |format|
|
12
|
+
format.html { render 'mail_letter' }
|
13
|
+
end
|
14
|
+
|
15
|
+
#puts "#{SiteProps.first.mail_to}"
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def format_message(message)
|
21
|
+
result = "<br> • Имя: #{message.name}"
|
22
|
+
result += "<br> • Email: #{message.mobile}"
|
23
|
+
result
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module C80Callback
|
2
|
+
|
3
|
+
class Cmessage < ActiveRecord::Base
|
4
|
+
|
5
|
+
validates :name,
|
6
|
+
presence: true,
|
7
|
+
length: { in: 1..30 }
|
8
|
+
|
9
|
+
validates :mobile,
|
10
|
+
presence: true,
|
11
|
+
length: { in: 1..30 }
|
12
|
+
|
13
|
+
validates_format_of :mobile,
|
14
|
+
:with => /\A^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$\Z/i
|
15
|
+
|
16
|
+
# validates_with CmessageValidator
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module C80Callback
|
2
|
+
class CmessageValidator < ActiveModel::Validator
|
3
|
+
|
4
|
+
def validate(record)
|
5
|
+
|
6
|
+
unless record.errors.present?
|
7
|
+
|
8
|
+
unless record.name.present?
|
9
|
+
record.errors[:name] = 'Укажите, пожалуйста, Ваше имя'
|
10
|
+
end
|
11
|
+
|
12
|
+
if record.mobile.present?
|
13
|
+
|
14
|
+
if record.mobile[/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/].present?
|
15
|
+
else
|
16
|
+
record.errors[:mobile] = 'Укажите, пожалуйста, корректный номер телефона'
|
17
|
+
end
|
18
|
+
|
19
|
+
else
|
20
|
+
record.errors[:mobile] = 'Укажите номер телефона'
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%# это приходит в ответ на запрос формы, завёрнутой в popup (такие запросы отправляют кнопки, обработанные callbackDecorator) %>
|
2
|
+
|
3
|
+
var $body = $('body');
|
4
|
+
|
5
|
+
// вставим окно
|
6
|
+
var html_str = "<%= j render_popup_callback %>";
|
7
|
+
var $m = $(html_str);
|
8
|
+
$body.append($m);
|
9
|
+
|
10
|
+
// покажем окно
|
11
|
+
$('#c80_callback_bs_modal')
|
12
|
+
.modal('show')
|
13
|
+
.on('hidden.bs.modal', function () {
|
14
|
+
$(this).remove();
|
15
|
+
//console.log($(this));
|
16
|
+
});
|
17
|
+
|
18
|
+
// настроим форму
|
19
|
+
var $form = $("form#form_callback");
|
20
|
+
$form.bind("ajax:error", function (event, data, status, xhr) {
|
21
|
+
$form.render_form_errors($.parseJSON(data.responseText));
|
22
|
+
});
|
23
|
+
$form.modal_success();
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= @message.html_safe %>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%# это приходит в ответ на успешную отправку сообщения из "полной" формы обратной связи в модальном окне %>
|
2
|
+
|
3
|
+
$('#form_callback').modal_success();
|
4
|
+
$('#c80_callback_bs_modal').modal('hide');
|
5
|
+
|
6
|
+
setTimeout(function () {
|
7
|
+
var $body = $('body');
|
8
|
+
|
9
|
+
// вставим окно
|
10
|
+
var html_str = "<%= j render_popup_ok %>";
|
11
|
+
var $m = $(html_str);
|
12
|
+
$body.append($m);
|
13
|
+
|
14
|
+
// покажем окно
|
15
|
+
$('#c80_callback_bs_modal')
|
16
|
+
.modal('show')
|
17
|
+
.on('hidden.bs.modal', function () {
|
18
|
+
$(this).remove();
|
19
|
+
//console.log($(this));
|
20
|
+
})
|
21
|
+
|
22
|
+
|
23
|
+
}, 500);
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%# это приходит в ответ на успешную отправку сообщения из "простой" формы обратной связи %>
|
2
|
+
|
3
|
+
$('#form_callback_simple').modal_success();
|
4
|
+
|
5
|
+
setTimeout(function () {
|
6
|
+
var $body = $('body');
|
7
|
+
|
8
|
+
// вставим окно
|
9
|
+
var html_str = "<%= j render_popup_ok %>";
|
10
|
+
var $m = $(html_str);
|
11
|
+
$body.append($m);
|
12
|
+
|
13
|
+
// покажем окно
|
14
|
+
$('#c80_callback_bs_modal')
|
15
|
+
.modal('show')
|
16
|
+
.on('hidden.bs.modal', function () {
|
17
|
+
$(this).remove();
|
18
|
+
//console.log($(this));
|
19
|
+
})
|
20
|
+
|
21
|
+
|
22
|
+
}, 200);
|
@@ -1,12 +1,12 @@
|
|
1
1
|
|
2
2
|
<div class="form_container callback_simple_form">
|
3
3
|
|
4
|
-
<%= form_for :
|
5
|
-
:url => '/
|
4
|
+
<%= form_for :cmessage,
|
5
|
+
:url => '/callback_message_simple',
|
6
6
|
:remote => true,
|
7
7
|
html: {
|
8
8
|
:role => :form,
|
9
|
-
:id => '
|
9
|
+
:id => 'form_callback_simple',
|
10
10
|
:data => {
|
11
11
|
:model => 'cmessage'
|
12
12
|
}
|
@@ -14,19 +14,17 @@
|
|
14
14
|
|
15
15
|
<div class="form-group">
|
16
16
|
<%= f.text_field :name,
|
17
|
-
:value => 'Имя',
|
18
17
|
:class => 'form-control',
|
19
|
-
:
|
20
|
-
:
|
18
|
+
:maxlength => 30,
|
19
|
+
:placeholder => 'Ваше имя'
|
21
20
|
%>
|
22
21
|
</div>
|
23
22
|
|
24
23
|
<div class="form-group">
|
25
24
|
<%= f.text_field :mobile,
|
26
|
-
:value => 'Телефон',
|
27
25
|
:class => 'form-control',
|
28
|
-
:
|
29
|
-
:
|
26
|
+
:maxlength => 30,
|
27
|
+
:placeholder => 'Номер телефона'
|
30
28
|
%>
|
31
29
|
</div>
|
32
30
|
|
@@ -49,9 +47,10 @@
|
|
49
47
|
<script>
|
50
48
|
$(document).ready(function(){
|
51
49
|
|
52
|
-
var $form = $("form#
|
50
|
+
var $form = $("form#form_callback_simple");
|
53
51
|
|
54
52
|
$form.bind("ajax:error",function(event, data, status, xhr){
|
53
|
+
console.log('!');
|
55
54
|
$form.render_form_errors( $.parseJSON(data.responseText) );
|
56
55
|
});
|
57
56
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
|
2
|
+
<div class="full_contact_form">
|
3
|
+
|
4
|
+
<%= form_for :cmessage,
|
5
|
+
:url => '/callback_message',
|
6
|
+
:remote => true,
|
7
|
+
html: {
|
8
|
+
:role => :form,
|
9
|
+
:id => 'form_callback', #-> callback_message.js.erb uses this ID
|
10
|
+
:data => {
|
11
|
+
:model => 'cmessage'
|
12
|
+
}
|
13
|
+
} do |f| %>
|
14
|
+
|
15
|
+
<div class="form-group">
|
16
|
+
<%= f.label :name, 'Ваше имя', class: 'control-label' %>
|
17
|
+
<%= f.text_field :name,
|
18
|
+
:class => 'form-control',
|
19
|
+
:maxlength => 30
|
20
|
+
%>
|
21
|
+
<span class="help-block col-md-12"></span>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class="form-group">
|
25
|
+
<%= f.label :mobile, 'Номер телефона', class: 'control-label' %>
|
26
|
+
<%= f.text_field :mobile,
|
27
|
+
:class => 'form-control',
|
28
|
+
:maxlength => 30
|
29
|
+
%>
|
30
|
+
<span class="help-block col-md-12"></span>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<div class="form-group kapcha">
|
34
|
+
<%= f.text_field :kapcha, class: 'form-control', :maxlength => 30 %>
|
35
|
+
</div>
|
36
|
+
|
37
|
+
<div class="actions">
|
38
|
+
<%= f.submit 'Перезвоните мне',
|
39
|
+
class: 'btn btn-primary',
|
40
|
+
data: {
|
41
|
+
disable_with: 'Отправляется...'
|
42
|
+
}
|
43
|
+
%>
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<% end %>
|
47
|
+
|
48
|
+
<script>
|
49
|
+
$(document).ready(function(){
|
50
|
+
|
51
|
+
var $form = $("form#form_callback");
|
52
|
+
|
53
|
+
$form.bind("ajax:error",function(event, data, status, xhr){
|
54
|
+
$form.render_form_errors( $.parseJSON(data.responseText) );
|
55
|
+
});
|
56
|
+
|
57
|
+
$form.modal_success();
|
58
|
+
|
59
|
+
$form.find("input").each(function() {
|
60
|
+
$(this).blur();
|
61
|
+
})
|
62
|
+
|
63
|
+
});
|
64
|
+
</script>
|
65
|
+
|
66
|
+
</div>
|
67
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<!-- Modal -->
|
2
|
+
<div class="modal fade" id="c80_callback_bs_modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
|
3
|
+
<div class="modal-dialog" role="document">
|
4
|
+
<div class="modal-content">
|
5
|
+
<div class="modal-header">
|
6
|
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
7
|
+
<h4 class="modal-title" id="myModalLabel"><%= title %></h4>
|
8
|
+
</div>
|
9
|
+
<div class="modal-body">
|
10
|
+
<%= content.html_safe %>
|
11
|
+
</div>
|
12
|
+
<div class="modal-footer">
|
13
|
+
<button type="button" class="btn btn-default" data-dismiss="modal"><%= close_label %></button>
|
14
|
+
<!--<button type="button" class="btn btn-primary">Save changes</button>-->
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
</div>
|
18
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
ru:
|
2
|
+
activerecord:
|
3
|
+
errors:
|
4
|
+
models:
|
5
|
+
c80_callback/cmessage:
|
6
|
+
attributes:
|
7
|
+
name:
|
8
|
+
blank: 'Укажите, пожалуйста, Ваше имя'
|
9
|
+
mobile:
|
10
|
+
blank: 'Укажите телефон в любом формате'
|
11
|
+
invalid: 'Укажите, пожалуйста, корректный номер телефона'
|
12
|
+
c80_callback:
|
13
|
+
popup_callback:
|
14
|
+
title: 'Мы перезвоним на указанный номер'
|
15
|
+
popup_ok:
|
16
|
+
title: 'Ваше сообщение отправлено'
|
17
|
+
content: 'Мы перезвоним на указанный номер'
|
data/config/routes.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
C80Callback::Engine.routes.draw do
|
2
|
+
|
3
|
+
match 'callback_popup', :to => 'application#callback_popup', :via => :post # сюда обращается js за формой обратной связи, завёрнутой в bootstrap modal
|
4
|
+
match 'callback_message', :to => 'messages#callback_message', :via => :post # на этот скрипт уходят все сообщения с форм заказа обратного звонка, затем отправляется почта владельцу сайта
|
5
|
+
match 'callback_message_simple', :to => 'messages#callback_message_simple', :via => :post # на этот скрипт уходят все сообщения с простых форм заказа обратного звонка
|
6
|
+
|
7
|
+
end
|
data/lib/c80_callback/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: c80_callback
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- C80609A
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -65,16 +65,34 @@ files:
|
|
65
65
|
- LICENSE.txt
|
66
66
|
- README.md
|
67
67
|
- Rakefile
|
68
|
+
- app/assets/images/loader_button.gif
|
68
69
|
- app/assets/javascripts/c80_callback.js.coffee
|
69
|
-
- app/assets/javascripts/c80_callback/
|
70
|
+
- app/assets/javascripts/c80_callback/callback_decorator.js
|
70
71
|
- app/assets/stylesheets/c80_callback.scss
|
72
|
+
- app/assets/stylesheets/c80_callback/bs_modal.scss
|
73
|
+
- app/assets/stylesheets/c80_callback/c80_callback_progress.scss
|
71
74
|
- app/assets/stylesheets/c80_callback/callback_simple_form.scss
|
75
|
+
- app/controllers/c80_callback/application_controller.rb
|
76
|
+
- app/controllers/c80_callback/messages_controller.rb
|
72
77
|
- app/helpers/c80_callback/app_helper.rb
|
73
|
-
- app/
|
78
|
+
- app/helpers/c80_callback/inner/forms_helper.rb
|
79
|
+
- app/helpers/c80_callback/inner/modal_helper.rb
|
80
|
+
- app/mailers/c80_callback/callbacks_mailer.rb
|
81
|
+
- app/models/c80_callback/cmessage.rb
|
82
|
+
- app/models/c80_callback/cmessage_validator.rb
|
83
|
+
- app/views/c80_callback/application/callback_popup.js.erb
|
84
|
+
- app/views/c80_callback/callbacks_mailer/mail_letter.html.erb
|
85
|
+
- app/views/c80_callback/messages/callback_message.js.erb
|
86
|
+
- app/views/c80_callback/messages/callback_message_simple.js.erb
|
74
87
|
- app/views/c80_callback/shared/_callback_simple_form.html.erb
|
88
|
+
- app/views/c80_callback/shared/_popup.html.erb
|
89
|
+
- app/views/c80_callback/shared/inner/forms/_full_contact_form.html.erb
|
90
|
+
- app/views/c80_callback/shared/inner/modal/_bs_modal.html.erb
|
75
91
|
- bin/console
|
76
92
|
- bin/setup
|
77
93
|
- c80_callback.gemspec
|
94
|
+
- config/locales/ru.yml
|
95
|
+
- config/routes.rb
|
78
96
|
- db/migrate/20161115091010_create_c80_callback_cmessages.rb
|
79
97
|
- lib/c80_callback.rb
|
80
98
|
- lib/c80_callback/engine.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
var asdf = 'asdf';
|