c80_callback 0.1.0.1 → 0.1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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';
|