c80_yax 0.1.0.17 → 0.1.0.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/c80_yax/frontend/item_color_selector/app.js +4 -1
  3. data/app/assets/javascripts/c80_yax/frontend/item_color_selector/item_color_selector.js +8 -0
  4. data/app/assets/javascripts/c80_yax/frontend/item_options/app.js +15 -0
  5. data/app/assets/javascripts/c80_yax/frontend/item_options/item_options.js +41 -0
  6. data/app/assets/javascripts/c80_yax/frontend/item_quantity_picker/app.js +4 -1
  7. data/app/assets/javascripts/c80_yax.js.coffee +2 -1
  8. data/app/assets/stylesheets/c80_yax.scss +2 -1
  9. data/app/decorators/c80_yax/item_decorator.rb +1 -1
  10. data/app/helpers/c80_yax/items/shared/buy_options_helper.rb +6 -2
  11. data/app/helpers/c80_yax/items/shared/color_selector_helper.rb +2 -1
  12. data/app/helpers/c80_yax/items/shared/quantity_picker_helper.rb +2 -2
  13. data/app/views/c80_yax/items/_buy_options.html.erb +11 -9
  14. data/app/views/c80_yax/items/_color_selector.html.erb +1 -1
  15. data/app/views/c80_yax/items/_quantity_picker.html.erb +1 -1
  16. data/engines/co/README.md +79 -0
  17. data/engines/co/app/assets/javascripts/co/_service/co_modal.js +39 -0
  18. data/engines/co/app/assets/javascripts/co/_service/cookies_service.js +55 -0
  19. data/engines/co/app/assets/javascripts/co/add_to_cart/actions/add_row_to_cart.js +17 -0
  20. data/engines/co/app/assets/javascripts/co/add_to_cart/button_add_to_cart.js +35 -0
  21. data/engines/co/app/assets/javascripts/co/add_to_cart/data_order_row.js +16 -0
  22. data/engines/co/app/assets/javascripts/co/add_to_cart/service/collect_data_for_row.js +33 -0
  23. data/engines/co/app/assets/javascripts/co/add_to_cart/xapp.js +17 -0
  24. data/engines/co/app/assets/javascripts/co/app.js +7 -0
  25. data/engines/co/app/assets/javascripts/co/cart_page/app.js +8 -0
  26. data/engines/co/app/assets/javascripts/co/cart_page/cart_page.js +41 -0
  27. data/engines/co/app/assets/javascripts/co/cart_page/cart_table.js +49 -0
  28. data/engines/co/app/assets/javascripts/co/cart_page/support/row_maker.js +38 -0
  29. data/engines/co/app/assets/javascripts/co.coffee +1 -0
  30. data/engines/co/app/assets/stylesheets/co/cart_page/_cart_button.scss +13 -0
  31. data/engines/co/app/assets/stylesheets/co/cart_page/bottom_row.scss +47 -0
  32. data/engines/co/app/assets/stylesheets/co/cart_page/cart_table.scss +88 -0
  33. data/engines/co/app/assets/stylesheets/co/modals/double_modal.scss +16 -0
  34. data/engines/co/app/assets/stylesheets/co.scss +1 -0
  35. data/engines/co/app/helpers/co/cart_page_helper.rb +7 -0
  36. data/engines/co/app/helpers/co/modals_helper.rb +11 -0
  37. data/engines/co/app/views/co/_cart_page.html.erb +41 -0
  38. data/engines/co/app/views/co/modals/_double_modal.html.erb +23 -0
  39. data/engines/co/lib/co/engine.rb +23 -0
  40. data/engines/co/lib/co/version.rb +3 -0
  41. data/engines/co/lib/co.rb +5 -0
  42. data/lib/c80_yax/version.rb +1 -1
  43. data/lib/c80_yax.rb +1 -0
  44. metadata +30 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b27cb43794e072755dc0e6619628eaebca9dfab5
4
- data.tar.gz: cb43a6459897d944f7f20132e48811dfd1ce52b6
3
+ metadata.gz: 7b913c8fef54a107aba57e59348d9ce469a96e02
4
+ data.tar.gz: d59d47ce6a4371c48f5c7e70ad7dd20fcdf114a4
5
5
  SHA512:
6
- metadata.gz: 7189f75edc61815e45465a882c22bd557592225b03b8cccb8e207afeb4386d33e4b5b3db0bd965cb19ec079ec3e10eda0246fec4c8bcf979389add3f1c410425
7
- data.tar.gz: b9ccc3788c03bb70478fadc1c3c965537b50d4456488ccc18bdec517b71b5d73cf1c817a79bd2eceb21b24f5651aa1d74712a36e8b200b91bdbe838e30a4aed5
6
+ metadata.gz: 2a68312e1c25af4fda7ede582dee1fb6eb697e331e43d13214288eab7df7c7fe399a747b81019ceb9422688659aa367c2e11895c594acad9eb7f842763ed228e
7
+ data.tar.gz: fe656f4d6f79951ad7eac7514b71fd8e9e856e39b434afb0448e068ebecaca0a7b2c0d95df52a74117f28e4934a571e4bba96be3646a89075f4759dd64345c5a
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ var ITEM_COLOR_SELECTOR = {};
4
+
3
5
  var _activate_color_selectors = function() {
4
6
  $('.item_color_selector').each(function() {
5
- new ItemColorSelector(this);
7
+ ITEM_COLOR_SELECTOR[$(this).data('id')] =
8
+ new ItemColorSelector(this);
6
9
  });
7
10
  };
