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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/loader_button.gif +0 -0
  3. data/app/assets/javascripts/c80_callback/callback_decorator.js +84 -0
  4. data/app/assets/stylesheets/c80_callback/bs_modal.scss +15 -0
  5. data/app/assets/stylesheets/c80_callback/c80_callback_progress.scss +3 -0
  6. data/app/assets/stylesheets/c80_callback/callback_simple_form.scss +18 -1
  7. data/app/controllers/c80_callback/application_controller.rb +18 -0
  8. data/app/controllers/c80_callback/messages_controller.rb +50 -0
  9. data/app/helpers/c80_callback/app_helper.rb +25 -1
  10. data/app/helpers/c80_callback/inner/forms_helper.rb +14 -0
  11. data/app/helpers/c80_callback/inner/modal_helper.rb +16 -0
  12. data/app/mailers/c80_callback/callbacks_mailer.rb +28 -0
  13. data/app/models/c80_callback/cmessage.rb +20 -0
  14. data/app/models/c80_callback/cmessage_validator.rb +28 -0
  15. data/app/views/c80_callback/application/callback_popup.js.erb +23 -0
  16. data/app/views/c80_callback/callbacks_mailer/mail_letter.html.erb +1 -0
  17. data/app/views/c80_callback/messages/callback_message.js.erb +23 -0
  18. data/app/views/c80_callback/messages/callback_message_simple.js.erb +22 -0
  19. data/app/views/c80_callback/shared/_callback_simple_form.html.erb +9 -10
  20. data/app/views/c80_callback/shared/_popup.html.erb +2 -0
  21. data/app/views/c80_callback/shared/inner/forms/_full_contact_form.html.erb +67 -0
  22. data/app/views/c80_callback/shared/inner/modal/_bs_modal.html.erb +18 -0
  23. data/config/locales/ru.yml +17 -0
  24. data/config/routes.rb +7 -0
  25. data/lib/c80_callback/version.rb +1 -1
  26. metadata +22 -4
  27. data/app/assets/javascripts/c80_callback/foo.js +0 -1
  28. data/app/models/c80_swiper/cmessage.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68666bcd57d2a970bf359324af696d6b3acd879e
4
- data.tar.gz: 1d6e0e8b5f1f49dd94050c46e11c691eed7d797a
3
+ metadata.gz: b4675644fb9518d3cb5bfca12415321643df921f
4
+ data.tar.gz: ceee84f0455f59c74d23f4203f05ddc10f91d5ac
5
5
  SHA512:
6
- metadata.gz: cad4e3a84c0895db29ea6183b06f66fb4d43beecbcabf5424fc20982378f419ffce4e9107b121bbb4401f229aa74c67ac99e38e71ab4a41e88aa6520e697cd1d
7
- data.tar.gz: 0e286f933166ad931a3f9145451bd27d022bb0dcd0059e95d543ef24d86f339db404582c0c200c0ec81caea88cc6743449600c8d6132f9fef9e7b74898f39197
6
+ metadata.gz: cfc84a2df9dd305fd774c149a3da106c4c257a3782fc2ba993092ffa47d5db1b4c6d37a8f562de1df8c1cdc5567f07cfdb9e9706b7ecede0e98c83bec9618fc5
7
+ data.tar.gz: 15b5e02c436a71b3062baa702dc650ab3cb6dc82474a96fc477952d73ebe185ff83e0d6a4e8a1247d1e39521d29ef5f64574c9b87866a8dc7d5400a266111865
@@ -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
+ });
@@ -0,0 +1,15 @@
1
+ div#c80_callback_bs_modal {
2
+
3
+ div.full_contact_form {
4
+
5
+ form#form_callback {
6
+
7
+ div.form-group {
8
+ clear: both;
9
+ }
10
+
11
+ }
12
+
13
+ }
14
+
15
+ }
@@ -0,0 +1,3 @@
1
+ .c80_callback_progress {
2
+ background: #ffffff url(image_path('loader_button.gif')) repeat 0 0;
3
+ }
@@ -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 red;
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
- :mess => Cmessage.new
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,14 @@
1
+ module C80Callback
2
+ module Inner
3
+ module FormsHelper
4
+
5
+ def _render_full_contact_form
6
+ render :partial => 'c80_callback/shared/inner/forms/full_contact_form',
7
+ :locals => {
8
+ cmessage: Cmessage.new
9
+ }
10
+ end
11
+
12
+ end
13
+ end
14
+ 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 :mess,
5
- :url => '/mess_phoneback',
4
+ <%= form_for :cmessage,
5
+ :url => '/callback_message_simple',
6
6
  :remote => true,
7
7
  html: {
8
8
  :role => :form,
9
- :id => 'form_phoneback',
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
- :onfocus => "if (this.value == 'Имя') this.value = '';",
20
- :onblur => "if (this.value == '') {this.value = 'Имя';}"
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
- :onfocus => "if (this.value == 'Телефон') this.value = '';",
29
- :onblur => "if (this.value == '') {this.value = 'Телефон';}"
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#form_phoneback");
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,2 @@
1
+ <% bs_modal = _render_bs_modal(content,title) %>
2
+ <%= bs_modal.html_safe %>
@@ -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">&times;</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: 'Мы перезвоним на указанный номер'
@@ -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
@@ -1,3 +1,3 @@
1
1
  module C80Callback
2
- VERSION = "0.1.0.1"
2
+ VERSION = "0.1.0.2"
3
3
  end
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.1
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-15 00:00:00.000000000 Z
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/foo.js
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/models/c80_swiper/cmessage.rb
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';
@@ -1,7 +0,0 @@
1
- module C80Callback
2
-
3
- class Cmessage < ActiveRecord::Base
4
-
5
- end
6
-
7
- end