blob: 889cf1ab38d1924ec480d66f4f3aa7422a7f68eb [file] [log] [blame]
Anand Doshida858cc2015-02-24 17:50:44 +05301{% macro product_image_square(website_image, css_class="") %}
Rushabh Mehta440650d2016-11-14 13:13:53 +05302<div class="product-image product-image-square
3 {% if not website_image -%} missing-image {%- endif %} {{ css_class }}"
4 {% if website_image -%}
5 style="background-image: url('{{ frappe.utils.quoted(website_image) | abs_url }}');"
6 {%- endif %}>
Anand Doshida858cc2015-02-24 17:50:44 +05307</div>
8{% endmacro %}
9
marination2fec0682021-07-13 23:46:24 +053010{% macro product_image(website_image, css_class="product-image", alt="", no_border=False) %}
11 <div class="{{ 'border' if not no_border else ''}} text-center rounded {{ css_class }}" style="overflow: hidden;">
marinationcb52c982021-06-09 00:11:48 +053012 {% if website_image %}
13 <img itemprop="image" class="website-image h-100 w-100" alt="{{ alt }}" src="{{ frappe.utils.quoted(website_image) | abs_url }}">
14 {% else %}
15 <div class="card-img-top no-image-item">
16 {{ frappe.utils.get_abbr(alt) or "NA" }}
17 </div>
18 {% endif %}
prssannaeb0e5962020-12-24 11:40:33 +053019 </div>
Rushabh Mehta156ce602015-09-11 18:49:59 +053020{% endmacro %}
pratu16x760fe77c2017-02-13 21:52:43 +053021
22{% macro media_image(website_image, name, css_class="") %}
pratu16x70e94b4b2017-02-14 16:32:48 +053023 <div class="product-image sidebar-image-wrapper {{ css_class }}">
24 {% if not website_image -%}
25 <div class="sidebar-standard-image"> <div class="standard-image" style="background-color: rgb(250, 251, 252);">{{name}}</div> </div>
26 {%- endif %}
prssannaeb0e5962020-12-24 11:40:33 +053027 {% if website_image -%}
pratu16x760fe77c2017-02-13 21:52:43 +053028 <a href="{{ frappe.utils.quoted(website_image) }}">
pratu16x70e94b4b2017-02-14 16:32:48 +053029 <img itemprop="image" src="{{ frappe.utils.quoted(website_image) | abs_url }}"
30 class="img-responsive img-thumbnail sidebar-image" style="min-height:100%; min-width:100%;">
pratu16x760fe77c2017-02-13 21:52:43 +053031 </a>
prssannaeb0e5962020-12-24 11:40:33 +053032 {%- endif %}
33 </div>
pratu16x760fe77c2017-02-13 21:52:43 +053034{% endmacro %}
Faris Ansari5f8b3582019-03-19 11:48:32 +053035
36{% macro render_homepage_section(section) %}
37
38{% if section.section_based_on == 'Custom HTML' and section.section_html %}
39 {{ section.section_html }}
40{% elif section.section_based_on == 'Cards' %}
41<section class="container my-5">
42 <h3>{{ section.name }}</h3>
43
44 <div class="row">
45 {% for card in section.section_cards %}
46 <div class="col-md-{{ section.column_value }} mb-4">
47 <div class="card h-100 justify-content-between">
48 {% if card.image %}
Mohamed Almubarakf7ea3402021-01-28 10:02:13 +030049 <div class="website-image-lazy" data-class="card-img-top h-75" data-src="{{ card.image }}" data-alt="{{ card.title }}"></div>
Faris Ansari5f8b3582019-03-19 11:48:32 +053050 {% endif %}
51 <div class="card-body">
52 <h5 class="card-title">{{ card.title }}</h5>
53 <p class="card-subtitle mb-2 text-muted">{{ card.subtitle or '' }}</p>
Faris Ansarib8eaa3d2019-06-01 20:56:37 +053054 <p class="card-text">{{ card.content or '' | truncate(140, True) }}</p>
Faris Ansari5f8b3582019-03-19 11:48:32 +053055 </div>
56 <div class="card-body flex-grow-0">
57 <a href="{{ card.route }}" class="card-link">{{ _('More details') }}</a>
58 </div>
59 </div>
60 </div>
61 {% endfor %}
62 </div>
63</section>
64{% endif %}
65
prssannaeb0e5962020-12-24 11:40:33 +053066{% endmacro %}
67
marination897c08c2021-05-17 20:44:41 +053068{%- macro item_card(item, is_featured=False, is_full_width=False, align="Left") -%}
prssannaeb0e5962020-12-24 11:40:33 +053069{%- set align_items_class = resolve_class({
70 'align-items-end': align == 'Right',
71 'align-items-center': align == 'Center',
72 'align-items-start': align == 'Left',
73}) -%}
74{%- set col_size = 3 if is_full_width else 4 -%}
marination48b3ce82021-05-13 01:22:05 +053075{%- set title = item.web_item_name or item.item_name or item.item_code -%}
76{%- set title = title[:50] + "..." if title|len > 50 else title -%}
marination4f64d1c2021-03-11 21:24:47 +053077{%- set image = item.website_image or item.image -%}
78{%- set description = item.website_description or item.description-%}
79
prssannaeb0e5962020-12-24 11:40:33 +053080{% if is_featured %}
81<div class="col-sm-{{ col_size*2 }} item-card">
marinationb29c5d62021-05-25 01:35:22 +053082 <div class="card featured-item {{ align_items_class }}" style="height: 360px;">
prssannaeb0e5962020-12-24 11:40:33 +053083 {% if image %}
84 <div class="row no-gutters">
marinationb29c5d62021-05-25 01:35:22 +053085 <div class="col-md-5 ml-4">
prssannaeb0e5962020-12-24 11:40:33 +053086 <img class="card-img" src="{{ image }}" alt="{{ title }}">
87 </div>
88 <div class="col-md-6">
marination897c08c2021-05-17 20:44:41 +053089 {{ item_card_body(title, description, item, is_featured, align) }}
prssannaeb0e5962020-12-24 11:40:33 +053090 </div>
91 </div>
92 {% else %}
93 <div class="col-md-12">
marination897c08c2021-05-17 20:44:41 +053094 {{ item_card_body(title, description, item, is_featured, align) }}
prssannaeb0e5962020-12-24 11:40:33 +053095 </div>
96 {% endif %}
97 </div>
98</div>
99{% else %}
100<div class="col-sm-{{ col_size }} item-card">
marinationb29c5d62021-05-25 01:35:22 +0530101 <div class="card {{ align_items_class }}" style="height: 360px;">
prssannaeb0e5962020-12-24 11:40:33 +0530102 {% if image %}
marination16b9c8c2021-03-11 10:56:00 +0530103 <div class="card-img-container">
marination4f64d1c2021-03-11 21:24:47 +0530104 <a href="/{{ item.route or '#' }}" style="text-decoration: none;">
marination16b9c8c2021-03-11 10:56:00 +0530105 <img class="card-img" src="{{ image }}" alt="{{ title }}">
106 </a>
107 </div>
prssannab00eb1b2021-01-20 17:52:54 +0530108 {% else %}
marination4f64d1c2021-03-11 21:24:47 +0530109 <a href="/{{ item.route or '#' }}" style="text-decoration: none;">
marination16b9c8c2021-03-11 10:56:00 +0530110 <div class="card-img-top no-image">
111 {{ frappe.utils.get_abbr(title) }}
112 </div>
113 </a>
prssannaeb0e5962020-12-24 11:40:33 +0530114 {% endif %}
marination897c08c2021-05-17 20:44:41 +0530115 {{ item_card_body(title, description, item, is_featured, align) }}
prssannaeb0e5962020-12-24 11:40:33 +0530116 </div>
117</div>
118{% endif %}
119{%- endmacro -%}
120
marination897c08c2021-05-17 20:44:41 +0530121{%- macro item_card_body(title, description, item, is_featured, align) -%}
prssannaeb0e5962020-12-24 11:40:33 +0530122{%- set align_class = resolve_class({
123 'text-right': align == 'Right',
124 'text-center': align == 'Center' and not is_featured,
125 'text-left': align == 'Left' or is_featured,
126}) -%}
marination16b9c8c2021-03-11 10:56:00 +0530127<div class="card-body {{ align_class }}" style="width:100%">
marinationb29c5d62021-05-25 01:35:22 +0530128 <div class="mt-4">
marination4f64d1c2021-03-11 21:24:47 +0530129 <a href="/{{ item.route or '#' }}">
marination48b3ce82021-05-13 01:22:05 +0530130 <div class="product-title">
131 {{ title or '' }}
marination48b3ce82021-05-13 01:22:05 +0530132 </div>
marination16b9c8c2021-03-11 10:56:00 +0530133 </a>
marination16b9c8c2021-03-11 10:56:00 +0530134 </div>
prssannaeb0e5962020-12-24 11:40:33 +0530135 {% if is_featured %}
marinationb29c5d62021-05-25 01:35:22 +0530136 <div class="product-description ellipsis text-muted" style="white-space: normal;">
137 {{ description or '' }}
138 </div>
marination60261852021-04-13 00:39:26 +0530139 {% else %}
140 <div class="product-category">{{ item.item_group or '' }}</div>
prssannaeb0e5962020-12-24 11:40:33 +0530141 {% endif %}
142</div>
Ankush Menat4551d7d2021-08-19 13:41:10 +0530143{%- endmacro -%}
marination59514402021-03-16 00:05:53 +0530144
145
146{%- macro wishlist_card(item, settings) %}
marinationd8970622021-07-08 13:58:00 +0530147{%- set title = item.web_item_name or ''-%}
marinationef4579e2021-07-14 01:36:50 +0530148{%- set title = title[:90] + "..." if title|len > 90 else title -%}
marination60261852021-04-13 00:39:26 +0530149<div class="col-sm-3 wishlist-card">
marinationef4579e2021-07-14 01:36:50 +0530150 <div class="card text-center">
marinationaca3c8f2021-06-08 19:40:26 +0530151 <div class="card-img-container">
152 <a href="/{{ item.route or '#' }}" style="text-decoration: none;">
153 {% if item.image %}
marination59514402021-03-16 00:05:53 +0530154 <img class="card-img" src="{{ item.image }}" alt="{{ title }}">
marinationaca3c8f2021-06-08 19:40:26 +0530155 {% else %}
156 <div class="card-img-top no-image">
157 {{ frappe.utils.get_abbr(title) }}
158 </div>
159 {% endif %}
160 </a>
161 <div class="remove-wish" data-item-code="{{ item.item_code }}">
marinationef4579e2021-07-14 01:36:50 +0530162 <svg class="icon icon-md remove-wish-icon">
163 <use class="close" href="#icon-delete"></use>
164 </svg>
marination59514402021-03-16 00:05:53 +0530165 </div>
marinationaca3c8f2021-06-08 19:40:26 +0530166 </div>
marination59514402021-03-16 00:05:53 +0530167
marinationd8970622021-07-08 13:58:00 +0530168 {{ wishlist_card_body(item, title, settings) }}
marination59514402021-03-16 00:05:53 +0530169 </div>
170</div>
171{%- endmacro -%}
172
marinationd8970622021-07-08 13:58:00 +0530173{%- macro wishlist_card_body(item, title, settings) %}
marinationef4579e2021-07-14 01:36:50 +0530174<div class="card-body card-body-flex text-left" style="width: 100%;">
175 <div class="mt-4">
marinationd8970622021-07-08 13:58:00 +0530176 <div class="product-title">{{ title or ''}}</div>
marinationef4579e2021-07-14 01:36:50 +0530177 <div class="product-category">{{ item.item_group or '' }}</div>
marination59514402021-03-16 00:05:53 +0530178 </div>
marination60261852021-04-13 00:39:26 +0530179 <div class="product-price">
marinationef4579e2021-07-14 01:36:50 +0530180 {{ item.get("formatted_price") or '' }}
marination60261852021-04-13 00:39:26 +0530181
182 {% if item.get("formatted_mrp") %}
marinationef4579e2021-07-14 01:36:50 +0530183 <small class="ml-1 striked-price">
marination60261852021-04-13 00:39:26 +0530184 <s>{{ item.formatted_mrp }}</s>
185 </small>
marinationef4579e2021-07-14 01:36:50 +0530186 <small class="ml-1 product-info-green" >
marination60261852021-04-13 00:39:26 +0530187 {{ item.discount }} OFF
188 </small>
189 {% endif %}
190 </div>
marination59514402021-03-16 00:05:53 +0530191
192 {% if (item.available and settings.show_stock_availability) or (not settings.show_stock_availability) %}
marination60261852021-04-13 00:39:26 +0530193 <!-- Show move to cart button if in stock or if showing stock availability is disabled -->
marinationef4579e2021-07-14 01:36:50 +0530194 <button data-item-code="{{ item.item_code}}"
195 class="btn btn-primary btn-add-to-cart-list btn-add-to-cart mt-2 w-100">
marination60261852021-04-13 00:39:26 +0530196 <span class="mr-2">
197 <svg class="icon icon-md">
198 <use href="#icon-assets"></use>
199 </svg>
200 </span>
201 {{ _("Move to Cart") }}
202 </button>
marination59514402021-03-16 00:05:53 +0530203 {% else %}
marinationef4579e2021-07-14 01:36:50 +0530204 <div class="out-of-stock">
205 {{ _("Out of stock") }}
marination60261852021-04-13 00:39:26 +0530206 </div>
marination59514402021-03-16 00:05:53 +0530207 {% endif %}
208</div>
209{%- endmacro -%}
marinationb15ff572021-03-25 11:52:50 +0530210
marination2fec0682021-07-13 23:46:24 +0530211{%- macro ratings_with_title(avg_rating, title, size, rating_header_class, for_summary=False) -%}
212<div class="{{ 'd-flex' if not for_summary else '' }}">
213 <p class="mr-4 {{ rating_header_class }}">
214 <span>{{ title }}</span>
215 </p>
216 <div class="rating {{ 'ratings-pill' if for_summary else ''}}">
marinationb15ff572021-03-25 11:52:50 +0530217 {% for i in range(1,6) %}
218 {% set fill_class = 'star-click' if i <= avg_rating else '' %}
219 <svg class="icon icon-{{ size }} {{ fill_class }}">
220 <use href="#icon-star"></use>
221 </svg>
222 {% endfor %}
223 </div>
marinationb15ff572021-03-25 11:52:50 +0530224</div>
225{%- endmacro -%}
marinationc8423052021-04-07 23:49:04 +0530226
marination2fec0682021-07-13 23:46:24 +0530227{%- macro ratings_summary(reviews, reviews_per_rating, average_rating, average_whole_rating, for_summary=False, total_reviews=None)-%}
228<div class="rating-summary-section mt-4">
229 <div class="rating-summary-numbers col-3">
230 <h2 style="font-size: 2rem;">
231 {{ average_rating or 0 }}
232 </h2>
233 <div class="mb-2" style="margin-top: -.5rem;">
marinationb4529b82021-08-09 21:00:31 +0530234 {{ frappe.utils.cstr(total_reviews or 0) + " " + _("ratings") }}
marinationc8423052021-04-07 23:49:04 +0530235 </div>
marination2fec0682021-07-13 23:46:24 +0530236
237 <!-- Ratings Summary -->
238 {% if reviews %}
239 {% set rating_title = frappe.utils.cstr(average_rating) + " " + _("out of 5") if not for_summary else ''%}
240 {{ ratings_with_title(average_whole_rating, rating_title, "md", "rating-summary-title", for_summary) }}
241 {% endif %}
242
243 <div class="mt-2">{{ frappe.utils.cstr(average_rating or 0) + " " + _("out of 5") }}</div>
244 </div>
245
246 <!-- Rating Progress Bars -->
247 <div class="rating-progress-bar-section col-4 ml-4">
248 {% for percent in reviews_per_rating %}
249 <div class="col-sm-4 small rating-bar-title">
250 {{ loop.index }} star
251 </div>
252 <div class="row">
253 <div class="col-md-7">
254 <div class="progress rating-progress-bar" title="{{ percent }} % of reviews are {{ loop.index }} star">
255 <div class="progress-bar progress-bar-cosmetic" role="progressbar"
256 aria-valuenow="{{ percent }}"
257 aria-valuemin="0" aria-valuemax="100"
258 style="width: {{ percent }}%;">
259 </div>
marinationc8423052021-04-07 23:49:04 +0530260 </div>
261 </div>
marination2fec0682021-07-13 23:46:24 +0530262 <div class="col-sm-1 small">
263 {{ percent }}%
264 </div>
marinationc8423052021-04-07 23:49:04 +0530265 </div>
marination2fec0682021-07-13 23:46:24 +0530266 {% endfor %}
267 </div>
marinationc8423052021-04-07 23:49:04 +0530268</div>
269{%- endmacro -%}
270
271{%- macro user_review(reviews)-%}
272<!-- User Reviews -->
273<div class="user-reviews">
274 {% for review in reviews %}
275 <div class="mb-3 review">
marination2fec0682021-07-13 23:46:24 +0530276 {{ ratings_with_title(review.rating, _(review.review_title), "sm", "user-review-title") }}
marinationc8423052021-04-07 23:49:04 +0530277
marination2fec0682021-07-13 23:46:24 +0530278 <div class="product-description mb-4">
marinationc8423052021-04-07 23:49:04 +0530279 <p>
280 {{ _(review.comment) }}
281 </p>
282 </div>
marination2fec0682021-07-13 23:46:24 +0530283
284 <div class="review-signature mb-2">
285 <span class="reviewer">{{ _(review.customer) }}</span>
286 <span class="indicator grey" style="--text-on-gray: var(--gray-300);"></span>
287 <span class="reviewer">{{ review.published_on }}</span>
288 </div>
marinationc8423052021-04-07 23:49:04 +0530289 </div>
290 {% endfor %}
291</div>
292{%- endmacro -%}
marination1d949142021-04-20 21:54:52 +0530293
294{%- macro field_filter_section(filters)-%}
295{% for field_filter in filters %}
296 {%- set item_field = field_filter[0] %}
297 {%- set values = field_filter[1] %}
298 <div class="mb-4 filter-block pb-5">
299 <div class="filter-label mb-3">{{ item_field.label }}</div>
300
301 {% if values | len > 20 %}
302 <!-- show inline filter if values more than 20 -->
303 <input type="text" class="form-control form-control-sm mb-2 product-filter-filter"/>
304 {% endif %}
305
306 {% if values %}
307 <div class="filter-options">
308 {% for value in values %}
309 <div class="checkbox" data-value="{{ value }}">
310 <label for="{{value}}">
311 <input type="checkbox"
312 class="product-filter field-filter"
313 id="{{value}}"
314 data-filter-name="{{ item_field.fieldname }}"
marination24c89672021-06-08 22:14:20 +0530315 data-filter-value="{{ value }}"
316 style="width: 14px !important">
marination1d949142021-04-20 21:54:52 +0530317 <span class="label-area">{{ value }}</span>
318 </label>
319 </div>
320 {% endfor %}
321 </div>
322 {% else %}
323 <i class="text-muted">{{ _('No values') }}</i>
324 {% endif %}
325 </div>
326{% endfor %}
327{%- endmacro -%}
328
329{%- macro attribute_filter_section(filters)-%}
330{% for attribute in filters %}
331 <div class="mb-4 filter-block pb-5">
332 <div class="filter-label mb-3">{{ attribute.name}}</div>
333 {% if values | len > 20 %}
334 <!-- show inline filter if values more than 20 -->
335 <input type="text" class="form-control form-control-sm mb-2 product-filter-filter"/>
336 {% endif %}
337
338 {% if attribute.item_attribute_values %}
339 <div class="filter-options">
340 {% for attr_value in attribute.item_attribute_values %}
341 <div class="checkbox">
marination48b3ce82021-05-13 01:22:05 +0530342 <label data-value="{{ attr_value }}">
marination1d949142021-04-20 21:54:52 +0530343 <input type="checkbox"
344 class="product-filter attribute-filter"
345 id="{{attr_value.name}}"
346 data-attribute-name="{{ attribute.name }}"
347 data-attribute-value="{{ attr_value.attribute_value }}"
marination24c89672021-06-08 22:14:20 +0530348 style="width: 14px !important"
marination1d949142021-04-20 21:54:52 +0530349 {% if attr_value.checked %} checked {% endif %}>
350 <span class="label-area">{{ attr_value.attribute_value }}</span>
351 </label>
352 </div>
353 {% endfor %}
354 </div>
355 {% else %}
356 <i class="text-muted">{{ _('No values') }}</i>
357 {% endif %}
358 </div>
359{% endfor %}
360{%- endmacro -%}
marination2fec0682021-07-13 23:46:24 +0530361
362{%- macro recommended_item_row(item)-%}
363<div class="recommended-item mb-6 d-flex">
364 <div class="r-item-image">
365 {% if item.website_item_thumbnail %}
marination45f64bd2021-09-01 14:57:50 +0530366 {{ product_image(item.website_item_thumbnail, css_class="r-product-image", alt="item.website_item_name", no_border=True) }}
marination2fec0682021-07-13 23:46:24 +0530367 {% else %}
marination45f64bd2021-09-01 14:57:50 +0530368 <div class="no-image-r-item">
marination2fec0682021-07-13 23:46:24 +0530369 {{ frappe.utils.get_abbr(item.website_item_name) or "NA" }}
370 </div>
371 {% endif %}
372 </div>
373 <div class="r-item-info">
374 <a href="/{{ item.route or '#'}}" target="_blank">
375 {% set title = item.website_item_name %}
376 {{ title[:70] + "..." if title|len > 70 else title }}
377 </a>
378
379 {% if item.get('price_info') %}
380 {% set price = item.get('price_info') %}
381 <div class="mt-2">
382 <span class="item-price">
383 {{ price.get('formatted_price') or '' }}
384 </span>
385
386 {% if price.get('formatted_mrp') %}
387 <br>
388 <span class="striked-item-price">
389 <s>MRP {{ price.formatted_mrp }}</s>
390 </span>
391 <span class="in-green">
392 - {{ price.get('formatted_discount_percent') or price.get('formatted_discount_rate')}}
393 </span>
394 {% endif %}
395 </div>
396 {% endif %}
397 </div>
398</div>
399{%- endmacro -%}