8
11
 
@@ -6,6 +6,10 @@ var ItemColorSelector = function(wrapper) {
6
6
  var _$lic;
7
7
  var _sel_color;
8
8
 
9
+ var _get_sel_color = function() {
10
+ return _sel_color;
11
+ };
12
+
9
13
  var _set_sel_color = function(new_color) {
10
14
  _sel_color = new_color;
11
15
  };
@@ -36,4 +40,8 @@ var ItemColorSelector = function(wrapper) {
36
40
 
37
41
  _fInit(wrapper);
38
42
 
43
+ return {
44
+ get_cur_val: _get_sel_color
45
+ }
46
+
39
47
  };
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var ITEM_OPTIONS = {};
4
+
5
+ var _activate_item_options = function() {
6
+ $('.buy_options').each(function() {
7
+ ITEM_OPTIONS[$(this).data('id')] =
8
+ new ItemOptions(this);
9
+ });
10
+ };
11
+
12
+ $(document).ready(function() {
13
+ // alert(ItemQuantityPicker);
14
+ _activate_item_options();
15
+ });
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var ItemOptions = function (wrapper){
4
+
5
+ var _$wrapper;
6
+ var _cur_val = {
7
+
8
+ };
9
+
10
+ var _get_cur_val = function() {
11
+ return _cur_val;
12
+ };
13
+
14
+ var _fCollectOptions = function() {
15
+ _$wrapper.find('div.checkbox').each(function() {
16
+ var $t = $(this);
17
+ var tag = $t.data('tag');
18
+ var $inp = $t.find('input');
19
+ var val = $inp[0].checked;
20
+ _cur_val[tag] = val;
21
+ console.log('<_fCollectOptions> val = ' + val + ": " + tag);
22
+ });
23
+ console.log(_cur_val);
24
+ }
25
+
26
+ var _fInitBehaviour = function (){
27
+ _fCollectOptions();
28
+ };
29
+
30
+ var _fInit = function (wrapper){
31
+ _$wrapper = $(wrapper);
32
+ _fInitBehaviour();
33
+ };
34
+
35
+ _fInit(wrapper);
36
+
37
+ return {
38
+ get_cur_val: _get_cur_val
39
+ }
40
+
41
+ };
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ var ITEM_QUANTITY_PICKERS = {};
4
+
3
5
  var _activate_q_picker = function() {
4
6
  $('.quantity_picker').each(function() {
5
- new ItemQuantityPicker(this);
7
+ ITEM_QUANTITY_PICKERS[$(this).data('id')] =
8
+ new ItemQuantityPicker(this);
6
9
  });
7
10
  };
8
11
 
@@ -1 +1,2 @@
1
- #= require_tree ./c80_yax/frontend
1
+ #= require_tree ./c80_yax/frontend
2
+ #= require co
@@ -3,4 +3,5 @@
3
3
  @import 'c80_yax/lib_custom/**/*';
4
4
  @import 'c80_yax/elems/**/*';
5
5
  @import 'of';
6
- @import 'ti';
6
+ @import 'ti';
7
+ @import 'co';
@@ -89,7 +89,7 @@ module C80Yax
89
89
  res = ''
90
90
  props[:titles].each_with_index do |title, i|
91
91
  e = "<p data-title='#{title}' class='old'><span class='pvalue bold'>#{props[:values_old][i]}</span> <span class='puom'>#{_uom(props[:uoms][i])}</span></p>" # 1212,80 руб
92
- e += "<p data-title='#{title}'><span class='pvalue bold'>#{props[:values][i]}</span> <span class='puom'>#{_uom(props[:uoms][i])}</span></p>" # 1212,80 руб
92
+ e += "<p data-title='#{title}' class='cur'><span class='pvalue bold'>#{props[:values][i]}</span> <span class='puom'>#{_uom(props[:uoms][i])}</span></p>" # 1212,80 руб
93
93
  e = "<li>#{e}</li>"
94
94
  res += e
95
95
  end
@@ -3,29 +3,33 @@ module C80Yax
3
3
  module Shared
4
4
  module BuyOptionsHelper
5
5
 
6
- def render_buy_options
6
+ def render_buy_options(item)
7
7
 
8
8
  elems = [
9
9
  {
10
10
  label: 'Нестандартные цвета<br>(+20% к стоимости)',
11
+ tag: 'super_colors',
11
12
  value: '1',
12
13
  style: 'small'
13
14
  },
14
15
  {
15
16
  label: 'Цвета с металлическим блеском<br>(+20% к стоимости)',
17
+ tag: 'metallic',
16
18
  value: '2',
17
19
  style: 'small'
18
20
  },
19
21
  {
20
22
  label: 'Заказать доставку',
21
23
  value: '3',
24
+ tag: 'delivery',
22
25
  style: 'huge'
23
26
  }
24
27
  ]
25
28
 
26
29
  render :partial => 'c80_yax/items/buy_options',
27
30
  :locals => {
28
- elems: elems
31
+ elems: elems,
32
+ item: item
29
33
  }
30
34
  end
31
35
 
@@ -8,7 +8,8 @@ module C80Yax
8
8
  unless colors.size.zero?
9
9
  render :partial => 'c80_yax/items/color_selector',
10
10
  :locals => {
11
- colors: colors
11
+ colors: colors,
12
+ item: item
12
13
  }
13
14
  end
14
15
  end
@@ -3,10 +3,10 @@ module C80Yax
3
3
  module Shared
4
4
  module QuantityPickerHelper
5
5
 
6
- def render_quantity_picker
6
+ def render_quantity_picker(item)
7
7
  render :partial => 'c80_yax/items/quantity_picker',
8
8
  :locals => {
9
-
9
+ item: item
10
10
  }
11
11
  end
12
12
 
@@ -1,9 +1,11 @@
1
- <% elems.each do |elem| %>
2
- <div class="checkbox <%=elem[:style]%>">
3
- <label>
4
- <input type="checkbox" value="<%=elem[:value]%>" checked>
5
- <span class="cr"><i class="cr-icon fa fa-check"></i></span>
6
- <%= elem[:label].html_safe %>
7
- </label>
8
- </div>
9
- <% end %>
1
+ <div class="buy_options" data-id="<%= item.id %>">
2
+ <% elems.each do |elem| %>
3
+ <div data-tag="<%=elem[:tag]%>" data-label="<%=elem[:label]%>" class="checkbox <%=elem[:style]%>">
4
+ <label>
5
+ <input type="checkbox" checked>
6
+ <span class="cr"><i class="cr-icon fa fa-check"></i></span>
7
+ <%= elem[:label].html_safe %>
8
+ </label>
9
+ </div>
10
+ <% end %>
11
+ </div>
@@ -1,4 +1,4 @@
1
- <ul class="item_color_selector">
1
+ <ul class="item_color_selector" data-id="<%= item.id %>">
2
2
  <li class="caption">Цвет: </li>
3
3
  <% colors.each do |color| %>
4
4
  <% style = "style='background-color: #{color.value}'".html_safe %>
@@ -1,4 +1,4 @@
1
- <div class="quantity_picker">
1
+ <div class="quantity_picker" data-id="<%=item.id%>">
2
2
  <span class="caption">Количество: </span>
3
3
  <%= link_to '-', '#', class: 'l' %>
4
4
  <input name="val" id="val" value="1">
@@ -0,0 +1,79 @@
1
+ #### При клике по кнопке "добавить в корзину":
2
+ * создаётся js объект, содержащий данные:
3
+ - id товара
4
+ - кол-во товара
5
+ - цвет
6
+ - цена
7
+ - путь до картинки
8
+ - путь до товара
9
+ - заказать доставку?
10
+ - нестандартные цвета?
11
+ - металлик?
12
+ * этот объект помещается в массив, который хранится в cookie
13
+ * текущий набор объектов в cookie есть список товаров *корзины*
14
+ - когда заказ оформляется, этот массив отправляется на сервер
15
+ as-is, сервер на основе их создает объекты модели *OrderRow*
16
+ * состояние формы заказа товара сбрасывается в начальное
17
+ * должно появиться оповещение о том, что в корзину добавлен товар
18
+ * в виджете-кнопке должно обновиться количество
19
+
20
+ #### При клике по виджету-кнопке "корзина":
21
+ * открывается новая страница, содержащая таблицу и форму.
22
+ * таблица:
23
+ - картинка-ссылка до товара, новое окно
24
+ - название
25
+ - цвет
26
+ - компонент выбора количества
27
+ - сумма
28
+ - кнопка "удалить"
29
+ * строка "итого"
30
+ * чекбокс "заказать доставку"
31
+ * кнопка "очистить корзину"
32
+ * форма:
33
+ * ФИО
34
+ * Мобильный
35
+ * Дата получения
36
+ * Населённый пункт
37
+
38
+ * когда нажимаем кнопку "отправить", уходит письмо с текстом вида:
39
+
40
+ ```
41
+ Заказ:
42
+ * Снегозадержатель, цвет, кол-во, сумма (опции)
43
+ * Снегозадержатель, цвет, кол-во, сумма (опции)
44
+ - доставка?
45
+ - фио
46
+ - мобильный
47
+ - дата получения
48
+ - населённый пункт
49
+ ```
50
+
51
+ * перед тем, как уходит письмо, создаётся Объект `order` содержащий `rows`
52
+ - [ ] создать модель Order
53
+ - [ ] создать модель Row
54
+ - [ ]
55
+
56
+ # Todo Добавить в Корзину
57
+
58
+ * [X] Лабаем js-класс `DataOrderRow`
59
+ * [ ] Вешаем js на клик по кнопке "Добавить в корзину". Он должен:
60
+ - [X] Собирать инфу с формы
61
+ - [X] id:
62
+ - [X] необходимо на моменте генерации страницы вшивать
63
+ куда-нибудь `id` товара
64
+ - [X] количество:
65
+ - [X] добавить в js-компонент `id` товара (среди множества виджетов необходимо распознать релевантный)
66
+ - [X] добавить и испытать метод, выдающий текущий `value`
67
+ - [X] цвет:
68
+ - [X] добавить в js-компонент `id` товара (среди множества виджетов необходимо распознать релевантный)
69
+ - [X] добавить и испытать метод, выдающий текущий `value`
70
+ - [X] опции:
71
+ - [X] реализовать js-компонент "опции"
72
+ - [X] добавить в js-компонент `id` товара (среди множества виджетов необходимо распознать релевантный)
73
+ - [X] добавить и испытать метод, выдающий текущий `value`
74
+ - [ ] На основе собранной инфы должен создавать объект `DataOrderRow` и помещать его в cookie.
75
+ - [ ] Находить на странице виджет-кнопку "корзина" и обновлять там количество `DataOrderRow` в корзине
76
+ - [ ] реализовать js-компонент 'корзина'
77
+ - [ ] Публичный setter: `set_count`
78
+ - [X] Должен появиться `bootstrap modal` с кнопками "продолжить покупки", "перейти в корзину"
79
+
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ // показывает окна
4
+
5
+ var CoModal = function() {
6
+
7
+ var _modals = {};
8
+
9
+ var _init_modal = function(modal_name) {
10
+ var $modal;
11
+
12
+ // if (_modals[modal_name] === undefined) {
13
+ $modal = $('#' + modal_name + '_modal');
14
+ $modal.modal();
15
+ // _modals[modal_name] = $modal;
16
+ // $modal.on('hidden.bs.modal', function () {
17
+ // $modal.remove();
18
+ // });
19
+ // }
20
+
21
+ // $modal = _modals[modal_name];
22
+
23
+ return $modal;
24
+ };
25
+
26
+ // _double_modal.html.erb
27
+ this.showDouble = function(message) {
28
+ console.log('<showDouble> message: ' + message);
29
+ var $modal = _init_modal('double');
30
+ $modal.find('.modal-body').text(message);
31
+ $modal.find('.btn_close').on('click', function(e) {
32
+ $modal.modal('hide');
33
+ });
34
+ $modal.find('.btn_go_to_cart').on('click', function(e) {
35
+ window.location.href = '/cart';
36
+ });
37
+ $modal.show();
38
+ }
39
+ };
@@ -0,0 +1,55 @@
1
+ var CookiesService = function() {
2
+
3
+ var _create_cookie = function(name, value, days) {
4
+ var expires = '';
5
+
6
+ if (days) {
7
+ var date = new Date();
8
+ date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
9
+ expires = "; expires=" + date.toGMTString();
10
+ }
11
+
12
+ document.cookie = encodeURIComponent(name) + '=' + JSON.stringify(value) + expires + "; path=/";
13
+
14
+ };
15
+
16
+ var _read_cookie = function(name) {
17
+ // console.log('<CookiesService._read_cookie> name = ' + name);
18
+ var nameEQ = encodeURIComponent(name) + "=";
19
+ var ca = document.cookie.split(';');
20
+ for (var i = 0; i < ca.length; i++) {
21
+ var c = ca[i];
22
+ while (c.charAt(0) === ' ') c = c.substring(1, c.length);
23
+ if (c.indexOf(nameEQ) === 0) {
24
+ var s = JSON.parse(c.substring(nameEQ.length, c.length));
25
+ // console.log('<CookiesService._read_cookie> subs: ' + s);
26
+ return s;
27
+ }
28
+ }
29
+ return null;
30
+ };
31
+
32
+ this.cart_push = function(row_as_hash) {
33
+ var cart = _read_cookie('cart3');
34
+ if (cart === null) cart = [];
35
+ cart.push(row_as_hash);
36
+ _create_cookie('cart3', cart, 256);
37
+ console.log('<CookiesService.cart_push>');
38
+ };
39
+
40
+ this.cart_get = function() {
41
+ var cart = _read_cookie('cart3');
42
+ return cart;
43
+ }
44
+
45
+ this.cart_clean = function() {
46
+ console.log('<cart_clean>');
47
+ var cart = _read_cookie('cart3');
48
+ if (cart === null) return;
49
+ cart = [];
50
+ _create_cookie('cart3', cart, 256);
51
+ };
52
+
53
+
54
+
55
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ // добавляет
4
+ var AddRowToCart = function(item_id) {
5
+ this.call = function() {
6
+ var row_as_hash = new CollectDataForRow(item_id).call();
7
+ console.log("<AddRowToCart.call> row_as_hash: " + row_as_hash);
8
+ console.log(row_as_hash);
9
+
10
+ coo.cart_push(row_as_hash);
11
+
12
+ return {
13
+ result: true,
14
+ message: row_as_hash['q'] + ' товаров добавлено в корзину.'
15
+ }
16
+ }
17
+ };
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ var ButtonAddToCart = function(selector) {
4
+
5
+ var _$btn;
6
+ var _item_id;
7
+
8
+ var _onClickBtn = function(e) {
9
+ console.log('<_onClickBtn>');
10
+ e.preventDefault();
11
+ var c = new AddRowToCart(_item_id).call();
12
+ if (c.result) {
13
+ // com.showDouble(c.message);
14
+ com.showDouble('Продолжить покупки?');
15
+ }
16
+ };
17
+
18
+ var _fInitBehaviour = function (){
19
+ if (_$btn.length <= 0) return;
20
+ _$btn.on('click', _onClickBtn);
21
+ };
22
+
23
+ /**
24
+ * selector = "add_to_bucket_#{item.id}"
25
+ * @param selector
26
+ */
27
+ var _fInit = function (selector){
28
+ _$btn = $(selector);
29
+ _item_id = _$btn.data('id');
30
+ _fInitBehaviour();
31
+ };
32
+
33
+ _fInit(selector);
34
+
35
+ };
@@ -0,0 +1,16 @@
1
+ var DataOrderRow = function (){
2
+ data = {
3
+ id: 0,
4
+ title: '',
5
+ quantity: 0,
6
+ color: '#ffffff',
7
+ price: 0,
8
+ image_url: '',
9
+ item_url: '',
10
+ mark_order: true,
11
+ mark_metallic: false,
12
+ mark_super_colors: false
13
+ };
14
+
15
+ return data;
16
+ };
@@ -0,0 +1,33 @@
1
+ // собирает данные с формы просмотра/заказа товара, на основе которых
2
+ // создастся row to cart
3
+
4
+ var CollectDataForRow = function(item_id) {
5
+ this.call = function() {
6
+ console.log("<CollectDataForRow.call> item_id = " + item_id);
7
+
8
+ var $item_show = $('.item_show_'+item_id);
9
+
10
+ var q = ITEM_QUANTITY_PICKERS[item_id].get_cur_val();
11
+ var price = q * Number($item_show.find('.price_props p.cur span.pvalue').text().split(',').join('.'));
12
+ var title = $item_show.data('title');
13
+ var color = ITEM_COLOR_SELECTOR[item_id].get_cur_val();
14
+ var options = ITEM_OPTIONS[item_id].get_cur_val();
15
+
16
+ return {
17
+ id: item_id,
18
+ title: title,
19
+ q: q,
20
+ color: color,
21
+ price: price,
22
+ image_url: $item_show.data('image_url'),
23
+ item_url: $item_show.data('item_url'),
24
+ options: {
25
+ mark_delivery: options['delivery'],
26
+ mark_super_colors: options['super_colors'],
27
+ mark_metallic: options['metallic']
28
+ }
29
+ }
30
+
31
+ }
32
+
33
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var $s;
4
+
5
+ var _activate_cart_button = function() {
6
+ $s.each(function() {
7
+ new ButtonAddToCart(this);
8
+ });
9
+ };
10
+
11
+ $(document).ready(function() {
12
+ $s = $('.add_to_bucket');
13
+ if ($s.length !== 0) {
14
+ // alert(ButtonAddToCart);
15
+ _activate_cart_button();
16
+ }
17
+ });
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ var com;
4
+ var coo;
5
+
6
+ com = new CoModal();
7
+ coo = new CookiesService();
@@ -0,0 +1,8 @@
1
+ var $cart_page;
2
+
3
+ $(document).ready(function() {
4
+ $cart_page = $('div#cart_page');
5
+ if ($cart_page.length !== 0) {
6
+ new CartPage($cart_page);
7
+ }
8
+ });
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var CartPage = function($cart_page) {
4
+ var _$cart_page;
5
+ var _cart_table;
6
+ var _$clear_btn;
7
+ var _$result_price_val;
8
+ var _fill_table = function() {
9
+ var cart = coo.cart_get();
10
+ for (var i = 0; i < cart.length; i++) {
11
+ _cart_table.add_row(cart[i]);
12
+ }
13
+ };
14
+ var _calc_result_price = function() {
15
+ var cart = coo.cart_get();
16
+ var result = 0;
17
+ for (var i = 0; i < cart.length; i++) {
18
+ result += Number(cart[i]['price']);
19
+ }
20
+ _$result_price_val.text(result);
21
+ };
22
+ var _on_click_clear = function(e) {
23
+ e.preventDefault();
24
+ _cart_table.clear();
25
+ coo.cart_clean();
26
+ };
27
+ var _fInitBehaviour = function (){
28
+ _fill_table();
29
+ _calc_result_price();
30
+ _$clear_btn.on('click', _on_click_clear);
31
+
32
+ };
33
+ var _fInit = function($cart_page) {
34
+ _$cart_page = $cart_page;
35
+ _cart_table = new CartTable(_$cart_page.find('table.cart_table'));
36
+ _$clear_btn = $cart_page.find('.clear_btn');
37
+ _$result_price_val = $cart_page.find('.bottom_row .result .val');
38
+ _fInitBehaviour();
39
+ };
40
+ _fInit($cart_page);
41
+ };
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var CartTable = function ($table){
4
+
5
+ var _rows;
6
+ var _$table;
7
+ var _$tbody;
8
+ var _support;
9
+
10
+ //<editor-fold desc="// Инициализация">
11
+ var _fInitBehaviour = function (){
12
+ };
13
+ var _fInit = function ($table){
14
+ _$table = $table;
15
+ _$tbody = _$table.find('tbody');
16
+ _support = new RowMaker();
17
+ _rows = [];
18
+ _fInitBehaviour();
19
+ };
20
+ _fInit($table);
21
+ //</editor-fold>
22
+
23
+ this.add_row = function(row_hash) {
24
+ _rows.push(row_hash);
25
+ var $row = $(_support.make_row_htmlstr(row_hash));
26
+ _$tbody.append($row);
27
+ _activate_q_picker();
28
+ };
29
+
30
+ this.clear = function() {
31
+ var i, n = _rows.length;
32
+ for (i = 0; i<n; i++) {
33
+ $('.tr_' + _rows[i]['id']).remove();
34
+ }
35
+ _rows = [];
36
+ };
37
+
38
+ this.remove_row = function(id) {
39
+ var i, n = _rows.length;
40
+ for (i = n; i>=0; i--) {
41
+ if (_rows[i]['id'] === id) {
42
+ _rows.splice(i, 1);
43
+ break;
44
+ }
45
+ }
46
+ $('.tr_'+id).remove();
47
+ };
48
+
49
+ };
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ var RowMaker = function() {
4
+
5
+ var _ROW = '<tr class="tr_{{ id }}">' +
6
+ '<td class="image">' +
7
+ '<a class="lazy-image-wrapper" href=" {{ item_url }}" target="_blank" title="{{ title }}">' +
8
+ '<img data-original="{{ image_url }}" alt="{{ title }}">' +
9
+ '</a>' +
10
+ '</td>' +
11
+ '<td class="title">{{ title }}</td>' +
12
+ '<td class="color">' +
13
+ '<ul class="item_color_selector" data-id="{{ id }}">' +
14
+ '<li style="background-color:{{ color }}" class="c"></li>' +
15
+ '</ul>' +
16
+ '</td>' +
17
+ '<td class="q">' +
18
+ '<div class="quantity_picker" data-id="{{ id }}">' +
19
+ '<a href="#" class="l">-</a>' +
20
+ '<input name="val" id="val" value="{{ q }}">' +
21
+ '<a href="#" class="g">+</a>' +
22
+ '</div>' +
23
+ '</td>' +
24
+ '<td class="price">{{ price }}</td>' +
25
+ '<td class="actions"><a title="Удалить" class="del_action" data-id="{{ id }}">Удалить</a></td>' +
26
+ '</tr>';
27
+
28
+ this.make_row_htmlstr = function(obj) {
29
+ var res = _ROW;
30
+ var al;
31
+ for ( var key in obj ){
32
+ al = "{{ " + key + " }}";
33
+ res = res.split(al).join(obj[key]);
34
+ }
35
+ return res;
36
+ }
37
+
38
+ }
@@ -0,0 +1 @@
1
+ #= require_tree ./co
@@ -0,0 +1,13 @@
1
+ @mixin cart_button {
2
+ @include color_button(#cccccc, #ffffff);
3
+ border: 1px solid #cccccc !important;
4
+ text-transform: uppercase;
5
+ padding: 10px 20px;
6
+ cursor: pointer;
7
+
8
+ &:hover {
9
+ background-color: #ffffff !important;
10
+ border: 1px solid #717171 !important;
11
+ color: #717171 !important;
12
+ }
13
+ }
@@ -0,0 +1,47 @@
1
+ div#cart_page {
2
+ div.bottom_row {
3
+ @include clearfix;
4
+ margin-bottom: 35px;
5
+
6
+ > * {
7
+ float: left;
8
+ margin-right: 67px;
9
+
10
+ &.result {
11
+ text-transform: uppercase;
12
+ font-size: 29px;
13
+ padding-top: 7px;
14
+ width: 245px;
15
+
16
+ .caption {
17
+ display: inline-block;
18
+ margin-right: 15px;
19
+ }
20
+ .val {
21
+ display: inline-block;
22
+ }
23
+ }
24
+
25
+ &.make_order_chbx {
26
+ label {
27
+ font-size: 21px;
28
+ color: #a1a1a1;
29
+ }
30
+ }
31
+
32
+ &.clear_the_cart {
33
+ padding-top: 7px;
34
+ margin-right: 0;
35
+ width: 643px;
36
+
37
+ a {
38
+ @include cart_button;
39
+ float: right;
40
+ }
41
+ }
42
+ }
43
+
44
+
45
+
46
+ }
47
+ }
@@ -0,0 +1,88 @@
1
+ %col-image {
2
+ width: 290px;
3
+ }
4
+ %col-title {
5
+ width: 250px;
6
+ }
7
+ %col-color {
8
+ width: 130px;
9
+ }
10
+ %col-q {
11
+ width: 198px;
12
+ }
13
+ %col-price {
14
+ width: 190px;
15
+ }
16
+ %col-actions {
17
+ width: 233px;
18
+ }
19
+
20
+ table.cart_table {
21
+ margin-bottom: 25px;
22
+
23
+ th {
24
+ text-align: left;
25
+ background-color: #dfdddd;
26
+ padding: 15px 15px;
27
+ text-transform: uppercase;
28
+ color: #6e6e6e;
29
+ font-size: 17px;
30
+ font-weight: normal;
31
+ &.image {
32
+ @extend %col-image;
33
+ }
34
+ &.title {
35
+ @extend %col-title;
36
+ }
37
+ &.color {
38
+ @extend %col-color;
39
+ }
40
+ &.q {
41
+ @extend %col-q;
42
+ }
43
+ &.price {
44
+ @extend %col-price;
45
+ }
46
+ &.actions {
47
+ @extend %col-actions;
48
+ }
49
+ }
50
+
51
+ td {
52
+ padding: 15px;
53
+ &.image {
54
+ @extend %col-image;
55
+ padding-left: 0;
56
+
57
+ a.lazy-image-wrapper {
58
+ display: block;
59
+ width: 290px;
60
+ height: 240px;
61
+ }
62
+ }
63
+ &.title {
64
+ @extend %col-title;
65
+ font-size: 23px;
66
+ }
67
+ &.color {
68
+ @extend %col-color;
69
+ padding: 0 25px;
70
+ }
71
+ &.q {
72
+ @extend %col-q;
73
+ }
74
+ &.price {
75
+ @extend %col-price;
76
+ font-size: 32px;
77
+ color: #6a6969;
78
+ }
79
+ &.actions {
80
+ @extend %col-actions;
81
+ padding-right: 0;
82
+ a {
83
+ @include cart_button;
84
+ float: right;
85
+ }
86
+ }
87
+ }
88
+ }
@@ -0,0 +1,16 @@
1
+ div#double_modal {
2
+ .modal-dialog {
3
+ .modal-content {
4
+
5
+ .modal-header {
6
+ opacity: 0;
7
+ .button { opacity: 0; }
8
+ h4 { opacity: 0; }
9
+ }
10
+
11
+ .modal-body {
12
+ }
13
+
14
+ }
15
+ }
16
+ }
@@ -0,0 +1 @@
1
+ @import 'co/**/*';
@@ -0,0 +1,7 @@
1
+ module Co
2
+ module CartPageHelper
3
+ def c80_yax_render_cart
4
+ render partial: 'co/cart_page'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ module Co
2
+ module ModalsHelper
3
+
4
+ def render_double_modal
5
+ render partial: 'co/modals/double_modal',
6
+ locals: {
7
+ }
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,41 @@
1
+ <%# CartPageHelper#c80_yax_render_cart %>
2
+
3
+ <div id="cart_page">
4
+ <table class="cart_table">
5
+ <thead>
6
+ <tr>
7
+ <th class="image">Товар</th>
8
+ <th class="title">&nbsp;</th>
9
+ <th class="color">Цвет</th>
10
+ <th class="q">Кол-во</th>
11
+ <th class="price">Сумма</th>
12
+ <th class="actions">&nbsp;</th>
13
+ </tr>
14
+ </thead>
15
+ <tbody></tbody>
16
+ </table>
17
+ <div class="bottom_row">
18
+ <div class="result">
19
+ <span class="caption">Итого:</span>
20
+ <span class="val"></span>
21
+ </div>
22
+ <div class="make_order_chbx">
23
+ <div class="checkbox">
24
+ <label>
25
+ <input type="checkbox">
26
+ <span class="cr"><i class="cr-icon fa fa-check"></i></span>
27
+ Заказать доставку
28
+ </label>
29
+ </div>
30
+ </div>
31
+ <div class="clear_the_cart">
32
+ <%= link_to 'Очистить корзину', '#', class: 'clear_btn' %>
33
+ </div>
34
+ </div>
35
+ <%= render_image_link_lazy({
36
+ :alt_image => 'Корзина демо',
37
+ :image => image_url('demo_cart.jpg'),
38
+ :a_href => '#',
39
+ :a_rel => 'nofollow'
40
+ }) %>
41
+ </div>
@@ -0,0 +1,23 @@
1
+ <%# modals_helper.rb: render_double_modal %>
2
+
3
+ <%# render_ok_message %>
4
+
5
+ <div id="double_modal" class="modal fade">
6
+ <div class="modal-dialog">
7
+ <div class="modal-content">
8
+ <div class="modal-header">
9
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
10
+ <h4 class="modal-title medium" id="myModalLabel">&nbsp;</h4>
11
+ </div>
12
+ <div class="modal-body regular">
13
+
14
+ </div>
15
+
16
+ <div class="modal-footer">
17
+ <button type="button" class="btn btn_close btn-danger">Да, продолжить</button>
18
+ <button type="button" class="btn btn_go_to_cart btn-danger">Перейти в корзину</button>
19
+ </div>
20
+
21
+ </div>
22
+ </div>
23
+ </div>
@@ -0,0 +1,23 @@
1
+ module Co
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Co
4
+
5
+ initializer :co_engine do
6
+ if defined?(ActiveAdmin)
7
+ ActiveAdmin.application.load_paths += Dir["#{config.root}/app/models/**/"]
8
+ #ActiveAdmin.application.load_paths += Dir["#{config.root}/app/models/concerns/**/"]
9
+ ActiveAdmin.application.load_paths += Dir["#{config.root}/app/admin/ti/**/"]
10
+ # ActiveAdmin.application.load_paths += Dir["#{config.root}/app/jobs/**/"]
11
+ end
12
+ end
13
+
14
+ initializer :append_migrations do |app|
15
+ unless app.root.to_s.match root.to_s
16
+ config.paths['db/migrate'].expanded.each do |expanded_path|
17
+ app.config.paths['db/migrate'] << expanded_path
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module Co
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "./co/version"
2
+ require_relative "./co/engine"
3
+
4
+ module Co
5
+ end
@@ -1,3 +1,3 @@
1
1
  module C80Yax
2
- VERSION = '0.1.0.17'
2
+ VERSION = '0.1.0.18'
3
3
  end
data/lib/c80_yax.rb CHANGED
@@ -8,6 +8,7 @@ require 'mini_magick'
8
8
  require_relative '../engines/pack/lib/pack'
9
9
  require_relative '../engines/ti/lib/ti'
10
10
  require_relative '../engines/of/lib/of'
11
+ require_relative '../engines/co/lib/co'
11
12
 
12
13
  module C80Yax
13
14
  def self.table_name_prefix
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c80_yax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.17
4
+ version: 0.1.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - C80609A
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-20 00:00:00.000000000 Z
11
+ date: 2017-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -140,6 +140,8 @@ files:
140
140
  - app/assets/javascripts/c80_yax/backend/strsubcats.js
141
141
  - app/assets/javascripts/c80_yax/frontend/item_color_selector/app.js
142
142
  - app/assets/javascripts/c80_yax/frontend/item_color_selector/item_color_selector.js
143
+ - app/assets/javascripts/c80_yax/frontend/item_options/app.js
144
+ - app/assets/javascripts/c80_yax/frontend/item_options/item_options.js
143
145
  - app/assets/javascripts/c80_yax/frontend/item_quantity_picker/app.js
144
146
  - app/assets/javascripts/c80_yax/frontend/item_quantity_picker/item_quantity_picker.js
145
147
  - app/assets/javascripts/c80_yax/frontend/more_items_list/app.js
@@ -254,6 +256,32 @@ files:
254
256
  - db/migrate/20170625180000_create_c80_yax_join_table_colors_items.rb
255
257
  - db/migrate/20170707060000_create_c80_yax_join_table_items_items_similar.rb
256
258
  - db/seeds/c80_yax_01_fill_props.rb
259
+ - engines/co/README.md
260
+ - engines/co/app/assets/javascripts/co.coffee
261
+ - engines/co/app/assets/javascripts/co/_service/co_modal.js
262
+ - engines/co/app/assets/javascripts/co/_service/cookies_service.js
263
+ - engines/co/app/assets/javascripts/co/add_to_cart/actions/add_row_to_cart.js
264
+ - engines/co/app/assets/javascripts/co/add_to_cart/button_add_to_cart.js
265
+ - engines/co/app/assets/javascripts/co/add_to_cart/data_order_row.js
266
+ - engines/co/app/assets/javascripts/co/add_to_cart/service/collect_data_for_row.js
267
+ - engines/co/app/assets/javascripts/co/add_to_cart/xapp.js
268
+ - engines/co/app/assets/javascripts/co/app.js
269
+ - engines/co/app/assets/javascripts/co/cart_page/app.js
270
+ - engines/co/app/assets/javascripts/co/cart_page/cart_page.js
271
+ - engines/co/app/assets/javascripts/co/cart_page/cart_table.js
272
+ - engines/co/app/assets/javascripts/co/cart_page/support/row_maker.js
273
+ - engines/co/app/assets/stylesheets/co.scss
274
+ - engines/co/app/assets/stylesheets/co/cart_page/_cart_button.scss
275
+ - engines/co/app/assets/stylesheets/co/cart_page/bottom_row.scss
276
+ - engines/co/app/assets/stylesheets/co/cart_page/cart_table.scss
277
+ - engines/co/app/assets/stylesheets/co/modals/double_modal.scss
278
+ - engines/co/app/helpers/co/cart_page_helper.rb
279
+ - engines/co/app/helpers/co/modals_helper.rb
280
+ - engines/co/app/views/co/_cart_page.html.erb
281
+ - engines/co/app/views/co/modals/_double_modal.html.erb
282
+ - engines/co/lib/co.rb
283
+ - engines/co/lib/co/engine.rb
284
+ - engines/co/lib/co/version.rb
257
285
  - engines/of/README.md
258
286
  - engines/of/app/admin/ti/offers.rb
259
287
  - engines/of/app/assets/javascripts/of.coffee