c80_yax 0.1.0.17 → 0.1.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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