| {% macro product_image_square(website_image, css_class="") %} |
| <div class="product-image product-image-square |
| {% if not website_image -%} missing-image {%- endif %} {{ css_class }}" |
| {% if website_image -%} |
| style="background-image: url('{{ frappe.utils.quoted(website_image) | abs_url }}');" |
| {%- endif %}> |
| </div> |
| {% endmacro %} |
| |
| {% macro product_image(website_image, css_class="product-image", alt="") %} |
| <div class="border text-center rounded {{ css_class }}" style="overflow: hidden;"> |
| <img itemprop="image" class="website-image h-100 w-100" alt="{{ alt }}" src="{{ frappe.utils.quoted(website_image or 'no-image.jpg') | abs_url }}"> |
| </div> |
| {% endmacro %} |
| |
| {% macro media_image(website_image, name, css_class="") %} |
| <div class="product-image sidebar-image-wrapper {{ css_class }}"> |
| {% if not website_image -%} |
| <div class="sidebar-standard-image"> <div class="standard-image" style="background-color: rgb(250, 251, 252);">{{name}}</div> </div> |
| {%- endif %} |
| {% if website_image -%} |
| <a href="{{ frappe.utils.quoted(website_image) }}"> |
| <img itemprop="image" src="{{ frappe.utils.quoted(website_image) | abs_url }}" |
| class="img-responsive img-thumbnail sidebar-image" style="min-height:100%; min-width:100%;"> |
| </a> |
| {%- endif %} |
| </div> |
| {% endmacro %} |
| |
| {% macro render_homepage_section(section) %} |
| |
| {% if section.section_based_on == 'Custom HTML' and section.section_html %} |
| {{ section.section_html }} |
| {% elif section.section_based_on == 'Cards' %} |
| <section class="container my-5"> |
| <h3>{{ section.name }}</h3> |
| |
| <div class="row"> |
| {% for card in section.section_cards %} |
| <div class="col-md-{{ section.column_value }} mb-4"> |
| <div class="card h-100 justify-content-between"> |
| {% if card.image %} |
| <div class="website-image-lazy" data-class="card-img-top h-75" data-src="{{ card.image }}" data-alt="{{ card.title }}"></div> |
| {% endif %} |
| <div class="card-body"> |
| <h5 class="card-title">{{ card.title }}</h5> |
| <p class="card-subtitle mb-2 text-muted">{{ card.subtitle or '' }}</p> |
| <p class="card-text">{{ card.content or '' | truncate(140, True) }}</p> |
| </div> |
| <div class="card-body flex-grow-0"> |
| <a href="{{ card.route }}" class="card-link">{{ _('More details') }}</a> |
| </div> |
| </div> |
| </div> |
| {% endfor %} |
| </div> |
| </section> |
| {% endif %} |
| |
| {% endmacro %} |
| |
| {%- macro item_card(item, is_featured=False, is_full_width=False, align="Left") -%} |
| {%- set align_items_class = resolve_class({ |
| 'align-items-end': align == 'Right', |
| 'align-items-center': align == 'Center', |
| 'align-items-start': align == 'Left', |
| }) -%} |
| {%- set col_size = 3 if is_full_width else 4 -%} |
| {%- set title = item.item_name or item.item_code -%} |
| {%- set image = item.website_image or item.image -%} |
| {%- set description = item.website_description or item.description-%} |
| |
| {% if is_featured %} |
| <div class="col-sm-{{ col_size*2 }} item-card"> |
| <div class="card featured-item {{ align_items_class }}"> |
| {% if image %} |
| <div class="row no-gutters"> |
| <div class="col-md-6"> |
| <img class="card-img" src="{{ image }}" alt="{{ title }}"> |
| </div> |
| <div class="col-md-6"> |
| {{ item_card_body(title, description, item, is_featured, align) }} |
| </div> |
| </div> |
| {% else %} |
| <div class="col-md-12"> |
| {{ item_card_body(title, description, item, is_featured, align) }} |
| </div> |
| {% endif %} |
| </div> |
| </div> |
| {% else %} |
| <div class="col-sm-{{ col_size }} item-card"> |
| <div class="card {{ align_items_class }}"> |
| {% if image %} |
| <div class="card-img-container"> |
| <a href="/{{ item.route or '#' }}" style="text-decoration: none;"> |
| <img class="card-img" src="{{ image }}" alt="{{ title }}"> |
| </a> |
| </div> |
| {% else %} |
| <a href="/{{ item.route or '#' }}" style="text-decoration: none;"> |
| <div class="card-img-top no-image"> |
| {{ frappe.utils.get_abbr(title) }} |
| </div> |
| </a> |
| {% endif %} |
| {{ item_card_body(title, description, item, is_featured, align) }} |
| </div> |
| </div> |
| {% endif %} |
| {%- endmacro -%} |
| |
| {%- macro item_card_body(title, description, item, is_featured, align) -%} |
| {%- set align_class = resolve_class({ |
| 'text-right': align == 'Right', |
| 'text-center': align == 'Center' and not is_featured, |
| 'text-left': align == 'Left' or is_featured, |
| }) -%} |
| <div class="card-body {{ align_class }}" style="width:100%"> |
| |
| <div style="margin-top: 16px; display: flex;"> |
| <a href="/{{ item.route or '#' }}"> |
| <div class="product-title">{{ title or '' }}</div> |
| </a> |
| {% if item.in_stock %} |
| <span class="indicator {{ item.in_stock }} card-indicator"></span> |
| {% endif %} |
| {% if not item.has_variants %} |
| <input class="level-item list-row-checkbox hidden-xs" |
| type="checkbox" data-name="{{ title }}" style="display: none !important;"> |
| <div class="like-action" |
| data-name="{{ title }}" data-doctype="Item"> |
| <svg class="icon sm"> |
| <use class="wish-icon" href="#icon-heart"></use> |
| </svg> |
| </div> |
| {% endif %} |
| </div> |
| {% if is_featured %} |
| <div class="product-price">{{ item.formatted_price or '' }}</div> |
| <div class="product-description ellipsis">{{ description or '' }}</div> |
| {% else %} |
| <div class="product-category">{{ item.item_group or '' }}</div> |
| <div style="display: flex;"> |
| {% if item.formatted_price %} |
| <div class="product-price">{{ item.formatted_price or '' }}</div> |
| {% endif %} |
| {% if item.has_variants %} |
| <a href="/{{ item.route or '#' }}"> |
| <div class="btn btn-sm btn-explore-variants"> |
| {{ _('Explore') }} |
| </div> |
| </a> |
| {% else %} |
| <div id="{{ item.name }}" class="btn btn-sm btn-add-to-cart-list not-added" |
| data-item-code="{{ item.item_code }}"> |
| {{ _('Add to Cart') }} |
| </div> |
| {% endif %} |
| </div> |
| {% endif %} |
| </div> |
| {%- endmacro -%} |