Lisävarusteet
Promotuotteet

Genelec metallitarra
Mitat: 5,9cm x 1,2cm
Metallilogo, jossa kirjaimet on eriteltynä toisistaan. Helppo kuitenkin liimata kiinni, sillä tarrassa on mukana ns. asetin jonka avulla kokonaisuuden saa liimattua kerralla paikalleen.

GLM 4 muki
Vetoisuus 3 dl.

Genelec muki
Vetoisuus 2 dl.

The Ones metallitarra
Koko 4 x 5 cm

Genelec kuksa + Genelec Moments -kahvi
Suomessa valmistettu ekologinen Genelec-kuksa.

Genelec take away -termosmuki
Take away -termosmuki josta nautit kahvit, teet tai vettä. Istuu hyvin käteen ja on helppo pitää puhtaana.

Genelec kuksa
Suomessa valmistettu ekologinen kuksa.

Kangaskassi 'The Ones'
Kangaskassi 'The Ones'

Genelec AcoustiTape
Helppokäyttöinen, jokaisen audioammattilaisen korvaamaton työkalu.
GLM 4 muki
Muki on valmistettu laadukkaasta vitroposliinista ja se kestää uunin, pakkasen, mikron sekä konepesun. Vetoisuus 3 dl.
Toimitusaika 2-4 days + shipping
Toimitusalue Suomi
Genelec muki
Muki on valmistettu laadukkaasta vitroposliinista ja se kestää uunin, pakkasen, mikron sekä konepesun. Vetoisuus 2 dl.
Toimitusaika 2-4 days + shipping
Toimitusalue Suomi
The Ones metallitarra
Koko:
Leveys 5 cm
Korkeus 4 cm
Toimitusaika 2-4 days + shipping
Toimitusalue Suomi
Genelec kuksa + Genelec Moments -kahvi
Suomessa valmistettu ekologinen Genelec-kuksa kestää sekä -30°C pakkasta että kiehuvaa vettä. Kuksan voi pestä pestä käsin tai astianpesukoneessa. Jotta kuksa kestäisi käytössänne mahdollisimman pitkään, emme suosittele tuotetta mikroon, hellalle tai avotulelle laitettavaksi.
Tilavuus 2,1 dl, paino 83 g, korkeus 6,0 cm x leveys 9,3 cm x pituus 16,5 cm. Lisäksi pakkauksessa mukana suomalaisen Inka Paahtimon paahtamaa Genelec Moments tummapaahtokahvia.
Koko: 200 g.
Genelec take away -termosmuki
Take away -termosmuki. Käytännöllinen QuickStop-pikakorkki jonka saa purettua kahteen osaan puhdistamisen helpottamiseksi. Kaksikerrosrakenne on suunniteltu pitämään juoma kylmänä (6 tuntia) tai lämpimänä (2 tuntia). Genelec-lasermerkkaus mukin kyljessä.
Tilavuus 4 dl.
Kaikki osat BPA-vapaita.
Väri: teräs.
Korkeus 20 cm.
Halkaisija 6,5–8,1 cm.
Paino 279 g.
Toimitusaika 2-4 days + shipping
Toimitusalue Suomi
Genelec kuksa
Kupilkan valmistama kotimainen ja ekologinen Genelec-kuksa. Puukomposiitti on lähtöisin suomalaisista sertifioiduista metsistä ja valmistuksessa on käytetty EKOenergiaa. Kuksan voi pestä käsin tai astianpesukoneessa ja se kestää sekä -30 °C pakkasta että kiehuvaa vettä. Jotta kuksa kestäisi käytössänne mahdollisimman pitkään, emme suosittele sen käyttöä mikrossa, hellalla tai avotulella.
Kuksan materiaali on Kareline-luonnonkuitukomposiitti. Elinkaaren lopuksi sen voi kierrättää, polttaa lämpöenergiaksi tai palauttaa valmistajalle uusiokäyttöä varten.
Kupilka-pakkaus on valmistettu kierrätettävästä uusiopahvista.
Tilavuus 2,1 dl
Paino 83 g
Korkeus 6,0 cm x leveys 9,3 cm x pituus 16,5 cm
Toimitusaika 2-4 days + shipping
Toimitusalue Suomi
An error has occurred when reading existing sub-variable "image"; see cause exception! The type of the containing value was: extended_hash+string (org.json.JSONObject wrapped into f.e.b.StringModel) ---- FTL stack trace ("~" means nesting-related): - Failed at: ${listingImage.assets.image.url} [in template "20116#20152#373955" at line 119, column 54] ----
1<#-----------------------------------------------------------------------------
2 INIT
3------------------------------------------------------------------------------>
4<#include "${templatesPath}/227209" />
5
6<#assign cmsContentService = serviceLocator.findService("com.ch5finland.genelec.cms.service.CMSContentService") >
7<#assign cmsContentFormatterService = serviceLocator.findService("com.ch5finland.genelec.cms.service.CMSContentFormatterService") >
8<#assign profileService = serviceLocator.findService("com.ch5finland.genelec.cms.service.ProfileService") >
9<#assign profile = profileService.getProfile(request) >
10<#assign instanceId = themeDisplay.getPortletDisplay().getId()>
11<#assign siteDefaultLocale = portalUtil.getSiteDefaultLocale(groupId)?string?replace("_","-") >
12
13<#switch themeDisplay.getLanguageId()>
14 <#case "fi_FI">
15 <#assign t = {
16 "buyProduct" : "Osta",
17 "deliveryTime" : "Toimitusaika",
18 "deliveryTo" : "Toimitetaan"
19 }>
20 <#break>
21 <#default>
22 <#assign t = {
23 "buyProduct" : "Buy Product",
24 "deliveryTime" : "Delivery time",
25 "deliveryTo" : "Delivery to"
26 }>
27</#switch>
28
29<#-----------------------------------------------------------------------------
30 LOOP ENTRIES
31------------------------------------------------------------------------------>
32<#if entries?has_content>
33 <#if portletDisplay.getTitle() != "Asset Publisher">
34 <h2 class="section-heading col-xs-12 text-bolder">${portletDisplay.getTitle()}</h2>
35 </#if>
36 <div class="product-cards cards-tight-container mt-4">
37 <div class="row">
38
39 <#---------------------------------------------------------------------
40 Group entries by sku
41 ----------------------------------------------------------------------->
42 <#assign resultSku = []>
43 <#list entries as curEntry>
44 <#assign articleIdAsString = curEntry.getAssetRenderer().getArticle().getArticleId() >
45 <#assign cmsEntity = cmsContentService.getEntityByArticleId(profile, articleIdAsString) >
46 <#assign type = cmsEntity.getField(profile, "/entity/type/id")>
47 <#if cmsEntity.getField(profile, "/entity/fields/sku")?has_content>
48 <#assign sku = cmsEntity.getField(profile, "/entity/fields/sku")>
49 <#if sku?length > 7>
50 <#assign sku = sku?substring(0, 8)>
51 <#if !resultSku?has_content || !resultSku?seq_contains(sku)>
52 <#assign resultSku = resultSku + [sku] />
53 </#if>
54 </#if>
55 </#if>
56 </#list>
57 <#assign resultSkuTemp = []>
58 <#list entries as curEntry>
59
60 <#---------------------------------------------------------------------
61 INIT ENTRY
62 ---------------------------------------------------------------------->
63 <#assign articleIdAsString = curEntry.getAssetRenderer().getArticle().getArticleId() >
64 <#assign cmsEntity = cmsContentService.getEntityByArticleId(profile, articleIdAsString) >
65 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/summary")?has_content>
66 <#assign summary = cmsContentFormatterService.getMarkdown(cmsEntity.getLocalizedField(profile, "/entity/fields/summary"))>
67 </#if>
68 <#if cmsEntity.getField(profile, "/entity/fields/listPriceEur")?has_content>
69 <#assign price = cmsEntity.getField(profile, "/entity/fields/listPriceEur")>
70 </#if>
71
72 <#if cmsEntity.getField(profile, "/entity/id")?has_content>
73 <#assign id = cmsEntity.getField(profile, "/entity/id")>
74 </#if>
75 <#if cmsEntity.getLocalizedField(profile, "/entity/relationships/listingImage/locales")?has_content>
76 <#assign listingImage = cmsEntity.getLocalizedField(profile, "/entity/relationships/listingImage/locales") >
77 </#if>
78 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/b2cVisibilityKey")?has_content>
79 <#assign b2cVisibility = cmsEntity.getLocalizedField(profile, "/entity/fields/b2cVisibilityKey")>
80 </#if>
81 <#assign showItem = false>
82 <#if type == "promotionalItem">
83 <#if cmsEntity.getField(profile, "/entity/fields/sku")?has_content>
84 <#assign skuwithsize = cmsEntity.getField(profile, "/entity/fields/sku")>
85 <#if skuwithsize?length > 7>
86 <#assign skuwithsize = skuwithsize?substring(0, 8)>
87 <#if resultSku?seq_contains(skuwithsize) && !resultSkuTemp?seq_contains(skuwithsize)>
88 <#assign resultSkuTemp = resultSkuTemp + [skuwithsize] />
89 <#assign showItem = true>
90 </#if>
91 </#if>
92 </#if>
93 <#else>
94 <#assign showItem = true>
95 </#if>
96 <#if cmsContentService.getUrlForEntity(themeDisplay, id)?has_content>
97 <#assign pageUrl = cmsContentService.getUrlForEntity(themeDisplay, id)>
98 <#else>
99 <#assign pageUrl = "">
100 </#if>
101
102 <#if showItem>
103 <div class="col-12 col-sm-6 col-md-4 col-xl-3">
104 <#if type == "promotionalItem">
105 <div class="card card-img promotionalItem-card" onClick="openPromotionalItemPopup${instanceId}('${id}-${instanceId}')">
106 <#else>
107 <#if pageUrl?has_content>
108 <a href="${pageUrl}">
109 </#if>
110 <div class="card card-img promotionalItem-card">
111 </#if>
112 <div class="aspect-ratio aspect-ratio-4-to-3">
113 <#if listingImage?has_content>
114 <#assign listingImageAlt = "" >
115 <#if !listingImage.properties.isNull("altText")>
116 <#assign listingImageAlt = localizeField(listingImage.properties.altText, profile.getCMSLangCode()) >
117 </#if>
118 <picture>
119 <source data-srcset="${listingImage.assets.image.url}?w=250&fm=webp" type="image/webp" class="aspect-ratio-item-fluid aspect-ratio-item-center-middle" srcset="${listingImage.assets.image.url}?w=250&fm=webp">
120 <img class="aspect-ratio-item-fluid aspect-ratio-item-center-middle" style="height: 100%; opacity: 1;" data-src="${listingImage.assets.image.url}?w=250" src="${listingImage.assets.image.url}?w=250" alt="${listingImageAlt}">
121 </picture>
122
123 </#if>
124 </div>
125 <div class="card-padding-tight text-dark">
126
127 <h4 class="text-bolder promoItem-title">
128 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/title")?has_content>
129 ${cmsEntity.getLocalizedField(profile, "/entity/fields/title")}
130 </#if>
131 </h4>
132 <div class="text-bolder small promoItem-summary">
133 <#if summary?has_content>
134 ${summary}
135 </#if>
136 </div>
137 <#if price?has_content>
138 <div class="text-bolder">${price} €</div>
139 </#if>
140 </div>
141 </div>
142 <#if type != "promotionalItem">
143 <#if pageUrl?has_content>
144 </a>
145 </#if>
146 </#if>
147 </div>
148 </#if>
149 </#list>
150 </div>
151 </div>
152
153
154
155<#-- Popup -->
156<#if type == "promotionalItem">
157<div id="theme-popupPromotionalItem-${instanceId}" class="popup">
158<#list entries as curEntry>
159<#assign variants = "">
160 <#assign articleIdAsString = curEntry.getAssetRenderer().getArticle().getArticleId() >
161 <#assign cmsEntity = cmsContentService.getEntityByArticleId(profile, articleIdAsString) >
162 <#if cmsEntity.getField(profile, "/entity/id")?has_content>
163 <#assign id = cmsEntity.getField(profile, "/entity/id")>
164 </#if>
165 <#if cmsEntity.getLocalizedField(profile, "/entity/assets/mainImage")?has_content>
166 <#assign mainImage = cmsEntity.getLocalizedField(profile, "/entity/assets/mainImage") >
167 </#if>
168 <#if cmsEntity.getField(profile, "/entity/relationships/images")?has_content>
169 <#assign images = cmsEntity.getField(profile, "/entity/relationships/images") >
170 </#if>
171 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/b2cVisibilityKey")?has_content>
172 <#assign b2cVisibility = cmsEntity.getLocalizedField(profile, "/entity/fields/b2cVisibilityKey")>
173 </#if>
174 <#if cmsEntity.getField(profile, "/entity/fields")?has_content>
175 <#assign fields = cmsEntity.getField(profile, "/entity/fields")>
176 </#if>
177 <#if cmsEntity.getField(profile, "/entity/fields/variants/rows")?has_content>
178 <#assign variants = cmsEntity.getField(profile, "/entity/fields/variants/rows")>
179 </#if>
180
181 <#if curEntry?index == 0>
182 <div class="close-button-container">
183 <button class="close" onClick="closePromotionalItemPopup${instanceId}('${id}-${instanceId}')" id="closeButtonPromotionalItem-${id}-${instanceId}"></button>
184 </div>
185 <div class="panel popup-content" id="popupContentPromotionalItem-${instanceId}">
186 <div class="panel-body">
187 </#if>
188
189 <div class="promotionalItemContent" id="promotionalItemContent-${id}-${instanceId}">
190 <div class="row">
191 <div class="col-lg-6">
192 <#if images?has_content>
193 <div class="zoom-gallery variant-gallery" id="main-img-${id}-${instanceId}">
194 <#list images.iterator() as img>
195 <#assign imgId = img.id>
196 <#assign altText = "" >
197 <#if !img.properties.isNull("altText") >
198 <#assign altText = localizeField(img.properties.altText, profile.getCMSLangCode()) >
199 </#if>
200
201 <#if img?index = 0>
202 <#if img.assets.image.mediaType?contains("video")>
203 <div data-slide-id="video-${imgId}" class="zoom-gallery-slide video-slide">
204 <video class="buy-section-video lazy">
205 <data-src src="${img.url}" type="video/mp4"></data-src>
206 </video>
207 </div>
208 <#else>
209 <div data-slide-id="zoom-${id}-${instanceId}" class="zoom-gallery-slide active zoom-${id}-${instanceId}">
210 <a class="MagicZoom product-page-product-image" id="zoom-demo-${id}-${instanceId}" href="${img.assets.image.url}?fm=jpg&q=85&w=2000">
211 <img id="buy-product-main-img" class="" src="${img.assets.image.url}?fm=jpg&q=85&w=610" alt="${altText}" />
212 </a>
213 </div>
214 </#if>
215 </#if>
216 </#list>
217 <div class="selectors">
218 <div id="thumb-img-${id}" class="">
219 <div class="promotionalItem-carousel owl-carousel owl-theme image-carousel-container">
220 <#list images.iterator() as img>
221 <#assign altText = "" >
222 <#if !img.properties.isNull("altText") >
223 <#assign altText = localizeField(img.properties.altText, profile.getCMSLangCode()) >
224 </#if>
225 <#if img.assets.image.mediaType?contains("video")>
226 <div class="image-carousel-wrapper">
227 <a data-slide-id="video-${imgId}" class="video-thumb">
228 <span class="icon-play"></span>
229 </a>
230 </div>
231 <#else>
232 <div class="image-carousel-wrapper">
233 <a data-slide-id="zoom-${id}-${instanceId}" data-zoom-id="zoom-demo-${id}-${instanceId}" href="${img.assets.image.url}?fm=jpg&q=85&w=2000" data-image="${img.assets.image.url}?fm=jpg&q=85&w=610" class="img-thumb">
234 <img data-src="${img.assets.image.url}?fm=jpg&q=85&w=120" class="owl-lazy" alt="${altText}" />
235 </a>
236 </div>
237 </#if>
238 </#list>
239 </div>
240 </div>
241 </div>
242 </div>
243 </#if>
244 </div>
245
246
247
248 <div class="col-lg-6">
249 <#assign itemSizes = "">
250 <#if cmsEntity.getField(profile, "/entity/fields/listPriceEur")?has_content>
251 <#assign price = cmsEntity.getField(profile, "/entity/fields/listPriceEur")>
252 </#if>
253 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/itemSize")?has_content>
254 <#assign itemSizes = cmsEntity.getLocalizedField(profile, "/entity/fields/itemSize")>
255 </#if>
256 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/deliveryTime")?has_content>
257 <#assign deliveryTime = cmsEntity.getLocalizedField(profile, "/entity/fields/deliveryTime")>
258 </#if>
259 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/deliveryRegions")?has_content>
260 <#assign deliveryRegions = cmsEntity.getLocalizedField(profile, "/entity/fields/deliveryRegions")>
261 </#if>
262 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/content")?has_content>
263 <#assign content = cmsContentFormatterService.getMarkdown(cmsEntity.getLocalizedField(profile, "/entity/fields/content"))>
264 </#if>
265 <#if cmsEntity.getLocalizedField(profile, "/entity/fields/title")?has_content>
266 <h2 class="product-page-product-title">${cmsEntity.getLocalizedField(profile, "/entity/fields/title")}</h2>
267 </#if>
268 <#if itemSizes?has_content>
269 <h4 class="text-bolder">
270 <#list itemSizes.iterator() as itemSize>
271 ${itemSize}<#sep>,
272 </#list>
273 </h4>
274 </#if>
275 <#if content?has_content>
276 <div class="small promoItem-content">${content}</div>
277 </#if>
278 <#if b2cVisibility ="showWithPrice">
279 <#if price?has_content>
280 <div class="price-variant">
281 <span class="h1">${price} €</span>
282 <span class="h3">/<@liferay.language key="unit"/></span>
283 <span class="text-muted small text-bold"><@liferay.language key="inc-vat"/></span>
284 </div>
285 </#if>
286 <#elseif b2cVisibility = "showForPurchase">
287 <#if price?has_content>
288 <div class="price-variant">
289 <span class="h1">${price} €</span>
290 <span class="h3">/<@liferay.language key="unit"/></span>
291 <span class="text-muted small text-bold"><@liferay.language key="inc-vat"/></span>
292 </div>
293 </#if>
294 <br>
295 <#if deliveryTime?has_content || deliveryRegions?has_content>
296 <p class="text-muted text-bolder small">
297 <#if deliveryTime?has_content>
298 <@liferay.language key="delivery-time"/> ${deliveryTime}<br>
299 </#if>
300 <#if deliveryRegions?has_content>
301 <@liferay.language key="delivery-to"/>
302 <#list deliveryRegions.iterator() as deliveryRegion>
303 ${deliveryRegion}<#sep>,
304 </#list>
305 </#if>
306 </p>
307 </#if>
308 <#if variants?has_content && !variants?contains("Default")>
309 <div class="size-container">
310 <p class="text-muted text-bolder small sizeText"><@liferay.language key="size"/></p>
311 <select class="form-control product-size-dropdown" onchange="changeSku(this.value, '${id}')" style="">
312 <#list variants.iterator() as variant>
313 <#if variant?index == 0>
314 <option value="${variant.SKU}" selected="">${variant.Variant}</option>
315 <#else>
316 <option value="${variant.SKU}">${variant.Variant}</option>
317 </#if>
318 </#list>
319 </select>
320 </div>
321
322 </#if>
323 <#assign skus = "">
324 <#if variants?has_content>
325 <#assign skus = variants.get(0).SKU>
326 <#elseif fields.sku?has_content>
327 <#assign skus = fields.sku>
328 </#if>
329 <#if skus?has_content>
330 <div class="btn-container">
331 <a class="btn btn-theme btn-product-page-buy-${instanceId} btn-bold btn-medium promoBuyBtn-${id}" href="#" data-sku="${skus}">
332 ${t.buyProduct}
333 </a>
334
335 <select class="form-control buy-product-dropdown" style="">
336 <option value="1" selected="">1</option>
337 <option value="2">2</option>
338 <option value="3">3</option>
339 <option value="4">4</option>
340 <option value="5">5</option>
341 <option value="6">6</option>
342 <option value="7">7</option>
343 <option value="8">8</option>
344 <option value="9">9</option>
345 <option value="10">10</option>
346 </select>
347
348 </div>
349 </#if>
350 </#if>
351
352 <#-- Additional information -->
353
354 <#if cmsEntity.getField(profile, "/entity/relationships/additionalInformation")?has_content>
355
356 <div id="additional-accordion-${id}-${instanceId}">
357 <div class="card additionalinfo">
358 <div class="card-header" id="additional-heading-${id}-${instanceId}">
359
360 <a href="#" class="font-weight-bold" style="display: block;" data-toggle="collapse" data-target="#additional-${id}-${instanceId}" aria-expanded="true" aria-controls="additional-${id}-${instanceId}">
361 ${cmsEntity.getLocalizedField(profile, "/entity/relationships/additionalInformation/properties/title")}
362 <i class="fa fa-chevron-down pull-right mt-1" aria-hidden="true"></i>
363 </a>
364
365 </div>
366
367 <div id="additional-${id}-${instanceId}" class="collapse" aria-labelledby="additional-heading-${id}-${instanceId}" data-parent="#additional-accordion-${id}-${instanceId}">
368 <div class="card-body">
369 <#if cmsEntity.getField(profile, "/entity/relationships/additionalInformation/properties/summary")?has_content>
370 <div>${cmsContentFormatterService.getMarkdown(cmsEntity.getLocalizedField(profile, "/entity/relationships/additionalInformation/properties/summary"))}</div>
371 </#if>
372 <#if cmsEntity.getField(profile, "/entity/relationships/additionalInformation/properties/content")?has_content>
373 <div>${cmsContentFormatterService.getMarkdown(cmsEntity.getLocalizedField(profile, "/entity/relationships/additionalInformation/properties/content"))}</div>
374 </#if> </div>
375 </div>
376 </div>
377 </div>
378 </#if>
379
380 </div>
381 </div>
382 </div>
383 <#if curEntry?index == (curEntry?size-1)>
384 </div>
385 </div>
386 </#if>
387 </#list>
388</div>
389</#if>
390
391</#if>
392
393<style>
394
395 .product-cards {
396 margin: auto -4px;
397 }
398
399 .card {
400 border: 1px solid #CCC;
401 cursor: pointer;
402 }
403
404 .card.additionalinfo {
405 border-left : none;
406 border-right: none;
407 margin-top: 40px;
408 }
409
410 .additionalinfo .card-header {
411 background-color: #fff;
412 border-bottom: none;
413 }
414
415 .card-padding-tight {
416 padding: calc(10 / 16 * 1em);
417 min-height: 5em;
418 }
419
420 .cards-tight-container .card {
421 margin-bottom: 0;
422 }
423
424 .close-button-container {
425 position: absolute;
426 left: 50%;
427 transform: translateX(-50%);
428 width: 85%;
429 max-width: 1300px;
430 z-index: 1;
431 }
432
433 [class*="btn-product-page-buy"] {
434 width: 40%;
435 min-width: 250px;
436 height: 43px;
437 }
438
439 .buy-product-dropdown {
440 display: inline-block;
441 width: 60px;
442 height: 43px !important;
443 border-radius: 0;
444 border-left: none;
445 position: absolute;
446 clear: left;
447 padding-left: 2%;
448 font-size: 1.3em;
449 border: 2px solid #ced4da;
450 border-left: none;
451 line-height: 20px;
452 }
453
454 .product-size-dropdown {
455 display: inline-block;
456 width: 100px;
457 height: 43px !important;
458 border-radius: 0;
459 clear: left;
460 padding-left: 2%;
461 font-size: 1.3em;
462 border: 2px solid #ced4da;
463 line-height: 20px;
464 }
465
466 .size-container{
467 margin-top: 25px;
468 margin-bottom: 0;
469 }
470
471 .cards-tight-container .row>[class*="col-"] {
472 padding: 4px !important;
473 }
474
475 .promotionalItemContent {
476 display:none;
477 }
478
479 .promotionalItem-carousel .owl-prev {
480 width: 17px;
481 height: 100px;
482 position: absolute;
483 left: -20px;
484 top: 47%;
485 transform: translateY(-50%);
486 display: block !important;
487 border:0px solid black;
488 font-size: 2em !important;
489 }
490
491 .promotionalItem-carousel .owl-next {
492 width: 17px;
493 height: 100px;
494 position: absolute;
495 right: -20px;
496 top: 47%;
497 transform: translateY(-50%);
498 display: block !important;
499 border:0px solid black;
500 font-size: 2em !important;
501 }
502 .image-carousel-container {
503 width: 100%;
504 padding: 30px 10px 10px 10px;
505 }
506 .mz-thumb {
507 width: 72px;
508 height: 95px;
509 opacity: .3;
510 border: 1px solid #CCC;
511 padding: 5px;
512 margin: 0 5px;
513
514 /* Applies to every thumbnail */
515 }
516
517 .video-thumb{
518 width: 72px;
519 height: 95px;
520 opacity: .3;
521 border: 1px solid #CCC;
522 padding: 5px;
523 margin: 0 5px;
524 display: block;
525 }
526 .mz-thumb:hover:not(.mz-thumb-selected) img {
527 filter: none !important;
528 -webkit-filter: none !important;
529
530 }
531 .mz-thumb.active {
532 border-bottom: 4px solid #007A53;
533 opacity: 1;
534
535 /* Applies to the active thumbnail */
536 }
537
538
539 .video-thumb.active {
540 border-bottom: 4px solid #007A53;
541 opacity: 1;
542
543 }
544 .mz-thumb-selected img {
545 filter: none !important;
546 -webkit-filter: none !important;
547 }
548 .mz-thumb img {
549 box-shadow: none !important;
550 max-height: 85px;
551 }
552 .mz-expand-thumbnails .magic-thumb-selected img {
553 filter: none !important;
554 -webkit-filter: none !important;
555
556 }
557 .mz-expand-thumbnails .magic-thumb>img {
558 filter: brightness(50%);
559 -webkit-filter: brightness(50%);
560
561 }
562 .variant-gallery {
563 display:none;
564 }
565 .zoom-gallery-slide {
566 display: none;
567 }
568 .zoom-gallery-slide.active {
569 display: block;
570 }
571 .zoom-gallery .selectors a span {
572 position: absolute;
573 color:#fff;
574 text-shadow: 0px 1px 10px #000;
575 top:50%;
576 left:50%;
577 display: inline-block;
578 transform:translateY(-50%) translateX(-50%);
579 -webkit-transform:translateY(-50%) translateX(-50%);
580 font-size:50px;
581 z-index: 100;
582 }
583 .image-carousel-wrapper{
584 height:102px;
585 width:80px;
586
587 }
588
589 .promoItem-content p{
590 font-family: 'Helvetica Neue LT W01_75 Bold', Arial, sans-serif;
591 }
592
593 .sizeText{
594 margin-bottom:5px;
595 }
596</style>
597
598<script>
599$(window).on("load", function() {
600 var maxHeight = Math.max.apply(null, $('.promoItem-summary').map(function(){return $(this).height()}));
601 $('.promoItem-summary').height(maxHeight);
602 });
603
604$(window).on("load", function() {
605 var maxHeight = Math.max.apply(null, $('.promoItem-title').map(function(){return $(this).height()}));
606 $('.promoItem-title').height(maxHeight);
607 });
608
609
610$(window).on("load", function() {
611 var maxHeight = Math.max.apply(null, $('.promotionalItem-card').map(function(){return $(this).height()}));
612 $('.promotionalItem-card').height(maxHeight);
613 });
614
615function openPromotionalItemPopup${instanceId}(promotionalItemId) {
616 var shortPromotionalItemId = promotionalItemId.replace("com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet_","");
617
618 window.location.hash = "#dialog-" + shortPromotionalItemId;
619
620 openPopup("PromotionalItem-${instanceId}");
621 $('#promotionalItemContent-'+promotionalItemId).show();
622
623 //update:
624 $('#theme-popupPromotionalItem-${instanceId} .close').attr('id','closeButtonPromotionalItem-'+promotionalItemId);
625 $('#theme-popupPromotionalItem-${instanceId} .close').attr('onclick', 'closePromotionalItemPopup${instanceId}("' + promotionalItemId + '")');
626 $('#closeButtonPromotionalItem-'+promotionalItemId).show();
627
628 $('div[id^=main-img]').hide();
629 $("#main-img-"+promotionalItemId).show();
630
631 $('.zoom-gallery-slide').removeClass('active');
632 $('.zoom-'+promotionalItemId).addClass('active');
633
634 $('.img-thumb').removeClass('active');
635 $('.video-thumb').removeClass('active');
636 $('.mz-thumb-selected').addClass('active');
637
638 MagicZoom.start('zoom-demo-'+promotionalItemId);
639
640}
641
642function closePromotionalItemPopup${instanceId}(promotionalItemId) {
643 history.pushState(null, null, ' ');
644 closePopup("PromotionalItem-${instanceId}");
645 $('#promotionalItemContent-'+promotionalItemId).hide();
646
647 //update:
648 $('#closeButtonPromotionalItem-'+promotionalItemId).hide();
649}
650
651// close popup when clicking outside of the element
652$(document).mouseup(function (e) {
653 if(!$('#popupContent'+"PromotionalItem-"+'${instanceId}').is(e.target) &&
654 $('#popupContent'+"PromotionalItem-"+'${instanceId}').has(e.target).length == 0 &&
655 $(e.target).attr('class') != 'close' &&
656 $('#theme-popup'+"PromotionalItem-"+'${instanceId}').css("display") == "block"){
657 closePopup("PromotionalItem-${instanceId}");
658 $('div[id^=promotionalItemContent-]').hide();
659 history.pushState(null, null, ' ');
660 }
661});
662
663 $('.promotionalItem-carousel').owlCarousel({
664 loop:false,
665 nav:true,
666 dots:false,
667 navText : ['<i class="icon-angle-left">','<i class="icon-angle-right">'],
668 margin:5,
669 lazyLoad:true,
670 responsive:{
671 0:{items:3, slideBy:3},
672 600:{items:5, slideBy:5},
673 1000:{items:7, slideBy:7}
674 },
675});
676
677
678$('.zoom-gallery .selectors a').hover(function(e) {
679 $('.zoom-gallery .zoom-gallery-slide').removeClass('active');
680 $('.zoom-gallery .zoom-gallery-slide[data-slide-id="'+$(this).attr('data-slide-id')+'"]').addClass('active');
681 e.preventDefault();
682 });
683
684
685$('.video-thumb').hover(function(){
686 $(".buy-section-video").get(0).play();
687 $('.img-thumb').removeClass('active');
688 $(this).addClass('active');
689});
690
691$('.img-thumb').hover(function(){
692 $('.video-thumb').removeClass('active');
693 $('.img-thumb').removeClass('active');
694 $(this).addClass('active');
695 if ($(".video-thumb").length){
696 $(".buy-section-video").get(0).pause();
697 }
698
699});
700$( document ).ready(function() {
701$('.mz-thumb-selected').addClass('active');
702});
703
704
705
706
707 $(document).on('click', '.mz-expand', function () {
708 $('.img-thumb').removeClass('active');
709 $('.mz-thumb-selected').addClass('active');
710});
711
712
713var mzOptions = {
714 zoomMode: 'off',
715 zoomPosition: 'inner',
716 selectorTrigger: 'hover',
717 lazyZoom: true,
718 autostart: false,
719 onZoomReady: function() {
720 $('.mz-thumb-selected').addClass('active');
721 }
722};
723
724$('.btn-product-page-buy-${instanceId}').click(function(event){
725
726 genelec.cart().then(function(cart){
727 let qty = $(event.target).parent().find(".buy-product-dropdown").val();
728 let sku = $(event.target).attr("data-sku");
729
730 // qty is number and sku exists
731 if (!isNaN(qty) && sku) {
732 cart.add(sku, qty).then(function(){$( document ).trigger("genelec-shopping-cart-updated");});
733 }
734 });
735
736 return false;
737 });
738
739 function changeSku(sku, id) {
740 $('.promoBuyBtn-' + id).attr('data-sku', sku);
741
742};
743
744<#--
745 Open popup if id in hash
746-->
747$( document ).ready(function() {
748
749 if (!window.dialogOpenTriggerHandled && window.location.hash.startsWith("#dialog")) {
750 var popUpId = window.location.hash.replace("#dialog-", "").replace("INSTANCE", "com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet_INSTANCE");
751 var instance = popUpId.split("-")[1];
752 var popUpOpenFunction = "openPromotionalItemPopup" + instance;
753 window[popUpOpenFunction](popUpId);
754 }
755
756 window.dialogOpenTriggerHandled= true;
757});
758
759
760
761</script>