Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing:
==> locationAddress  [in template "20116#20152#LOCATION-ELEMENT-DETAIL" at line 395, column 6]

----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if locationAddress.street?? && locat...  [in template "20116#20152#LOCATION-ELEMENT-DETAIL" at line 395, column 1]
----
1<#-- variables --> 
2<#assign categoryProductListID = 46179333> 
3<#assign sNavigate = "Navigieren"> 
4<#assign sOurProfile = "Unser Unternehmensprofil auf Google"> 
5<#assign sGetQuote = "Angebot anfordern"> 
6<#assign sOpeningH = "Öffnungszeiten"> 
7<#assign sContactDetails = "Kontaktdaten"> 
8<#assign sProductListing = "Verfügbare Produkte für diesen Standort"> 
9<#assign sLocalContacts = "Ansprechpartner vor Ort"> 
10<#assign sPriceList = "Preisliste"> 
11<#assign sSpecialProducts = "Unser Angebot an Spezialprodukten"> 
12<#assign sZipShort = "PLZ"> 
13<#assign sGoogleCustomerReviews = "Google Bewertungen"> 
14<#assign googleServerApiKey = ""> 
15<#-- /variables --> 
16 
17 
18<link href="https://cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.carousel.min.css" rel="stylesheet"> 
19<link href="https://cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.theme.min.css" rel="stylesheet"> 
20<script src="https://cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.carousel.min.js"></script> 
21 
22<style> 
23    .signed-out .h2 { 
24      display: none !important; 
25
26 
27    .ld-location-detail { 
28      font-family: roboto-regular,sans-serif; 
29
30 
31    .ld-topline { 
32        border-top: 1px solid lightgray; 
33
34 
35    .ld-topbox-heading-h1 { 
36        font-size: 40px; 
37        margin-right: 2em; 
38        color: #023185; 
39
40 
41    .ld-topbox-heading { 
42        display: flex; 
43        flex-direction: row; 
44        align-items: baseline; 
45        flex-wrap: wrap; 
46
47 
48    .ld-topbox-heading-stars { 
49        font-size: 18px; 
50
51 
52 
53    .ld-topbox-heading-stars a { 
54        font-size: 16px; 
55
56 
57    p.ld-topbox-address-address { 
58        font-size: 26px; 
59        font-weight: 500; 
60
61 
62    .ld-topbox-links { 
63        display: flex; 
64        flex-direction: row; 
65        justify-content: space-between; 
66
67 
68    .ld-contactbox-quote a.btn { 
69        border-radius: 0; 
70        padding: 10px 35px; 
71        text-transform: uppercase; 
72        font-size: 11px; 
73        font-weight: 900; 
74        letter-spacing: 2px; 
75        color: #FFF; 
76        background-color: #356090; 
77
78 
79 
80    .ld-contactbox-products-list { 
81        display: flex; 
82        flex-direction: row; 
83        flex-wrap: wrap; 
84
85 
86    .ld-contactbox-products-list p { 
87        width: 48%; 
88        margin-right: 2%; 
89
90 
91    .ld-topbox-address { 
92        padding-top: 20px; 
93
94 
95    .ld-box div.ld-contactbox, 
96    .ld-box div.ld-peoplebox, 
97    .ld-box div.ld-docubox { 
98        padding: 20px 0px 40px 0; 
99
100 
101    .ld-box .ld-contactbox { 
102        padding-right: 20px; 
103
104 
105    .ld-contactbox-contacts a { 
106        font-weight: 500; 
107
108 
109    .ld-box .ld-aboutbox { 
110        padding: 20px 20px 20px 0px; 
111
112 
113    .ld-box div.ld-rangebox { 
114        padding-top: 40px; 
115
116 
117    .ld-box p { 
118        padding: 0; 
119        font-size: 16px; 
120
121 
122    .ld-box .ld-peoplebox-list-contact-name { 
123        font-weight: 500; 
124
125 
126    .ld-backimage { 
127        background-color: #cccccc; 
128        background-position: center; 
129        background-repeat: no-repeat; 
130        background-size: cover; 
131        border: 0; 
132
133 
134    .ld-box .ld-topbox-address-address { 
135        padding-bottom: 20px; 
136
137 
138    .ld-box h4, 
139    .ld-box h3 { 
140        font-size: 18px; 
141        font-weight: 500; 
142        padding-bottom: 0.75em; 
143        color: black; 
144
145 
146    .ld-box h3 { 
147        font-size: 26px; 
148
149 
150    .ld-contactbox-contacts, 
151    .ld-contactbox-hours, 
152    .ld-contactbox-products { 
153        padding-bottom: 20px; 
154
155 
156    .ld-peoplebox-list-contact { 
157        display: flex; 
158        margin-right: 50px; 
159        margin-bottom: 20px; 
160        flex-direction: column; 
161
162 
163    .ld-peoplebox-list { 
164        display: flex; 
165        flex-direction: row; 
166        justify-content: flex-start; 
167        flex-wrap: wrap; 
168
169 
170    .ld-rangebox-list { 
171        display: flex; 
172        flex-direction: row; 
173        overflow: hidden; 
174
175 
176    .ld-rangebox-list-card { 
177        display: flex; 
178        flex-direction: column; 
179
180 
181    .ld-gallerybox { 
182        overflow: hidden; 
183
184 
185    .ld-gallerybox-imageholder { 
186        width: 100%; 
187        max-height: 420px; 
188        height: calc(50vw / 1.5); 
189
190 
191    @media only screen and (max-width: 1023px) { 
192        .ld-gallerybox-imageholder { 
193            height: calc(70vw); 
194
195
196 
197    .ld-rangebox-list-card { 
198        border: solid 1px lightgray; 
199        border-left: 0; 
200        color: black; 
201        <#--  margin-right: -1px; 
202        margin-bottom: -1px;  --> 
203        flex-grow: 1; 
204
205 
206    .ld-rangebox-list-card-image { 
207        width: 100%; 
208        height: calc(25vw / 2.3); 
209        min-height: 150px; 
210        display: flex; 
211        align-items: center; 
212        justify-content: center; 
213        padding: 20px; 
214
215 
216    .ld-rangebox-list-card-text { 
217        padding: 18px 40px; 
218
219 
220    h4.ld-rangebox-list-card-text-h { 
221        font-size: 26px; 
222
223 
224    .ld-docubox-list { 
225        display: flex; 
226        align-items: center; 
227        flex-direction: row; 
228        flex-wrap: wrap; 
229
230 
231    a.ld-docubox-list-doc { 
232        margin-right: 80px; 
233        font-size: 12px; 
234        text-decoration: underline; 
235
236 
237    img.inline-align-self-middle { 
238      max-height: 35px; 
239      margin-right: 5px; 
240      margin-top: 5px; 
241
242 
243    .ld-docubox-list-file { 
244        display: flex; 
245        align-items: center; 
246        margin-bottom: 0.5em; 
247
248 
249    .ld-box .fa-file-pdf { 
250        color: red; 
251
252 
253    .ld-box .fa-file-word { 
254        color: darkblue; 
255
256 
257    .ld-box .fa-file-excel { 
258        color: darkgreen; 
259
260 
261    /* carousels */ 
262 
263    #carousel-products .owl-item:first-child a.ld-rangebox-list-card 
264
265        border: solid 1px lightgray; 
266
267 
268 
269    .owl-carousel .owl-wrapper, 
270    .owl-carousel .owl-item, 
271    #carousel-products .owl-wrapper { 
272        display: flex!important; 
273
274 
275    #carousel-gallery .owl-wrapper-outer, 
276    #carousel-gallery .owl-wrapper, 
277    #carousel-gallery .owl-item { 
278        height: 100%; 
279
280 
281    #carousel-gallery.owl-theme .owl-controls { 
282        margin-top: -30px; 
283
284 
285    #carousel-gallery.owl-theme #progressBar { 
286        height: 6px; 
287        background-color: #3FA9F5; 
288        position: relative; 
289
290 
291    #carousel-gallery.owl-theme #progressBar #bar { 
292        height: 6px; 
293        background-color: #003875; 
294
295 
296    #carousel-gallery.owl-theme .owl-controls .owl-page span { 
297        background: #fff; 
298        width: 12px; 
299        height: 12px; 
300        opacity: 0.99 !important; 
301        transition: all 0.4s ease; 
302
303 
304    #carousel-gallery.owl-theme .owl-controls .owl-page.active span, 
305    #carousel-gallery.owl-theme .owl-controls.clickable .owl-page:hover span { 
306        background: #3FA9F5; 
307
308 
309    #carousel-gallery.owl-theme .owl-controls .owl-page:not(.active) span:hover { 
310        transition: none; 
311        box-shadow: 0 0 3px 1px rgba(0, 0, 0, 0.7); 
312
313 
314    #carousel-gallery.owl-theme .image-overlay { 
315        position: absolute; 
316        width: 100%; 
317        height: 100%; 
318        background: linear-gradient(to top, rgba(0, 0, 0, 0.0), rgba(0, 0, 0, 0.41) 60%, rgba(0, 0, 0, 0.7)); 
319
320 
321    /* carousel nav */ 
322 
323    #carousel-products .owl-wrapper { 
324        z-index: 100; 
325
326 
327    #carousel-products .owl-controls.clickable { 
328        position: absolute; 
329        top: 0; 
330        height: 100%; 
331        width: 100%; 
332        flex-direction: row; 
333        margin-top: 0; 
334
335 
336    #carousel-products .owl-buttons { 
337        height: 100%; 
338        display: flex; 
339        flex-direction: row; 
340        justify-content: space-between; 
341        align-items: center; 
342
343 
344    #carousel-products .owl-buttons .owl-prev, 
345    #carousel-products .owl-buttons .owl-next { 
346        border-radius: 0; 
347        text-align: center; 
348        display: flex; 
349        align-items: center; 
350        z-index: 200; 
351        color: #5A5D66; 
352        font-size: 36px; 
353        margin: 0; 
354        background: 0; 
355        padding: 10px 5px; 
356
357 
358    .ld-rangebox-list-card-logo { 
359        width: 200px; 
360
361 
362</style> 
363 
364<link crossorigin="anonymous" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" rel="stylesheet" /> 
365 
366 
367<#-- get Google Api Key from site settings --> 
368<#assign group = themeDisplay.getScopeGroup()> 
369<#assign gApiKey = group.getTypeSettingsProperty("googleMapsAPIKey")!"key_is_missing"> 
370 
371 
372<#assign dateFormat = "d. MMMM yyyy" /> 
373<#setting locale=locale.toString()> 
374<#-- the langPrefix is used to recieve a google API request in specigfic language - in troubles set it manualy --> 
375<#assign langPrefix = locale?keep_before("_")> 
376 
377<#assign dLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") /> 
378<#assign httpUtil = staticUtil["com.liferay.portal.kernel.util.HttpUtil"] /> 
379 
380 
381<#assign journalArticleId = .vars['reserved-article-id'].data> 
382<#assign journalArticleResourceLocalServiceUtil = serviceLocator.findService('com.liferay.journal.service.JournalArticleResourceLocalService')> 
383<#assign assetCategoryLocalServiceUtil = serviceLocator.findService('com.liferay.asset.kernel.service.AssetCategoryService')> 
384 
385<#assign articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)/> 
386<#assign categoryList=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK) > 
387 
388<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
389<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
390<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")> 
391 
392<#-- build address line --> 
393<#assign address = []> 
394<#assign addressLine = ""> 
395<#if locationAddress.street?? && locationAddress.street.getData() !=""> 
396    <#assign address = address + [locationAddress.street.getData()]> 
397</#if> 
398<#if locationAddress.city?? && locationAddress.city.getData() !=""> 
399    <#assign address = address + [locationAddress.city.getData()]> 
400</#if> 
401<#if locationAddress.region?? && locationAddress.region.getData() !=""> 
402    <#assign address = address + [locationAddress.region.getData()]> 
403</#if> 
404<#if locationAddress.postcode?? && locationAddress.postcode.getData() !=""> 
405    <#assign address = address +  ["${sZipShort} " + locationAddress.postcode.getData()]> 
406</#if> 
407<#if locationAddress.area?? && locationAddress.area.getData() !=""> 
408    <#assign address = address + [locationAddress.area.getData()]> 
409</#if> 
410<#if locationAddress.country?? && locationAddress.country.getData() !=""> 
411    <#assign address = address + [locationAddress.country.getData()]> 
412</#if> 
413<#list address as part_address> 
414    <#assign addressLine = addressLine + part_address> 
415    <#if part_address?has_next> 
416        <#assign addressLine = addressLine + ", "> 
417    </#if> 
418</#list> 
419 
420<#-- set GEO --> 
421<#if geoLoc_customgeolocation.getData() != ""> 
422        <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(geoLoc_customgeolocation.getData())> 
423        <#assign latitude = geolocationJSONObject.getDouble("latitude")> 
424        <#assign longitude = geolocationJSONObject.getDouble("longitude")> 
425        <#assign geo = true> 
426<#else> 
427        <#assign geo = false> 
428</#if> 
429 
430<#-- analyze google place --> 
431<#assign gLocationRate = 0> 
432<#assign gLocationUser_rates = 0> 
433<#assign gLocationStars = 0> 
434<#assign gLocationUrl = "#"> 
435 
436<#if googleServerApiKey?has_content && GoogleLocationID?? && GoogleLocationID.getData() != ""> 
437    <#assign googleApiKey = gApiKey/> 
438    <#assign httpUtil = staticUtil["com.liferay.portal.kernel.util.HttpUtil"] /> 
439    <#assign response = httpUtil.URLtoString("") > 
440    <#assign resp = response?eval> 
441    <#if resp.result??> 
442        <#if resp.result.rating??> 
443            <#assign gLocationRate = resp.result.rating> 
444            <#assign gLocationUser_rates = resp.result.user_ratings_total> 
445            <#assign gLocationStars = countStars(gLocationRate)> 
446            <#assign gLocationUrl = resp.result.url> 
447        </#if> 
448        <#if resp.result.opening_hours??> 
449            <#assign gLocationWeekdays = resp.result.opening_hours.weekday_text> 
450        </#if> 
451    <#-- if bad respond --> 
452    <#elseif resp.status?? && resp.error_message??> 
453        <p>Google palace API: ${resp.status}<BR> 
454        Message: ${resp.error_message}</p> 
455    <#elseif resp.status??> 
456        <p>Google palace API: ${resp.status}</p> 
457    </#if> 
458</#if> 
459 
460 
461<article class="ld-location-detail"> 
462	<div class="row" style="margin-top:40px"> 
463        <div class="ld-wrapper col-xs-12"> 
464 
465        <div class=""> 
466            <div class="container"> 
467                <div class="row ld-box"> 
468                    <div class="col-xs-12 ld-topbox"> 
469                        <div class="ld-topbox-heading"> 
470                            <h1 class="ld-topbox-heading-h1">${locationName.getData()}</h1> 
471                            <#if gLocationRate gte 3> 
472                                <span class="ld-topbox-heading-stars">${gLocationRate} ${gLocationStars} | <a href="${gLocationUrl}" target="_blank">${gLocationUser_rates} ${sGoogleCustomerReviews}</a></span> 
473                            </#if> 
474                        </div> 
475                        <div class="ld-topbox-address"> 
476                            <p class="ld-topbox-address-address">${addressLine}</p> 
477                        </div> 
478                        <div class="ld-topbox-links"> 
479                            ${geo?then('<a target="_blank" href="https://google.com/maps/dir//${latitude},${longitude}">${sNavigate}</a>', '')} 
480                            <#if gLocationUrl != "#"> 
481                                <a href="${gLocationUrl}" target="_blank">${sOurProfile}</a> 
482                            </#if> 
483                        </div> 
484                    </div> 
485                </div> 
486            </div> 
487        </div> 
488 
489        <div class="ld-topline"> 
490            <div class="container"> 
491                <div class="row ld-box"> 
492                    <div class="col-md-6 ld-contactbox"> 
493                        <div class="ld-contactbox-contacts"> 
494                            <h4>${sContactDetails}</h4> 
495                            <!-- Cemex DE specific --> 
496                            <#if contactPerson?? && contactPerson.getData() != ""><p>Ansprechpartner: ${contactPerson.getData()}</p></#if> 
497                            <#if telephoneNumber?? && telephoneNumber.getData() != ""><p>Telefon: ${telephoneNumber.getData()}</p></#if> 
498                            <#if workTelephoneNumber?? && workTelephoneNumber.getData() != ""><p>Telefon: ${workTelephoneNumber.getData()}</p></#if> 
499                            <#if firma?? && firma.getData() != ""><p>Firma: ${firma.getData()}</p></#if> 
500                            <#if fax?? && fax.getData() != ""><p>Fax: ${fax.getData()}</p></#if> 
501                            <div></div> 
502                            <!-- Cemex DE specific --> 
503                            <#assign basic_contact_has_data = false /> 
504                            <#if BasicContact?? && BasicContact.getSiblings()?has_content> 
505                              <#list BasicContact.getSiblings() as cur_BasicContact> 
506                                <#if cur_BasicContact.getData() !=""> 
507                                    <#if cur_BasicContact.EmailContact?? && cur_BasicContact.EmailContact.getData() !=""> 
508                                      <#assign basic_contact_has_data = true /> 
509                                    </#if> 
510                                    <#if cur_BasicContact.PhoneContact?? && cur_BasicContact.PhoneContact.getData() !=""> 
511                                      <#assign basic_contact_has_data = true /> 
512                                    </#if> 
513                                </#if> 
514                              </#list> 
515                            </#if> 
516                            <#if basic_contact_has_data> 
517                                <#list BasicContact.getSiblings() as cur_BasicContact> 
518                                <p>${cur_BasicContact.getData()}: 
519                                    <#if cur_BasicContact.PhoneContact.getData() !=""> 
520                                        <a href="tel:${cur_BasicContact.PhoneContact.getData()}">${cur_BasicContact.PhoneContact.getData()}</a> 
521                                    <#else> 
522                                      <#if cur_BasicContact.EmailContact.getData() !=""> 
523                                          <a href="mailto:${cur_BasicContact.EmailContact.getData()}">${cur_BasicContact.EmailContact.getData()}</a> 
524                                      </#if> 
525                                    </#if> 
526                                </p> 
527                                </#list> 
528                            </#if> 
529                        </div> 
530                        <#if gLocationWeekdays?? || (openingHours?? && openingHours.getData() != "")> 
531                          <div class="ld-contactbox-hours"> 
532                              <h4>${sOpeningH}</h4> 
533                              <#if gLocationWeekdays?? && openingHours.getData() = ""> 
534                              <p> 
535                              <#list gLocationWeekdays as cur_gLocationWeekdays> 
536                                  ${cur_gLocationWeekdays}<br> 
537                              </#list> 
538                              </p> 
539                              <#else> 
540                                  <p>${openingHours.getData()}</p> 
541                              </#if> 
542                          </div> 
543                        </#if> 
544                        <div class="ld-contactbox-products"> 
545                            <h4>${sProductListing}</h4> 
546                            <div class="ld-contactbox-products-list"> 
547                            <#if categoryList?has_content> 
548                                <#list categoryList as category> 
549                                    <#if category.vocabularyId = categoryProductListID> 
550                                        <p>${category.getName()} 
551                                            <#--if categoryList.getDescription() !=""> 
552                                                – ${categoryList.getDescription()} 
553                                            </#if--> 
554                                        </p> 
555                                    </#if> 
556                                </#list> 
557                            </#if> 
558                            </div> 
559                        </div> 
560 
561 
562                        <!-- Cemex DE specific --> 
563                        <#assign quotePageLinkFriendlyUrl = getWebURL("/angebot-anfordern")> 
564                        <#if QuotePageLink?? && QuotePageLink.getFriendlyUrl() !=""> 
565                          <#assign quotePageLinkFriendlyUrl = QuotePageLink.getFriendlyUrl()> 
566                        </#if> 
567                        <div class="cta-secondary" data-component="cta-secondary"> 
568                            <a data-senna-off="true" href="${quotePageLinkFriendlyUrl}" class="cta-secondary-link" target="_blank" rel="noopener noreferrer" title="${sGetQuote}"> 
569                              <span class="button-copy">${sGetQuote}</span> 
570                            </a> 
571                        </div> 
572                        <!-- Cemex DE specific --> 
573 
574                    </div> 
575                    <div class="col-md-6 ld-mapbox"> 
576                        <#if geo> 
577                            <@liferay_map["map-display"] 
578                                geolocation=true 
579                                latitude=latitude 
580                                longitude=longitude 
581                                name="geoLoc_customgeolocation" 
582                            /> 
583                        </#if> 
584                    </div> 
585                </div> 
586            </div> 
587        </div> 
588 
589            <#if SummaryLabel?? && SummaryLabel.getData() !=""> 
590                <div class="ld-topline"> 
591                    <div class="container"> 
592                        <div class="row ld-box"> 
593                            <div class="col-md-6 ld-aboutbox"> 
594                                <div class="ld-aboutbox-about"> 
595                                    <h3>${SummaryLabel.getData()}</h3> 
596                                    <p>${SummaryLabel.SummaryText.getData()}</p> 
597                                </div> 
598                            </div> 
599                            <div class="col-md-6 ld-gallerybox"> 
600 
601                                <div id="carousel-gallery" class="owl-carousel owl-theme"> 
602                                    <#if LocationImage.getSiblings()?has_content> 
603                                        <#list LocationImage.getSiblings() as cur_LocationImage> 
604                                            <#if cur_LocationImage.getData()?? && cur_LocationImage.getData() != ""> 
605                                            <div class="ld-gallerybox-imageholder ld-backimage" style="background-image: url('${cur_LocationImage.getData()}');"> 
606                                            </div> 
607                                            </#if> 
608                                        </#list> 
609                                    </#if> 
610                                </div> 
611                            </div> 
612                        </div> 
613                    </div> 
614                </div> 
615            </#if> 
616 
617 
618        <#assign local_contact_has_data = false /> 
619        <#if LocalContact?? && LocalContact.getSiblings()?has_content> 
620          <#list LocalContact.getSiblings() as cur_LocalContact> 
621            <#if cur_LocalContact.getData() !=""> 
622               <#if cur_LocalContact.WorkPositionLabel.getData() !=""> 
623                  <#assign local_contact_has_data = true /> 
624                </#if> 
625                <#if cur_LocalContact.email.getData() !=""> 
626                  <#assign local_contact_has_data = true /> 
627                </#if> 
628                <#if cur_LocalContact.PhoneNumber.getData() !=""> 
629                  <#assign local_contact_has_data = true /> 
630                </#if> 
631            </#if> 
632          </#list> 
633        </#if> 
634        <#if local_contact_has_data> 
635          <div class="ld-topline"> 
636              <div class="container"> 
637                  <div class="row ld-box"> 
638                      <div class="col-md-12 ld-peoplebox"> 
639                          <h3>${sLocalContacts}</h3> 
640                          <div class="ld-peoplebox-list"> 
641                                  <#list LocalContact.getSiblings() as cur_LocalContact> 
642                                      <div class="ld-peoplebox-list-contact"> 
643                                          <#if cur_LocalContact.getData() !=""> 
644                                              <span class="ld-peoplebox-list-contact-name">${cur_LocalContact.getData()}</span> 
645                                              <#if cur_LocalContact.WorkPositionLabel.getData() !=""> 
646                                                  <span class="ld-peoplebox-list-contact-text">${cur_LocalContact.WorkPositionLabel.getData()}</span> 
647                                              </#if> 
648                                              <#if cur_LocalContact.email.getData() !=""> 
649                                                  <span class="ld-peoplebox-list-contact-text">E-mail: ${cur_LocalContact.email.getData()}</span> 
650                                              </#if> 
651                                              <#if cur_LocalContact.PhoneNumber.getData() !=""> 
652                                                  <span class="ld-peoplebox-list-contact-text">phone: ${cur_LocalContact.PhoneNumber.getData()}</span> 
653                                              </#if> 
654                                          </#if> 
655                                      </div> 
656                                  </#list> 
657                          </div> 
658                      </div> 
659                  </div> 
660              </div> 
661          </div> 
662        </#if> 
663 
664        <#if attachment?? && attachment.getSiblings()?? && attachment.getSiblings()?has_content> 
665          <div class="ld-topline"> 
666              <div class="container"> 
667                  <div class="row ld-box"> 
668                          <#list attachment.getSiblings() as cur_attachment> 
669                            <#if isNotEmptyElement(cur_attachment.file)> 
670                              <@generateAttachmentElement cur_attachment.file.getData() cur_attachment.title/> 
671                            </#if> 
672                          </#list> 
673                  </div> 
674              </div> 
675          </div> 
676        </#if> 
677 
678        <#function isNotEmptyElement element> 
679          <#return element?? && element.getData()?? && element.getData()!=""> 
680        </#function> 
681 
682        <#macro generateAttachmentElement attachmentURL title> 
683            <#assign counter = 0 > 
684            <#list attachmentURL?split("/") as chunkURL> 
685                <#if counter == 2> 
686                    <#assign groupId = chunkURL?number > 
687                </#if> 
688                <#if counter == 5> 
689                    <#if chunkURL?index_of("?") != -1> 
690                        <#assign uuId = chunkURL?substring(0, chunkURL?index_of("?")) > 
691                    <#else> 
692                        <#assign uuId = chunkURL > 
693                    </#if> 
694                </#if> 
695                <#assign counter = counter+1 > 
696            </#list> 
697 
698            <#assign fileEntry = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService') /> 
699            <#assign file=fileEntry.getFileEntryByUuidAndGroupId(uuId, getterUtil.getLong(groupId)) > 
700            <#assign fileName = file.getTitle()> 
701            <#assign fileDescription = file.getDescription()> 
702 
703            <div class="col-md-2 ld-docubox"> 
704                <div class="ld-docubox-list-file"> 
705                    ${fileDescription} 
706                    <img class="inline-align-self-middle" src="/documents/46167902/46169687/pdf-icon.png/aff2ac7d-c8ed-eaf1-19fe-28e4df36ee69?t=1523381391249" alt="${fileDescription}"> 
707                    &nbsp; 
708                    <a href="${attachmentURL}" class="ld-docubox-list-doc ico-pdf" target="_blank"> 
709                      <#if isNotEmptyElement(title)> 
710                            ${title.getData()} 
711                        <#else> 
712                          ${fileName} 
713                        </#if> 
714                    </a> 
715                </div> 
716            </div> 
717        </#macro> 
718 
719        <#assign pricelist_document_file_has_data = false /> 
720        <#if PricelistDocumentFile?? && PricelistDocumentFile.getSiblings()?has_content> 
721          <#list PricelistDocumentFile.getSiblings() as cur_PricelistDocumentFile> 
722            <#if cur_PricelistDocumentFile.getData() !=""> 
723               <#if cur_PricelistDocumentFile.FileDisplayName.getData() !=""> 
724                  <#assign pricelist_document_file_has_data = true /> 
725                </#if> 
726            </#if> 
727          </#list> 
728        </#if> 
729        <#if pricelist_document_file_has_data> 
730          <div class="ld-topline"> 
731              <div class="container"> 
732                  <div class="row ld-box"> 
733                      <div class="col-md-12 ld-docubox"> 
734                          <h3>${sPriceList}</h3> 
735                          <div class="ld-docubox-list"> 
736                                  <#list PricelistDocumentFile.getSiblings() as cur_PricelistDocumentFile> 
737                                      <div class="ld-docubox-list-file"> 
738                                          <i class="${cur_PricelistDocumentFile.FileTypeIcon.getData()} fa-2x inline-align-self-middle">&nbsp;</i> 
739                                          <a href="${cur_PricelistDocumentFile.getData()}" class="ld-docubox-list-doc ico-pdf" target="_blank"> 
740                                              ${cur_PricelistDocumentFile.FileDisplayName.getData()} 
741                                          </a> 
742                                      </div> 
743                                  </#list> 
744                          </div> 
745                      </div> 
746                  </div> 
747              </div> 
748          </div> 
749        </#if> 
750    </div> 
751</article> 
752 
753<#assign product_range_has_data = false /> 
754<#if ProductRange?? && ProductRange.getSiblings()?has_content> 
755  <#list ProductRange.getSiblings() as cur_ProductRange> 
756    <#if cur_ProductRange.getData() !=""> 
757      <#assign product_range_has_data = true /> 
758    </#if> 
759  </#list> 
760</#if> 
761<#if product_range_has_data> 
762  <div class="ld-topline"> 
763      <div class="container"> 
764        <div class="row ld-box"> 
765            <div class="col-md-12 ld-rangebox"> 
766                <h3>${sSpecialProducts}</h3> 
767                <div id="carousel-products" class="ld-rangebox-list owl-carousel owl-theme"> 
768                    <#list ProductRange.getSiblings() as cur_ProductRange> 
769                        <@printCard cur_ProductRange/> 
770                    </#list> 
771                </div> 
772            </div> 
773        </div> 
774      </div> 
775  </div> 
776</#if> 
777 
778<#-- macros & functions --> 
779 
780<#macro printCard card> 
781 
782        <#assign webContentData = jsonFactoryUtil.createJSONObject(card.getData())/> 
783        <#if !webContentData.classPK??> 
784            <#return> 
785        </#if> 
786        <#assign classPK = webContentData.classPK?number!"" /> 
787        <#assign journalArticle = journalArticleLocalService.getLatestArticle(classPK)!"none"> 
788        <#assign journalArticleId = journalArticle.getId() /> 
789        <#assign document=saxReaderUtil.read(journalArticle.getContent()) /> 
790 
791        <#-- select localization in content to display --> 
792        <#-- use actual language or default if is missed --> 
793        <#assign availableLocale=document.getRootElement().attributeValue('available-locales') /> 
794        <#assign defaultLocale=document.getRootElement().attributeValue('default-locale') /> 
795        <#if availableLocale?contains(locale)> 
796            <#assign displayLocale=locale> 
797        <#else> 
798            <#assign displayLocale=defaultLocale> 
799        </#if> 
800 
801        <#assign cardHeading=document.valueOf("//dynamic-element[@name='ProductHeading']//dynamic-content[@language-id='${displayLocale}']") /> 
802        <#assign cardDescription=document.valueOf("//dynamic-element[@name='ProductDescription']//dynamic-content[@language-id='${displayLocale}']") /> 
803        <#assign cardImage=document.valueOf("//dynamic-element[@name='ProductImage']//dynamic-content[@language-id='${displayLocale}']") /> 
804        <#assign cardLogo=document.valueOf("//dynamic-element[@name='ProductLogo']//dynamic-content[@language-id='${displayLocale}']") /> 
805        <#--assign ImgMediumUrl = themeDisplay.getPortalURL() + "/o/adaptive-media/image/" + OptionalTourMainImage.fileEntryId + "/medium/" + OptionalTourMainImage.uuid /--> 
806 
807        <#assign cardUrl=document.valueOf("//dynamic-element[@name='LinkToPage']//dynamic-content[@language-id='${displayLocale}']") /> 
808        <#if cardUrl =""> 
809            <#assign cardExtUrl=document.valueOf("//dynamic-element[@name='AlternateURLUseOnlyForLinksOutOfTheSite']//dynamic-content[@language-id='${displayLocale}']") /> 
810        </#if> 
811        <#if cardUrl = ""> 
812            <#assign cardUrl = "#"> 
813        </#if> 
814        <#if cardUrl != "#"> 
815            <#assign layoutId = cardUrl?keep_before("@")?number> 
816            <#assign groupId = cardUrl?keep_after_last("@")?number> 
817            <#assign pageLayout = layoutLocalService.getLayout(groupId, false, layoutId)> 
818            <#assign cardUrl = pageLayout.getFriendlyURL() /> 
819        </#if> 
820        <#-- get the right siteURL by system --> 
821            <#assign siteURL = themeDisplay.getPortalURL() /> 
822            <#assign virtualHostname = layout.getLayoutSet().getVirtualHostname() /> 
823            <#if !virtualHostname?? || siteURL?index_of(virtualHostname) == -1 || virtualHostname?length == 0 > 
824                <#assign siteURL = siteURL + layout.getGroup().getPathFriendlyURL(layout.isPrivateLayout(), themeDisplay)/> 
825                <#assign siteURL = siteURL + layout.getGroup().getFriendlyURL()/> 
826            </#if> 
827            <#assign cardUrl = siteURL + cardUrl> 
828 
829        <a class="ld-rangebox-list-card" href="${cardUrl}"> 
830            <div class="ld-rangebox-list-card-image ld-backimage" style="background-image: url('${cardImage}');"> 
831            <#if cardLogo != ""> 
832                <img class="ld-rangebox-list-card-logo" src="${cardLogo}"/> 
833            </#if> 
834            </div> 
835            <div class="ld-rangebox-list-card-text"> 
836                <h4 class="ld-rangebox-list-card-text-h">${cardHeading}</h4> 
837                <p class="ld-rangebox-list-card-text-p">${cardDescription}</p> 
838            </div> 
839        </a> 
840</#macro> 
841 
842<#function getWebURL pathURL> 
843  <#-- get the right siteURL by system --> 
844  <#assign siteURL = themeDisplay.getPortalURL() /> 
845  <#assign virtualHostname = layout.getLayoutSet().getVirtualHostname() /> 
846  <#if !virtualHostname?? || siteURL?index_of(virtualHostname) == -1 || virtualHostname?length == 0 > 
847      <#assign siteURL = siteURL + layout.getGroup().getPathFriendlyURL(layout.isPrivateLayout(), themeDisplay)/> 
848      <#assign siteURL = siteURL + layout.getGroup().getFriendlyURL()/> 
849  </#if> 
850  <#return siteURL + pathURL> 
851</#function> 
852<#-- write stars based on number --> 
853<#function countStars stars> 
854    <#assign return = ""> 
855    <#list 1..5 as x> 
856        <#if (x > stars)> 
857            <#assign return = return + '<i class="glyphicon glyphicon-star-empty"></i>'> 
858        <#else> 
859            <#assign return = return + '<i class="glyphicon glyphicon-star"></i>'> 
860        </#if> 
861    </#list> 
862    <#return return> 
863</#function> 
864 
865<#-- scripts --> 
866 
867<#-- owl carousel init gallery--> 
868<script> 
869  $(function() { 
870    var time = 14; // time in seconds 
871    var $bar, isPause, tick, percentTime; 
872 
873    //Init the carousel 
874    var carouselGallery = { 
875      slideSpeed: 900, 
876      paginationSpeed: 500, 
877      singleItem: true, 
878      afterInit: progressBar, 
879      afterMove: moved, 
880      startDragging: pauseOnDragging, 
881      // Responsive 
882      responsive: true, 
883      responsiveRefreshRate: 200, 
884      responsiveBaseWidth: window 
885    }; 
886 
887    $("#carousel-gallery").owlCarousel(carouselGallery); 
888    //Init progressBar 
889    function progressBar(elem) { 
890      // init handlers 
891      //pause on mouseover 
892      elem.on('mouseover', function() { 
893        isPause = true; 
894      }); 
895      elem.on('mouseout', function() { 
896        isPause = false; 
897      }); 
898      //build progress bar elements 
899      buildProgressBar(elem); 
900      //start counting 
901      start(elem); 
902
903 
904    //create div#progressBar and div#bar then prepend 
905    function buildProgressBar(elem) { 
906      var $progressBar = $("<div>", { 
907        id: "progressBar" 
908      }); 
909      $bar = $("<div>", { 
910        id: "bar" 
911      }); 
912      $progressBar.append($bar).prependTo(elem); 
913
914 
915    function start(elem) { 
916      //reset timer 
917      percentTime = 0; 
918      isPause = false; 
919      //run interval every 0.01 second 
920      tick = setInterval(function (){interval(elem)}, 10); 
921    }; 
922 
923    function interval(elem) { 
924      if (isPause === false) { 
925        percentTime += 1 / time; 
926        $bar.css({ 
927          width: percentTime + "%" 
928        }); 
929        //if percentTime is equal or greater than 100 
930        if (percentTime >= 100) { 
931          //slide to next item 
932          elem.trigger('owl.next') 
933
934
935
936 
937    //pause while dragging 
938    function pauseOnDragging() { 
939      isPause = true; 
940
941 
942    //moved callback 
943    function moved(elem) { 
944      //clear interval 
945      clearTimeout(tick); 
946      //start again 
947      start(elem); 
948
949 
950  }); 
951</script> 
952 
953 
954 
955<#-- owl carousel init products stripe--> 
956<script> 
957  $(function() { 
958 
959    //Init the carousel 
960    var carouselProducts = { 
961      slideSpeed: 900, 
962      paginationSpeed: 500, 
963      singleItem: false, 
964      pagination: false, 
965      navigation: true, 
966      items: 4, 
967      navigationText:["<i class='fas fa-chevron-left'></i>","<i class='fas fa-chevron-right'></i>"], 
968      // Responsive 
969      responsive: true, 
970      responsiveRefreshRate: 200, 
971      responsiveBaseWidth: window, 
972      itemsDesktop: [1199, 3], 
973      itemsDesktopSmall: [1020, 2], 
974      itemsTablet:  [1020, 2], 
975      itemsMobile:  [670, 1], 
976    }; 
977 
978    $("#carousel-products").owlCarousel(carouselProducts); 
979 
980  }); 
981</script>