easyorders 0.1.14 → 0.1.15
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.
- package/README.md +93 -93
- package/dist/bin/cli.js +12 -5
- package/dist/template/theme/config.json +95 -95
- package/dist/template/theme/home-sections/category-mosaic/config.json +40 -40
- package/dist/template/theme/home-sections/category-mosaic/template.liquid +155 -155
- package/dist/template/theme/home-sections/editorial-feature/config.json +67 -67
- package/dist/template/theme/home-sections/editorial-feature/template.liquid +153 -153
- package/dist/template/theme/home-sections/newsletter-luxe/config.json +60 -60
- package/dist/template/theme/home-sections/newsletter-luxe/template.liquid +144 -144
- package/dist/template/theme/home-sections/runway-hero/config.json +91 -91
- package/dist/template/theme/home-sections/runway-hero/template.liquid +159 -159
- package/dist/template/theme/home-sections/shop-the-look/config.json +75 -75
- package/dist/template/theme/home-sections/shop-the-look/template.liquid +304 -304
- package/dist/template/theme/home-sections/trust-promise/config.json +47 -47
- package/dist/template/theme/home-sections/trust-promise/template.liquid +96 -96
- package/dist/template/theme/schema.json +151 -151
- package/dist/template/theme/script.js +586 -586
- package/dist/template/theme/sections/breadcrumbs.liquid +17 -17
- package/dist/template/theme/sections/categories.liquid +9 -9
- package/dist/template/theme/sections/fake-counter.liquid +27 -27
- package/dist/template/theme/sections/fake-stock.liquid +6 -6
- package/dist/template/theme/sections/fake-visitor.liquid +6 -6
- package/dist/template/theme/sections/featured-products.liquid +110 -110
- package/dist/template/theme/sections/fixed-buy-button.liquid +46 -46
- package/dist/template/theme/sections/footer.liquid +128 -128
- package/dist/template/theme/sections/gallery.liquid +61 -61
- package/dist/template/theme/sections/header.liquid +152 -152
- package/dist/template/theme/sections/home-products-grid.liquid +109 -109
- package/dist/template/theme/sections/list-products.liquid +93 -93
- package/dist/template/theme/sections/order-invoice.liquid +154 -154
- package/dist/template/theme/sections/product-description.liquid +30 -30
- package/dist/template/theme/sections/product-details.liquid +63 -63
- package/dist/template/theme/sections/products-grid.liquid +86 -86
- package/dist/template/theme/sections/related-products.liquid +88 -88
- package/dist/template/theme/sections/reviews.liquid +55 -55
- package/dist/template/theme/sections/slider.liquid +43 -43
- package/dist/template/theme/sections/thanks.liquid +33 -33
- package/dist/template/theme/style.css +3923 -3923
- package/dist/template/theme/theme-data.json +9 -9
- package/package.json +40 -40
|
@@ -1,152 +1,152 @@
|
|
|
1
|
-
|
|
2
|
-
<div class="ab-theme" >
|
|
3
|
-
{% if announcement_config and announcement_config.text.size > 0 %}
|
|
4
|
-
<div class="ab-announce" data-ann-type="{{ announcement_config.type }}">
|
|
5
|
-
{% if announcement_config.type == "marquee" %}
|
|
6
|
-
<div class="ab-ann-marquee">
|
|
7
|
-
<div class="ab-ann-marquee-track">
|
|
8
|
-
{% for item in announcement_config.text %}
|
|
9
|
-
<span class="ab-ann-marquee-item">{{ item }}</span>
|
|
10
|
-
{% endfor %}
|
|
11
|
-
</div>
|
|
12
|
-
</div>
|
|
13
|
-
{% elsif announcement_config.type == "slider" %}
|
|
14
|
-
<div class="ab-ann-slider">
|
|
15
|
-
{% for item in announcement_config.text %}
|
|
16
|
-
<div class="ab-ann-slide{% if forloop.first %} ab-active{% endif %}">{{ item }}</div>
|
|
17
|
-
{% endfor %}
|
|
18
|
-
</div>
|
|
19
|
-
{% else %}
|
|
20
|
-
<div class="ab-ann-simple">
|
|
21
|
-
{% for item in announcement_config.text %}
|
|
22
|
-
<span>{{ item }}</span>
|
|
23
|
-
{% unless forloop.last %}<span class="ab-ann-sep">—</span>{% endunless %}
|
|
24
|
-
{% endfor %}
|
|
25
|
-
</div>
|
|
26
|
-
{% endif %}
|
|
27
|
-
</div>
|
|
28
|
-
{% elsif announcement_text and announcement_text != "" %}
|
|
29
|
-
<div class="ab-announce">
|
|
30
|
-
{{ announcement_text }}
|
|
31
|
-
</div>
|
|
32
|
-
{% endif %}
|
|
33
|
-
|
|
34
|
-
<header id="eo-header" class="ab-header">
|
|
35
|
-
<div class="ab-header-inner">
|
|
36
|
-
<div style="display:flex;align-items:center;">
|
|
37
|
-
<button id="eo-menu-btn" class="ab-hamburger" aria-label="Menu"></button>
|
|
38
|
-
<a href="/" class="ab-logo">
|
|
39
|
-
{% if logo %}
|
|
40
|
-
<img src="{{ logo }}" alt="{{ store_name }}" />
|
|
41
|
-
{% else %}
|
|
42
|
-
<span class="ab-logo-text">{{ store_name }}</span>
|
|
43
|
-
{% endif %}
|
|
44
|
-
</a>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
<nav class="ab-nav">
|
|
48
|
-
{% for category in categories %}
|
|
49
|
-
{% if category.children.size > 0 %}
|
|
50
|
-
<div class="ab-dropdown">
|
|
51
|
-
<a href="{{ category.url }}" class="ab-dropdown-trigger">{{ category.name }}</a>
|
|
52
|
-
<div class="ab-dropdown-panel">
|
|
53
|
-
{% for child in category.children %}
|
|
54
|
-
<a href="{{ child.url }}">{{ child.name }}</a>
|
|
55
|
-
{% endfor %}
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
{% else %}
|
|
59
|
-
<a href="{{ category.url }}">{{ category.name }}</a>
|
|
60
|
-
{% endif %}
|
|
61
|
-
{% endfor %}
|
|
62
|
-
</nav>
|
|
63
|
-
|
|
64
|
-
<div class="ab-right">
|
|
65
|
-
<a href="/search" class="ab-icon-btn search-btn" aria-label="Search"></a>
|
|
66
|
-
|
|
67
|
-
{% if is_register_active %}
|
|
68
|
-
<button type="button" id="header-register" class="ab-icon-btn register-btn" aria-label="Register" onclick="this.dispatchEvent(new CustomEvent('register-click',{bubbles:true}))"></button>
|
|
69
|
-
{% endif %}
|
|
70
|
-
|
|
71
|
-
<button type="button" id="header-lang-btn" class="ab-icon-btn lang-btn" aria-label="Change Language" hidden onclick="this.dispatchEvent(new CustomEvent('lang-click',{bubbles:true}))"></button>
|
|
72
|
-
|
|
73
|
-
{% comment %} Desktop header: Wishlist link with live count badge & Compare button — dispatches compare-click event; count badges updated by JS
|
|
74
|
-
<a href="/wishlist" class="ab-icon-btn wishlist-btn" aria-label="Wishlist">
|
|
75
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
|
|
76
|
-
<span id="header-wishlist-count" class="ab-wishlist-count" hidden>{{ wishlist_count }}</span>
|
|
77
|
-
</a>
|
|
78
|
-
|
|
79
|
-
<button type="button" class="ab-icon-btn compare-btn" aria-label="Compare" onclick="this.dispatchEvent(new CustomEvent('compare-click',{bubbles:true}))">
|
|
80
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 3 21 8 16 13"/><line x1="21" y1="8" x2="9" y2="8"/><polyline points="8 21 3 16 8 11"/><line x1="3" y1="16" x2="15" y2="16"/></svg>
|
|
81
|
-
<span id="header-compare-count" class="ab-compare-count" hidden>{{ compare_count }}</span>
|
|
82
|
-
</button>
|
|
83
|
-
{% endcomment %}
|
|
84
|
-
|
|
85
|
-
<button type="button" class="ab-icon-btn cart-btn" aria-label="Cart" onclick="this.dispatchEvent(new CustomEvent('cart-click',{bubbles:true}))">
|
|
86
|
-
<span id="header-cart-count" class="ab-cart-count" hidden>{{ cart_count }}</span>
|
|
87
|
-
</button>
|
|
88
|
-
</div>
|
|
89
|
-
</div>
|
|
90
|
-
</header>
|
|
91
|
-
|
|
92
|
-
<div id="eo-mobile-overlay" class="ab-mobile-overlay"></div>
|
|
93
|
-
<div id="eo-mobile-menu" class="ab-mobile-menu">
|
|
94
|
-
<div class="ab-mobile-menu-header">
|
|
95
|
-
<button id="eo-mobile-close" class="ab-mobile-close" aria-label="Close menu"></button>
|
|
96
|
-
<a href="/" class="ab-logo">
|
|
97
|
-
{% if logo %}
|
|
98
|
-
<img src="{{ logo }}" alt="{{ store_name }}" />
|
|
99
|
-
{% else %}
|
|
100
|
-
<span class="ab-logo-text">{{ store_name }}</span>
|
|
101
|
-
{% endif %}
|
|
102
|
-
</a>
|
|
103
|
-
</div>
|
|
104
|
-
<nav class="ab-mobile-nav">
|
|
105
|
-
{% for category in categories %}
|
|
106
|
-
{% if category.children.size > 0 %}
|
|
107
|
-
<div class="ab-mobile-accordion">
|
|
108
|
-
<button class="ab-mobile-accordion-trigger">
|
|
109
|
-
<span>{{ category.name }}</span>
|
|
110
|
-
<svg class="ab-accordion-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg>
|
|
111
|
-
</button>
|
|
112
|
-
<div class="ab-mobile-accordion-panel">
|
|
113
|
-
<a href="{{ category.url }}">All {{ category.name }}</a>
|
|
114
|
-
{% for child in category.children %}
|
|
115
|
-
<a href="{{ child.url }}">{{ child.name }}</a>
|
|
116
|
-
{% endfor %}
|
|
117
|
-
</div>
|
|
118
|
-
</div>
|
|
119
|
-
{% else %}
|
|
120
|
-
<a href="{{ category.url }}">
|
|
121
|
-
<span>{{ category.name }}</span>
|
|
122
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M10 8l4 4-4 4"/></svg>
|
|
123
|
-
</a>
|
|
124
|
-
{% endif %}
|
|
125
|
-
{% endfor %}
|
|
126
|
-
<a href="/search">
|
|
127
|
-
<span>Search</span>
|
|
128
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
|
|
129
|
-
</a>
|
|
130
|
-
{% if is_register_active %}
|
|
131
|
-
<button type="button" id="header-register-mobile" class="register-btn" aria-label="Register" onclick="this.dispatchEvent(new CustomEvent('register-click',{bubbles:true}))">
|
|
132
|
-
<span>Register</span>
|
|
133
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><line x1="19" y1="8" x2="19" y2="14"/><line x1="22" y1="11" x2="16" y2="11"/></svg>
|
|
134
|
-
</button>
|
|
135
|
-
{% endif %}
|
|
136
|
-
<button id="header-lang-mobile" class="lang-btn" hidden onclick="this.dispatchEvent(new CustomEvent('lang-click',{bubbles:true}));return false;">
|
|
137
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M10 8l4 4-4 4"/></svg>
|
|
138
|
-
</button>
|
|
139
|
-
{% comment %} Mobile nav: Wishlist & Compare entries added alongside existing nav items
|
|
140
|
-
<a href="/wishlist" class="wishlist-btn">
|
|
141
|
-
<span>Wishlist</span>
|
|
142
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
|
|
143
|
-
</a>
|
|
144
|
-
<button type="button" class="compare-btn" onclick="this.dispatchEvent(new CustomEvent('compare-click',{bubbles:true}))">
|
|
145
|
-
<span>Compare</span>
|
|
146
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 3 21 8 16 13"/><line x1="21" y1="8" x2="9" y2="8"/><polyline points="8 21 3 16 8 11"/><line x1="3" y1="16" x2="15" y2="16"/></svg>
|
|
147
|
-
</button>
|
|
148
|
-
{% endcomment %}
|
|
149
|
-
</nav>
|
|
150
|
-
</div>
|
|
151
|
-
|
|
152
|
-
</div>
|
|
1
|
+
|
|
2
|
+
<div class="ab-theme" >
|
|
3
|
+
{% if announcement_config and announcement_config.text.size > 0 %}
|
|
4
|
+
<div class="ab-announce" data-ann-type="{{ announcement_config.type }}">
|
|
5
|
+
{% if announcement_config.type == "marquee" %}
|
|
6
|
+
<div class="ab-ann-marquee">
|
|
7
|
+
<div class="ab-ann-marquee-track">
|
|
8
|
+
{% for item in announcement_config.text %}
|
|
9
|
+
<span class="ab-ann-marquee-item">{{ item }}</span>
|
|
10
|
+
{% endfor %}
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
{% elsif announcement_config.type == "slider" %}
|
|
14
|
+
<div class="ab-ann-slider">
|
|
15
|
+
{% for item in announcement_config.text %}
|
|
16
|
+
<div class="ab-ann-slide{% if forloop.first %} ab-active{% endif %}">{{ item }}</div>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
</div>
|
|
19
|
+
{% else %}
|
|
20
|
+
<div class="ab-ann-simple">
|
|
21
|
+
{% for item in announcement_config.text %}
|
|
22
|
+
<span>{{ item }}</span>
|
|
23
|
+
{% unless forloop.last %}<span class="ab-ann-sep">—</span>{% endunless %}
|
|
24
|
+
{% endfor %}
|
|
25
|
+
</div>
|
|
26
|
+
{% endif %}
|
|
27
|
+
</div>
|
|
28
|
+
{% elsif announcement_text and announcement_text != "" %}
|
|
29
|
+
<div class="ab-announce">
|
|
30
|
+
{{ announcement_text }}
|
|
31
|
+
</div>
|
|
32
|
+
{% endif %}
|
|
33
|
+
|
|
34
|
+
<header id="eo-header" class="ab-header">
|
|
35
|
+
<div class="ab-header-inner">
|
|
36
|
+
<div style="display:flex;align-items:center;">
|
|
37
|
+
<button id="eo-menu-btn" class="ab-hamburger" aria-label="Menu"></button>
|
|
38
|
+
<a href="/" class="ab-logo">
|
|
39
|
+
{% if logo %}
|
|
40
|
+
<img src="{{ logo }}" alt="{{ store_name }}" />
|
|
41
|
+
{% else %}
|
|
42
|
+
<span class="ab-logo-text">{{ store_name }}</span>
|
|
43
|
+
{% endif %}
|
|
44
|
+
</a>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<nav class="ab-nav">
|
|
48
|
+
{% for category in categories %}
|
|
49
|
+
{% if category.children.size > 0 %}
|
|
50
|
+
<div class="ab-dropdown">
|
|
51
|
+
<a href="{{ category.url }}" class="ab-dropdown-trigger">{{ category.name }}</a>
|
|
52
|
+
<div class="ab-dropdown-panel">
|
|
53
|
+
{% for child in category.children %}
|
|
54
|
+
<a href="{{ child.url }}">{{ child.name }}</a>
|
|
55
|
+
{% endfor %}
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
{% else %}
|
|
59
|
+
<a href="{{ category.url }}">{{ category.name }}</a>
|
|
60
|
+
{% endif %}
|
|
61
|
+
{% endfor %}
|
|
62
|
+
</nav>
|
|
63
|
+
|
|
64
|
+
<div class="ab-right">
|
|
65
|
+
<a href="/search" class="ab-icon-btn search-btn" aria-label="Search"></a>
|
|
66
|
+
|
|
67
|
+
{% if is_register_active %}
|
|
68
|
+
<button type="button" id="header-register" class="ab-icon-btn register-btn" aria-label="Register" onclick="this.dispatchEvent(new CustomEvent('register-click',{bubbles:true}))"></button>
|
|
69
|
+
{% endif %}
|
|
70
|
+
|
|
71
|
+
<button type="button" id="header-lang-btn" class="ab-icon-btn lang-btn" aria-label="Change Language" hidden onclick="this.dispatchEvent(new CustomEvent('lang-click',{bubbles:true}))"></button>
|
|
72
|
+
|
|
73
|
+
{% comment %} Desktop header: Wishlist link with live count badge & Compare button — dispatches compare-click event; count badges updated by JS
|
|
74
|
+
<a href="/wishlist" class="ab-icon-btn wishlist-btn" aria-label="Wishlist">
|
|
75
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
|
|
76
|
+
<span id="header-wishlist-count" class="ab-wishlist-count" hidden>{{ wishlist_count }}</span>
|
|
77
|
+
</a>
|
|
78
|
+
|
|
79
|
+
<button type="button" class="ab-icon-btn compare-btn" aria-label="Compare" onclick="this.dispatchEvent(new CustomEvent('compare-click',{bubbles:true}))">
|
|
80
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 3 21 8 16 13"/><line x1="21" y1="8" x2="9" y2="8"/><polyline points="8 21 3 16 8 11"/><line x1="3" y1="16" x2="15" y2="16"/></svg>
|
|
81
|
+
<span id="header-compare-count" class="ab-compare-count" hidden>{{ compare_count }}</span>
|
|
82
|
+
</button>
|
|
83
|
+
{% endcomment %}
|
|
84
|
+
|
|
85
|
+
<button type="button" class="ab-icon-btn cart-btn" aria-label="Cart" onclick="this.dispatchEvent(new CustomEvent('cart-click',{bubbles:true}))">
|
|
86
|
+
<span id="header-cart-count" class="ab-cart-count" hidden>{{ cart_count }}</span>
|
|
87
|
+
</button>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</header>
|
|
91
|
+
|
|
92
|
+
<div id="eo-mobile-overlay" class="ab-mobile-overlay"></div>
|
|
93
|
+
<div id="eo-mobile-menu" class="ab-mobile-menu">
|
|
94
|
+
<div class="ab-mobile-menu-header">
|
|
95
|
+
<button id="eo-mobile-close" class="ab-mobile-close" aria-label="Close menu"></button>
|
|
96
|
+
<a href="/" class="ab-logo">
|
|
97
|
+
{% if logo %}
|
|
98
|
+
<img src="{{ logo }}" alt="{{ store_name }}" />
|
|
99
|
+
{% else %}
|
|
100
|
+
<span class="ab-logo-text">{{ store_name }}</span>
|
|
101
|
+
{% endif %}
|
|
102
|
+
</a>
|
|
103
|
+
</div>
|
|
104
|
+
<nav class="ab-mobile-nav">
|
|
105
|
+
{% for category in categories %}
|
|
106
|
+
{% if category.children.size > 0 %}
|
|
107
|
+
<div class="ab-mobile-accordion">
|
|
108
|
+
<button class="ab-mobile-accordion-trigger">
|
|
109
|
+
<span>{{ category.name }}</span>
|
|
110
|
+
<svg class="ab-accordion-arrow" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg>
|
|
111
|
+
</button>
|
|
112
|
+
<div class="ab-mobile-accordion-panel">
|
|
113
|
+
<a href="{{ category.url }}">All {{ category.name }}</a>
|
|
114
|
+
{% for child in category.children %}
|
|
115
|
+
<a href="{{ child.url }}">{{ child.name }}</a>
|
|
116
|
+
{% endfor %}
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
{% else %}
|
|
120
|
+
<a href="{{ category.url }}">
|
|
121
|
+
<span>{{ category.name }}</span>
|
|
122
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M10 8l4 4-4 4"/></svg>
|
|
123
|
+
</a>
|
|
124
|
+
{% endif %}
|
|
125
|
+
{% endfor %}
|
|
126
|
+
<a href="/search">
|
|
127
|
+
<span>Search</span>
|
|
128
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
|
|
129
|
+
</a>
|
|
130
|
+
{% if is_register_active %}
|
|
131
|
+
<button type="button" id="header-register-mobile" class="register-btn" aria-label="Register" onclick="this.dispatchEvent(new CustomEvent('register-click',{bubbles:true}))">
|
|
132
|
+
<span>Register</span>
|
|
133
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><line x1="19" y1="8" x2="19" y2="14"/><line x1="22" y1="11" x2="16" y2="11"/></svg>
|
|
134
|
+
</button>
|
|
135
|
+
{% endif %}
|
|
136
|
+
<button id="header-lang-mobile" class="lang-btn" hidden onclick="this.dispatchEvent(new CustomEvent('lang-click',{bubbles:true}));return false;">
|
|
137
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M10 8l4 4-4 4"/></svg>
|
|
138
|
+
</button>
|
|
139
|
+
{% comment %} Mobile nav: Wishlist & Compare entries added alongside existing nav items
|
|
140
|
+
<a href="/wishlist" class="wishlist-btn">
|
|
141
|
+
<span>Wishlist</span>
|
|
142
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
|
|
143
|
+
</a>
|
|
144
|
+
<button type="button" class="compare-btn" onclick="this.dispatchEvent(new CustomEvent('compare-click',{bubbles:true}))">
|
|
145
|
+
<span>Compare</span>
|
|
146
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 3 21 8 16 13"/><line x1="21" y1="8" x2="9" y2="8"/><polyline points="8 21 3 16 8 11"/><line x1="3" y1="16" x2="15" y2="16"/></svg>
|
|
147
|
+
</button>
|
|
148
|
+
{% endcomment %}
|
|
149
|
+
</nav>
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
</div>
|
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
|
|
2
|
-
<section class="ab-pgrid">
|
|
3
|
-
<div class="ab-pgrid-wrap">
|
|
4
|
-
{% for product in products limit: 7 %}
|
|
5
|
-
{% assign color_variation = product.variations | where: "type", "color" | first %}
|
|
6
|
-
{% assign image_variation = product.variations | where: "type", "image" | first %}
|
|
7
|
-
{% assign swatch_total = 0 %}
|
|
8
|
-
{% if color_variation and color_variation.props %}
|
|
9
|
-
{% assign swatch_total = color_variation.props.size %}
|
|
10
|
-
{% elsif image_variation and image_variation.props %}
|
|
11
|
-
{% assign swatch_total = image_variation.props.size %}
|
|
12
|
-
{% endif %}
|
|
13
|
-
|
|
14
|
-
{% if forloop.index == 1 %}
|
|
15
|
-
<a
|
|
16
|
-
href="{% if category and category.slug %}/collections/{{ category.slug }}{% else %}#{% endif %}"
|
|
17
|
-
class="ab-pgrid-hero ab-reveal"
|
|
18
|
-
style="animation-delay: {{ forloop.index | times: 0.04 }}s"
|
|
19
|
-
>
|
|
20
|
-
<img
|
|
21
|
-
src="{% if category and category.thumb %}{{ category.thumb }}{% elsif product.thumb %}{{ product.thumb }}{% endif %}"
|
|
22
|
-
alt="{% if category and category.name %}{{ category.name }}{% else %}{{ section_title }}{% endif %}"
|
|
23
|
-
loading="lazy"
|
|
24
|
-
/>
|
|
25
|
-
<span class="ab-pgrid-hero-overlay"></span>
|
|
26
|
-
<div class="ab-pgrid-hero-content">
|
|
27
|
-
{% if category and category.name %}
|
|
28
|
-
<p class="ab-pgrid-hero-cat">{{ category.name }}</p>
|
|
29
|
-
{% endif %}
|
|
30
|
-
{% if section_title %}
|
|
31
|
-
<p class="ab-pgrid-hero-title">{{ section_title }}</p>
|
|
32
|
-
{% endif %}
|
|
33
|
-
</div>
|
|
34
|
-
{% unless hide_view_all %}<span class="ab-pgrid-hero-cta">{{ shop_now }}</span>{% endunless %}
|
|
35
|
-
</a>
|
|
36
|
-
{% endif %}
|
|
37
|
-
|
|
38
|
-
<a href="/products/{{ product.slug }}" class="ab-pgrid-card ab-reveal" style="animation-delay: {{ forloop.index | times: 0.04 }}s">
|
|
39
|
-
{% if product.sale_price and product.sale_price < product.price %}
|
|
40
|
-
{% assign discount = product.price | minus: product.sale_price | times: 100 | divided_by: product.price | floor %}
|
|
41
|
-
<span class="ab-pgrid-badge ab-sale-badge">{{ sale }} -{{ discount }}%</span>
|
|
42
|
-
{% endif %}
|
|
43
|
-
|
|
44
|
-
<div class="ab-pgrid-media">
|
|
45
|
-
<img class="ab-pgrid-img-primary" src="{{ product.thumb }}" alt="{{ product.name }}" loading="lazy" />
|
|
46
|
-
{% if product.images[0] %}
|
|
47
|
-
<img class="ab-pgrid-img-hover" src="{{ product.images[0] }}" alt="{{ product.name }}" loading="lazy" />
|
|
48
|
-
{% endif %}
|
|
49
|
-
{% comment %} Wishlist & Compare action buttons — dispatch custom events caught by the storefront JS layer
|
|
50
|
-
<div class="ab-card-actions">
|
|
51
|
-
<button
|
|
52
|
-
class="ab-wishlist-btn"
|
|
53
|
-
type="button"
|
|
54
|
-
aria-label="Add to wishlist"
|
|
55
|
-
onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('toggle-wishlist',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
|
|
56
|
-
>
|
|
57
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
|
|
58
|
-
</button>
|
|
59
|
-
<button
|
|
60
|
-
class="ab-compare-btn"
|
|
61
|
-
type="button"
|
|
62
|
-
aria-label="Compare"
|
|
63
|
-
onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('toggle-compare',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
|
|
64
|
-
>
|
|
65
|
-
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 3 21 8 16 13"/><line x1="21" y1="8" x2="9" y2="8"/><polyline points="8 21 3 16 8 11"/><line x1="3" y1="16" x2="15" y2="16"/></svg>
|
|
66
|
-
</button>
|
|
67
|
-
</div>
|
|
68
|
-
{% endcomment %}
|
|
69
|
-
<button
|
|
70
|
-
class="ab-pgrid-add-btn"
|
|
71
|
-
type="button"
|
|
72
|
-
aria-label="Add to cart"
|
|
73
|
-
onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('quick-add',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
|
|
74
|
-
></button>
|
|
75
|
-
</div>
|
|
76
|
-
|
|
77
|
-
<div class="ab-pgrid-info">
|
|
78
|
-
<p class="ab-pgrid-name">{{ product.name }}</p>
|
|
79
|
-
|
|
80
|
-
<div class="ab-pgrid-price-row">
|
|
81
|
-
{% if product.sale_price and product.sale_price < product.price %}
|
|
82
|
-
<span class="ab-price-old">{{ product.price }} {{ currency }}</span>
|
|
83
|
-
<span class="ab-pgrid-price ab-price-sale">{{ product.sale_price }} {{ currency }}</span>
|
|
84
|
-
{% else %}
|
|
85
|
-
<span class="ab-pgrid-price">{{ product.price }} {{ currency }}</span>
|
|
86
|
-
{% endif %}
|
|
87
|
-
</div>
|
|
88
|
-
|
|
89
|
-
<div class="ab-pgrid-swatches">
|
|
90
|
-
{% if color_variation and color_variation.props %}
|
|
91
|
-
{% for prop in color_variation.props limit: 6 %}
|
|
92
|
-
<span class="ab-pgrid-swatch" style="background: {{ prop.value }}" title="{{ prop.name }}"></span>
|
|
93
|
-
{% endfor %}
|
|
94
|
-
{% elsif image_variation and image_variation.props %}
|
|
95
|
-
{% for prop in image_variation.props limit: 6 %}
|
|
96
|
-
<span class="ab-pgrid-swatch ab-pgrid-swatch-image" title="{{ prop.name }}">
|
|
97
|
-
<img src="{{ prop.value }}" alt="{{ prop.name }}" loading="lazy" />
|
|
98
|
-
</span>
|
|
99
|
-
{% endfor %}
|
|
100
|
-
{% endif %}
|
|
101
|
-
|
|
102
|
-
{% if swatch_total > 6 %}
|
|
103
|
-
<span class="ab-pgrid-swatch-more">+{{ swatch_total | minus: 6 }}</span>
|
|
104
|
-
{% endif %}
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
</a>
|
|
108
|
-
{% endfor %}
|
|
109
|
-
</div>
|
|
1
|
+
|
|
2
|
+
<section class="ab-pgrid">
|
|
3
|
+
<div class="ab-pgrid-wrap">
|
|
4
|
+
{% for product in products limit: 7 %}
|
|
5
|
+
{% assign color_variation = product.variations | where: "type", "color" | first %}
|
|
6
|
+
{% assign image_variation = product.variations | where: "type", "image" | first %}
|
|
7
|
+
{% assign swatch_total = 0 %}
|
|
8
|
+
{% if color_variation and color_variation.props %}
|
|
9
|
+
{% assign swatch_total = color_variation.props.size %}
|
|
10
|
+
{% elsif image_variation and image_variation.props %}
|
|
11
|
+
{% assign swatch_total = image_variation.props.size %}
|
|
12
|
+
{% endif %}
|
|
13
|
+
|
|
14
|
+
{% if forloop.index == 1 %}
|
|
15
|
+
<a
|
|
16
|
+
href="{% if category and category.slug %}/collections/{{ category.slug }}{% else %}#{% endif %}"
|
|
17
|
+
class="ab-pgrid-hero ab-reveal"
|
|
18
|
+
style="animation-delay: {{ forloop.index | times: 0.04 }}s"
|
|
19
|
+
>
|
|
20
|
+
<img
|
|
21
|
+
src="{% if category and category.thumb %}{{ category.thumb }}{% elsif product.thumb %}{{ product.thumb }}{% endif %}"
|
|
22
|
+
alt="{% if category and category.name %}{{ category.name }}{% else %}{{ section_title }}{% endif %}"
|
|
23
|
+
loading="lazy"
|
|
24
|
+
/>
|
|
25
|
+
<span class="ab-pgrid-hero-overlay"></span>
|
|
26
|
+
<div class="ab-pgrid-hero-content">
|
|
27
|
+
{% if category and category.name %}
|
|
28
|
+
<p class="ab-pgrid-hero-cat">{{ category.name }}</p>
|
|
29
|
+
{% endif %}
|
|
30
|
+
{% if section_title %}
|
|
31
|
+
<p class="ab-pgrid-hero-title">{{ section_title }}</p>
|
|
32
|
+
{% endif %}
|
|
33
|
+
</div>
|
|
34
|
+
{% unless hide_view_all %}<span class="ab-pgrid-hero-cta">{{ shop_now }}</span>{% endunless %}
|
|
35
|
+
</a>
|
|
36
|
+
{% endif %}
|
|
37
|
+
|
|
38
|
+
<a href="/products/{{ product.slug }}" class="ab-pgrid-card ab-reveal" style="animation-delay: {{ forloop.index | times: 0.04 }}s">
|
|
39
|
+
{% if product.sale_price and product.sale_price < product.price %}
|
|
40
|
+
{% assign discount = product.price | minus: product.sale_price | times: 100 | divided_by: product.price | floor %}
|
|
41
|
+
<span class="ab-pgrid-badge ab-sale-badge">{{ sale }} -{{ discount }}%</span>
|
|
42
|
+
{% endif %}
|
|
43
|
+
|
|
44
|
+
<div class="ab-pgrid-media">
|
|
45
|
+
<img class="ab-pgrid-img-primary" src="{{ product.thumb }}" alt="{{ product.name }}" loading="lazy" />
|
|
46
|
+
{% if product.images[0] %}
|
|
47
|
+
<img class="ab-pgrid-img-hover" src="{{ product.images[0] }}" alt="{{ product.name }}" loading="lazy" />
|
|
48
|
+
{% endif %}
|
|
49
|
+
{% comment %} Wishlist & Compare action buttons — dispatch custom events caught by the storefront JS layer
|
|
50
|
+
<div class="ab-card-actions">
|
|
51
|
+
<button
|
|
52
|
+
class="ab-wishlist-btn"
|
|
53
|
+
type="button"
|
|
54
|
+
aria-label="Add to wishlist"
|
|
55
|
+
onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('toggle-wishlist',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
|
|
56
|
+
>
|
|
57
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
|
|
58
|
+
</button>
|
|
59
|
+
<button
|
|
60
|
+
class="ab-compare-btn"
|
|
61
|
+
type="button"
|
|
62
|
+
aria-label="Compare"
|
|
63
|
+
onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('toggle-compare',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
|
|
64
|
+
>
|
|
65
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 3 21 8 16 13"/><line x1="21" y1="8" x2="9" y2="8"/><polyline points="8 21 3 16 8 11"/><line x1="3" y1="16" x2="15" y2="16"/></svg>
|
|
66
|
+
</button>
|
|
67
|
+
</div>
|
|
68
|
+
{% endcomment %}
|
|
69
|
+
<button
|
|
70
|
+
class="ab-pgrid-add-btn"
|
|
71
|
+
type="button"
|
|
72
|
+
aria-label="Add to cart"
|
|
73
|
+
onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('quick-add',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
|
|
74
|
+
></button>
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div class="ab-pgrid-info">
|
|
78
|
+
<p class="ab-pgrid-name">{{ product.name }}</p>
|
|
79
|
+
|
|
80
|
+
<div class="ab-pgrid-price-row">
|
|
81
|
+
{% if product.sale_price and product.sale_price < product.price %}
|
|
82
|
+
<span class="ab-price-old">{{ product.price }} {{ currency }}</span>
|
|
83
|
+
<span class="ab-pgrid-price ab-price-sale">{{ product.sale_price }} {{ currency }}</span>
|
|
84
|
+
{% else %}
|
|
85
|
+
<span class="ab-pgrid-price">{{ product.price }} {{ currency }}</span>
|
|
86
|
+
{% endif %}
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<div class="ab-pgrid-swatches">
|
|
90
|
+
{% if color_variation and color_variation.props %}
|
|
91
|
+
{% for prop in color_variation.props limit: 6 %}
|
|
92
|
+
<span class="ab-pgrid-swatch" style="background: {{ prop.value }}" title="{{ prop.name }}"></span>
|
|
93
|
+
{% endfor %}
|
|
94
|
+
{% elsif image_variation and image_variation.props %}
|
|
95
|
+
{% for prop in image_variation.props limit: 6 %}
|
|
96
|
+
<span class="ab-pgrid-swatch ab-pgrid-swatch-image" title="{{ prop.name }}">
|
|
97
|
+
<img src="{{ prop.value }}" alt="{{ prop.name }}" loading="lazy" />
|
|
98
|
+
</span>
|
|
99
|
+
{% endfor %}
|
|
100
|
+
{% endif %}
|
|
101
|
+
|
|
102
|
+
{% if swatch_total > 6 %}
|
|
103
|
+
<span class="ab-pgrid-swatch-more">+{{ swatch_total | minus: 6 }}</span>
|
|
104
|
+
{% endif %}
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</a>
|
|
108
|
+
{% endfor %}
|
|
109
|
+
</div>
|
|
110
110
|
</section>
|