c80_yax 0.1.0.7 → 0.1.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/c80_yax/elems/add_to_bucket.scss +12 -0
- data/app/assets/stylesheets/c80_yax/elems/item_images_no_main.scss +14 -0
- data/app/assets/stylesheets/c80_yax/elems/ul_item_index.scss +13 -0
- data/app/assets/stylesheets/c80_yax/lib/bootstrap_checkboxes.scss +4 -0
- data/app/assets/stylesheets/c80_yax.scss +1 -0
- data/app/decorators/c80_yax/item_decorator.rb +173 -0
- data/app/helpers/c80_yax/cats/cat_lists_helper.rb +4 -2
- data/app/helpers/c80_yax/frontend/catalog_index_helper.rb +39 -0
- data/app/models/c80_yax/prop_name.rb +5 -0
- data/app/views/c80_yax/cats/_cats_iconed_list.html.erb +1 -1
- data/app/views/c80_yax/items/_index.html.erb +17 -0
- data/lib/c80_yax/item_photos_sizes_cache.rb +17 -0
- data/lib/c80_yax/version.rb +1 -1
- data/lib/c80_yax.rb +1 -0
- metadata +8 -3
- data/app/helpers/c80_yax/cats/cat_url_helper.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0804e766b1342dc657468f4b7fb8057bc44d5c50'
|
4
|
+
data.tar.gz: ad39ee25f7c4272fede3cf14e745b61c8bc639cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b30de510b7481ef42394f42cc4caf3f8bec341af295991207b2a831d05481e4df083ee7e189fbb418b4b43008c9fa7038875108af8c4fa5fa4400df30aaf1cdf
|
7
|
+
data.tar.gz: 7537c2bf4139138a3ee54be202a6cdca0d7030e4933cebab8e13894575a8fa5422a5198acc1c0790866246917183b46ec75a91e6ba5945bb17db3f478eea356b
|
@@ -6,6 +6,18 @@
|
|
6
6
|
text-transform: uppercase;
|
7
7
|
text-align: center;
|
8
8
|
|
9
|
+
position: relative;
|
10
|
+
&:before {
|
11
|
+
content: '';
|
12
|
+
display: block;
|
13
|
+
width: 44px;
|
14
|
+
height: 44px;
|
15
|
+
position: absolute;
|
16
|
+
background: transparent image-url('cart_icon.png') no-repeat 35% 50%;
|
17
|
+
left: 18%;
|
18
|
+
top: 14%;
|
19
|
+
}
|
20
|
+
|
9
21
|
// TODO-1:: добавить иконку корзины
|
10
22
|
|
11
23
|
}
|
@@ -0,0 +1,173 @@
|
|
1
|
+
module C80Yax
|
2
|
+
class ItemDecorator < ::ApplicationDecorator
|
3
|
+
decorates 'C80Yax::Item'
|
4
|
+
delegate_all
|
5
|
+
|
6
|
+
def my_url
|
7
|
+
"/katalog/#{model.strsubcat.slug}/#{model.id}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def main_image(thumb_size = 'thumb_md', options = {})
|
11
|
+
|
12
|
+
rel = options.fetch(:rel, 'follow')
|
13
|
+
a_href = options.fetch(:a_href, my_url)
|
14
|
+
|
15
|
+
ww = fetch_ww(thumb_size)
|
16
|
+
hh = fetch_hh(thumb_size)
|
17
|
+
|
18
|
+
h.render_image_link_lazy({
|
19
|
+
:alt_image => model.title,
|
20
|
+
# :image => main_image_tag(thumb_size),
|
21
|
+
:image => self.fetch_first_photo(thumb_size),
|
22
|
+
:a_href => a_href,
|
23
|
+
:rel => rel,
|
24
|
+
:a_class => 'item_main_image',
|
25
|
+
:a_css_style => "width:#{ww}px;height:#{hh}px",
|
26
|
+
:image_width => ww,
|
27
|
+
:image_height => hh
|
28
|
+
})
|
29
|
+
end
|
30
|
+
|
31
|
+
def h3_title(thumb_size = 'thumb_md')
|
32
|
+
ww = fetch_ww(thumb_size)
|
33
|
+
h.content_tag :h3, model.title, style: "width:#{ww}px"
|
34
|
+
end
|
35
|
+
|
36
|
+
def div_prices
|
37
|
+
# Rails.logger.debug '[TRACE] <ItemDecorator.div_prices> ------[begin]--------'
|
38
|
+
result = ''
|
39
|
+
|
40
|
+
if model.is_ask_price
|
41
|
+
result =
|
42
|
+
"<p class='is_ask_price c80_refine_price_button'
|
43
|
+
data-item-url='#{ my_url }'
|
44
|
+
data-item-id='#{ model.id }'
|
45
|
+
data-item-title='#{ model.title }'>Уточнить цену</p>
|
46
|
+
"
|
47
|
+
else
|
48
|
+
|
49
|
+
# <editor-fold desc="# парсим данные в структуру для view">
|
50
|
+
props = {
|
51
|
+
titles: [],
|
52
|
+
values: [],
|
53
|
+
uoms: [],
|
54
|
+
values_old: []
|
55
|
+
}
|
56
|
+
|
57
|
+
model.item_props.each do |ip|
|
58
|
+
# Rails.logger.debug "[TRACE] <ItemDecorator.div_prices> ip.prop_name.related.present? = #{ip.prop_name.related.present?}"
|
59
|
+
if ip.prop_name.is_normal_price
|
60
|
+
props[:titles] << ip.prop_name.title
|
61
|
+
props[:values] << ip.value
|
62
|
+
props[:uoms] << ip.prop_name.uom_title
|
63
|
+
|
64
|
+
# у свойства "нормальная цена" может быть "старый вариант"
|
65
|
+
if ip.prop_name.related.present?
|
66
|
+
# фиксируем айдишник свойства "старый вариант этой цены"
|
67
|
+
related_id = ip.prop_name.related.id
|
68
|
+
# и зафиксирем его значение
|
69
|
+
model.item_props.each do |iip|
|
70
|
+
# Rails.logger.debug "[TRACE] <ItemDecorator.div_prices> iip.prop_name.id = #{iip.prop_name.id} VS #{related_id}"
|
71
|
+
|
72
|
+
if iip.prop_name.id == related_id
|
73
|
+
# props[:titles] << iip.prop_name.title
|
74
|
+
props[:values_old] << iip.value
|
75
|
+
# props[:uoms] << iip.prop_name.uom_title
|
76
|
+
break
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Rails.logger.debug "[TRACE] <ItemDecorator.div_prices> props: #{props}"
|
85
|
+
|
86
|
+
# </editor-fold>
|
87
|
+
|
88
|
+
# <editor-fold desc="# собираем html-строку (список)">
|
89
|
+
res = ''
|
90
|
+
props[:titles].each_with_index do |title, i|
|
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 руб
|
93
|
+
e = "<li>#{e}</li>"
|
94
|
+
res += e
|
95
|
+
end
|
96
|
+
|
97
|
+
# Rails.logger.debug '[TRACE] <ItemDecorator.div_prices> ------- [end] ------- '
|
98
|
+
result = "<ul>#{res}</ul>"
|
99
|
+
# </editor-fold>
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
"<div class='price_props'>#{result}</div>".html_safe
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
def _uom(v)
|
108
|
+
return '' if v.nil?
|
109
|
+
v
|
110
|
+
end
|
111
|
+
|
112
|
+
def btn_order
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
def h1_title
|
118
|
+
h.content_tag :h1, model.title
|
119
|
+
end
|
120
|
+
|
121
|
+
def props_list
|
122
|
+
res = ''
|
123
|
+
ps = %w(customer price duration when)
|
124
|
+
ds = %w(клиент бюджет срок\ выполнения дата)
|
125
|
+
ps.each_with_index do |p, index|
|
126
|
+
v = model.send(p)
|
127
|
+
next if v.blank?
|
128
|
+
res += "<li><span class='def'>#{ds[index]}:</span> #{model.send(p)}</li>"
|
129
|
+
end
|
130
|
+
"<ul class='work_props_list'>#{res}</ul>".html_safe
|
131
|
+
end
|
132
|
+
|
133
|
+
def images_no_main(thumb_size = 'thumb_sm')
|
134
|
+
res = ''
|
135
|
+
model.iphotos.each_with_index do |wp, index|
|
136
|
+
next if index.zero?
|
137
|
+
img = h.image_tag wp.image.send(thumb_size).url
|
138
|
+
lnk = h.link_to img, wp.image.thumb_lg.url
|
139
|
+
res += "<li>#{lnk}</li>"
|
140
|
+
end
|
141
|
+
"<ul class='item_images_no_main'>#{res}</ul>".html_safe
|
142
|
+
end
|
143
|
+
|
144
|
+
def div_p_desc
|
145
|
+
res = ''
|
146
|
+
res = model.desc.html_safe if model.desc.present?
|
147
|
+
"<div class='work_desc'>#{res}</div>".html_safe
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
# выдать url миниатюры указанного +thumb_size+ типа
|
152
|
+
# первой попавшейся фотки обьекта
|
153
|
+
def fetch_first_photo(thumb_size = 'thumb_md')
|
154
|
+
Rails.logger.debug '[TRACE] <ItemDecorator.fetch_first_photo>'
|
155
|
+
res = ''
|
156
|
+
if model.iphotos.size > 0
|
157
|
+
res = model.iphotos.first.image.send(thumb_size)
|
158
|
+
end
|
159
|
+
res
|
160
|
+
end
|
161
|
+
|
162
|
+
def fetch_ww(thumb_size = 'thumb_md')
|
163
|
+
Rails.logger.debug '[TRACE] <ItemDecorator.fetch_ww>'
|
164
|
+
@ww ||= ItemPhotosSizesCache.instance.thumb_width(thumb_size)
|
165
|
+
end
|
166
|
+
|
167
|
+
def fetch_hh(thumb_size = 'thumb_md')
|
168
|
+
Rails.logger.debug '[TRACE] <ItemDecorator.fetch_hh>'
|
169
|
+
@hh ||= ItemPhotosSizesCache.instance.thumb_height(thumb_size)
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
end
|
@@ -2,11 +2,13 @@ module C80Yax
|
|
2
2
|
module Cats
|
3
3
|
module CatListsHelper
|
4
4
|
|
5
|
-
def render_cats_iconed_list(n = 4)
|
5
|
+
def render_cats_iconed_list(n = 4, &make_url)
|
6
|
+
proc_make_url = proc &make_url
|
6
7
|
cats = Cat.iconed_list(n)
|
7
8
|
render :partial => 'c80_yax/cats/cats_iconed_list',
|
8
9
|
:locals => {
|
9
|
-
cats: cats
|
10
|
+
cats: cats,
|
11
|
+
proc_make_url: proc_make_url
|
10
12
|
}
|
11
13
|
end
|
12
14
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module C80Yax
|
2
|
+
module Frontend
|
3
|
+
module CatalogIndexHelper
|
4
|
+
|
5
|
+
def c80_yax_render_catalog_index(thumb_size = 'thumb_md', page=1, per_page = 16)
|
6
|
+
itms = C80Yax::Item.includes(item_props: {prop_name: [:uom, :related]})
|
7
|
+
.includes(:iphotos)
|
8
|
+
.includes(:strsubcat)
|
9
|
+
.paginate(page: page, per_page: per_page)
|
10
|
+
items = ItemDecorator.decorate_collection(itms)
|
11
|
+
render partial: 'c80_yax/items/index',
|
12
|
+
locals: {
|
13
|
+
items: items,
|
14
|
+
without_paginator: false,
|
15
|
+
will_paginate_items: itms,
|
16
|
+
thumb_size: thumb_size
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def c80_yax_render_related(item, thumb_size = 'thumb_md', count = 4)
|
21
|
+
itms = C80Yax::Item.includes(item_props: {prop_name: [:uom, :related]})
|
22
|
+
.includes(:iphotos)
|
23
|
+
.includes(:strsubcat)
|
24
|
+
.where(c80_yax_items: { strsubcat_id: item.strsubcat.id })
|
25
|
+
.limit(count)
|
26
|
+
items = ItemDecorator.decorate_collection(itms)
|
27
|
+
render partial: 'c80_yax/items/index',
|
28
|
+
locals: {
|
29
|
+
items: items,
|
30
|
+
without_paginator: true,
|
31
|
+
thumb_size: thumb_size
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<ul class="item_index">
|
2
|
+
<% items.each do |item| %>
|
3
|
+
<li class="li_item i_<%= item.id%>">
|
4
|
+
<%= item.main_image(thumb_size) %>
|
5
|
+
<%= item.h3_title(thumb_size) %>
|
6
|
+
<%= item.div_prices %>
|
7
|
+
<%= item.btn_order %>
|
8
|
+
</li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
|
12
|
+
<div class="will_paginate">
|
13
|
+
<%= will_paginate(will_paginate_items,
|
14
|
+
:previous_label => '<',
|
15
|
+
:next_label => '>',
|
16
|
+
:inner_window => 3) unless without_paginator %>
|
17
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
# require 'sizes_cache'
|
3
|
+
|
4
|
+
module C80Yax
|
5
|
+
|
6
|
+
# Оптимизируем высокочастотные запросы к базе.
|
7
|
+
|
8
|
+
class ItemPhotosSizesCache < ::SizesCache
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
super(C80Yax::Prop)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
data/lib/c80_yax/version.rb
CHANGED
data/lib/c80_yax.rb
CHANGED
@@ -2,6 +2,7 @@ require 'c80_yax/version'
|
|
2
2
|
require 'c80_yax/engine'
|
3
3
|
require 'c80_yax/strsubcat_runtime_tables'
|
4
4
|
require 'c80_yax/watermarker'
|
5
|
+
require 'c80_yax/item_photos_sizes_cache'
|
5
6
|
require 'rails-observers'
|
6
7
|
require 'mini_magick'
|
7
8
|
require_relative '../engines/pack/lib/pack'
|
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.
|
4
|
+
version: 0.1.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- C80609A
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -151,16 +151,19 @@ files:
|
|
151
151
|
- app/assets/stylesheets/c80_yax/backend/jquery-my-dialog.scss
|
152
152
|
- app/assets/stylesheets/c80_yax/elems/add_to_bucket.scss
|
153
153
|
- app/assets/stylesheets/c80_yax/elems/cats_iconed_list.scss
|
154
|
+
- app/assets/stylesheets/c80_yax/elems/item_images_no_main.scss
|
155
|
+
- app/assets/stylesheets/c80_yax/elems/ul_item_index.scss
|
154
156
|
- app/assets/stylesheets/c80_yax/lib/bootstrap_checkboxes.scss
|
155
157
|
- app/assets/stylesheets/c80_yax/lib/loading.scss
|
156
158
|
- app/assets/stylesheets/c80_yax/lib_custom/bootstrap_checkboxes.scss
|
157
159
|
- app/assets/stylesheets/c80_yax_backend.scss
|
158
160
|
- app/controllers/c80_yax/admin_data_controller.rb
|
159
161
|
- app/controllers/c80_yax/app_controller.rb
|
162
|
+
- app/decorators/c80_yax/item_decorator.rb
|
160
163
|
- app/helpers/c80_yax/cats/cat_lists_helper.rb
|
161
|
-
- app/helpers/c80_yax/cats/cat_url_helper.rb
|
162
164
|
- app/helpers/c80_yax/cats/cat_view_helper.rb
|
163
165
|
- app/helpers/c80_yax/data_helper.rb
|
166
|
+
- app/helpers/c80_yax/frontend/catalog_index_helper.rb
|
164
167
|
- app/helpers/c80_yax/items/asterix_helper.rb
|
165
168
|
- app/helpers/c80_yax/items/buy_options_helper.rb
|
166
169
|
- app/helpers/c80_yax/items/item_view_helper.rb
|
@@ -195,6 +198,7 @@ files:
|
|
195
198
|
- app/views/admin/strsubcats/_view.html.erb
|
196
199
|
- app/views/c80_yax/cats/_cats_iconed_list.html.erb
|
197
200
|
- app/views/c80_yax/items/_buy_options.html.erb
|
201
|
+
- app/views/c80_yax/items/_index.html.erb
|
198
202
|
- bin/console
|
199
203
|
- bin/setup
|
200
204
|
- c80_yax.gemspec
|
@@ -242,6 +246,7 @@ files:
|
|
242
246
|
- engines/pack/lib/pack/engine.rb
|
243
247
|
- lib/c80_yax.rb
|
244
248
|
- lib/c80_yax/engine.rb
|
249
|
+
- lib/c80_yax/item_photos_sizes_cache.rb
|
245
250
|
- lib/c80_yax/strsubcat_runtime_tables.rb
|
246
251
|
- lib/c80_yax/version.rb
|
247
252
|
- lib/c80_yax/watermarker.rb
|