Skip to Main Content

Bosch Auto Parts

Bosch Auto Parts

An error occurred while processing the template.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.bosch.autoparts.product.nav.service.BapProductNavService")  [in template "20097#20123#649649" at line 1, column 33]

----
Tip: If the failing expression is known to 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: #assign BapProductNavService = servic...  [in template "20097#20123#649649" at line 1, column 1]
----
1<#assign BapProductNavService = serviceLocator.findService("com.bosch.autoparts.product.nav.service.BapProductNavService")> 
2<#assign countryCode = locale.getCountry()?lower_case> 
3<#assign storedVehicles = []> 
4<#assign selctedVehicle = ""> 
5<#if countryCode == "mx"> 
6<#assign listAssetCategory = BapProductNavService.getNavigationCategory(themeDisplay, "product categories mx")> 
7 
8<#else> 
9 
10<#assign listAssetCategory = BapProductNavService.getNavigationCategory(themeDisplay, "product categories")> 
11</#if> 
12 
13 
14<#assign siteUrl = themeDisplay.getScopeGroup().getFriendlyURL()> 
15<#assign pageURL = themeDisplay.getLayout().getFriendlyURL()> 
16<#assign categoryBaseUrl = propsUtil.get("category-page-base-url")> 
17<#assign productsPageUrl = propsUtil.get("products-page-url-"+themeDisplay.getLanguageId())> 
18 
19<div id="bap-navigation"  role="navigation"> 
20    <#if entries?has_content> 
21        <div id="main-nav-container"> 
22            <div id="parent-nav-container" class="container"> 
23             
24				<div class="navbar-expand-md navbar-light "> 
25					<div class="navbar-toggler-container"> 
26						<button class="navbar-toggler" id="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> 
27							<i class="bap-icon bap-list-view-mobile"> </i> 
28						</button> 
29						 
30						<button type="button" id="close" class="close" aria-label="Close"> 
31							<i class="bap-icon bap-close"  aria-hidden="true"> </i> 
32						</button> 
33					</div> 
34					<a   
35                        href="${themeDisplay.getPortalURL()}" 
36                        class="auto-parts" 
37                    > 
38						<@liferay.language key="label-auto-parts" /> 
39					</a> 
40				</div> 
41				<div class="border-bottom-mob" id="nav-mob-line" style="display:none" ></div> 
42             
43                <ul class="nav nav-tabs d-none d-lg-block" id="myTab" role="list"> 
44                    <li class="nav-item" onClick="openSecondLevel('Products')"> 
45                        <a 
46                            class="nav-link"  
47                            id="products-tab"  
48                            data-toggle="tab"  
49                            href="#bap-products" 
50                        > 
51							<span><@liferay.language key="label-products" /></span> 
52							<i class="bap-icon bap-right"> </i> 
53						</a> 
54                    </li> 
55 
56                    <#list entries as entry> 
57                        <#if entry.hasChildren()> 
58                            <li class="nav-item"  onClick="openSecondLevel('${entry.getName()}')" > 
59                                <a 
60                                    
61                                    class="nav-link"  
62                                    id="${entry.getName()?replace(' ', '')?lower_case}-tab"  
63                                    data-toggle="tab"  
64                                    href="#${entry.getName()?replace(' ', '')?lower_case}" 
65                                > 
66                                 
67									<span>${entry.getName()}</span> 
68									<i class="bap-icon bap-right"> </i> 
69                                </a> 
70                            </li> 
71                        <#else> 
72							<#assign 
73								active_class = "" 
74							/> 
75 
76							<#if pageURL?replace('/', '')?lower_case == entry.getName()?lower_case > 
77								<#assign 
78									active_class = "active" 
79								/> 
80							</#if> 
81							 
82                            <li class="nav-item"> 
83                                <a 
84                                    onClick="performAnalyticsNavigation('${entry.getName()}','')" 
85                                    class="nav-link ${active_class}" 
86                                    ${entry.getTarget()} 
87                                    id="${entry.getName()?replace(' ', '')?lower_case}-tab"  
88                                    href="${entry.getURL()}"  
89                                >${entry.getName()}</a> 
90                            </li> 
91                        </#if> 
92                    </#list> 
93                     <li class="auto-parts-lg"> 
94                        <a 
95                            href="${themeDisplay.getPortalURL()}" 
96                            class="auto-parts" 
97                        > 
98                            <@liferay.language key="label-auto-parts" /> 
99                        </a> 
100                    </li> 
101                </ul> 
102            </div> 
103        </div> 
104    </#if> 
105    <div id="child-nav-container" class="container"> 
106            <div class="tab-content"> 
107                <#if entries?has_content> 
108         
109                <#list entries as entry> 
110                    <div class="tab-pane fade" id="${entry.getName()?replace(' ', '')?lower_case}" role="tabpanel" aria-labelledby="${entry.getName()?replace(' ', '')?lower_case}"> 
111                         <#list entry.getChildren()?chunk(4) as row> 
112                            <div class="row col-md-12"> 
113                                <#list row as page> 
114                                    <div class="col-md-3"> 
115                                        <#if page.hasChildren()> 
116												<a  id="${page.getName()?replace(' ', '')?lower_case}-tab" 
117													href="#${page.getName()?replace(' ', '')?lower_case}-pane" 
118													data-toggle="tab"  
119                                                    onClick="performAnalyticsNavigation('${entry.getName()}','${page.getName()}')" 
120												> 
121													<span>${page.getName()}</span> 
122													<i class="bap-icon bap-right"> </i> 
123												</a> 
124                                        <#else> 
125                                                <a 
126                                                onClick="performAnalyticsNavigation('${entry.getName()}','${page.getName()}')" 
127                                                    id="${page.getName()?replace(' ', '')?lower_case}-tab" ${page.getTarget()} 
128                                                    href="${page.getURL()}"  
129                                                >${page.getName()}</a> 
130                                        </#if> 
131                                    </div> 
132                                </#list> 
133                            </div> 
134                        </#list> 
135                    </div> 
136                </#list> 
137 
138                 <#list entries as entry> 
139                     <#list entry.getChildren() as child> 
140                        <div class="tab-pane fade" id="${child.getName()?replace(' ', '')?lower_case}-pane" role="tabpanel" aria-labelledby="${child.getName()?replace(' ', '')?lower_case}"> 
141                            <div class="row col-md-12"> 
142                                <div class="col-md-3"> 
143                                    <a href="#${entry.getName()?replace(' ', '')?lower_case}" 
144                                    data-toggle="tab"  
145                                    >${child.getName()}</a> 
146                                </div> 
147                            </div> 
148                            <#list child.getChildren()?chunk(4) as row> 
149                                <div class="row col-md-12"> 
150                                    <#list row as grandchild> 
151                                        <div class="col-md-3"> 
152                                            <a href="${grandchild.getURL()}" ${grandchild.getTarget()}>${grandchild.getName()}</a> 
153                                        </div> 
154                                    </#list> 
155                                </div> 
156                            </#list> 
157                        </div> 
158                    </#list> 
159                </#list> 
160        
161            </#if> 
162 
163            <#--  TOP LEVEL PRODUCT NAV  --> 
164 
165             <div class="tab-pane fade" id="bap-products" role="tabpanel" aria-labelledby="products"> 
166                <div class="row"> 
167					<div class="col-md-12 back-icon-mobile"> 
168						<a id="back-close">  
169                        <i class="bap-icon bap-arrow-left"> </i> 
170						</a> 
171					</div> 
172                    <#list listAssetCategory as assetCategory> 
173                        <#if assetCategory.getParentCategoryId() == 0 > 
174                            <div class="col-md-3"> 
175                                <#if assetCategory.isLeafNode()> 
176									<a onClick="performAnalyticsNavigation('Products','${assetCategory.getName()}')" href="${categoryBaseUrl}${assetCategory.getUrl()}"  
177									>${assetCategory.getName()}</a> 
178                                <#else> 
179									<a onClick="performAnalyticsNavigation('Products','${assetCategory.getName()}')" href="#${assetCategory.getName()?replace(' ', '')?lower_case}-pane" 
180								data-toggle="tab" 
181									> 
182										<span>${assetCategory.getName()}</span> 
183										<i class="bap-icon bap-right"> </i> 
184									</a> 
185                                </#if> 
186                                 
187                            </div> 
188                        </#if> 
189                    </#list> 
190                    <div class="col-md-12 view-all-link"> 
191						<a class="catalog-url" href="${productsPageUrl}"> 
192							<span><@liferay.language key="label-view-all" /></span> <i class="bap-icon bap-right"> </i> 
193						</a> 
194                    </div> 
195                </div> 
196            </div> 
197 
198            <#--  SECONDARY LEVEL PRODUCT NAV  --> 
199 
200            <#list listAssetCategory as assetCategory> 
201                <#if assetCategory.getParentCategoryId() == 0 > 
202                    <div class="tab-pane fade" id="${assetCategory.getName()?replace(' ', '')?lower_case}-pane" role="tabpanel" aria-labelledby="${assetCategory.getName()?replace(' ', '')?lower_case}"> 
203                        <div class="row"> 
204                            <div class="back-icon"> 
205                                <a class="tertiary-back-arrow"  
206                                href="#bap-products" 
207                                data-toggle="tab"  
208                                > <i class="bap-icon bap-left"> </i> </a> 
209                                <a class="tertiary-back-data"  
210                                href="${categoryBaseUrl}${assetCategory.getUrl()}" 
211                                > ${assetCategory.getName()}</a> 
212                            </div> 
213                        </div> 
214                        <div class="back-icon-mobile"> 
215                            <div class="row"> 
216								<a  
217									href="#bap-products" 
218									data-toggle="tab"  
219                                >  
220									<i class="bap-icon bap-arrow-left"> </i> 
221								</a> 
222                                <a class="tertiary-back-data"  
223                                href="${categoryBaseUrl}${assetCategory.getUrl()}" 
224                                > ${assetCategory.getName()}</a> 
225                            </div> 
226                        </div> 
227                        <div class="row"> 
228                            <#list listAssetCategory as childAssetCategory> 
229                                <#if childAssetCategory.getParentCategoryId() == assetCategory.getCategoryId() > 
230									<div class="col-md-3"> 
231										<a href="${categoryBaseUrl}${childAssetCategory.getUrl()}">${childAssetCategory.getName()}</a> 
232									</div> 
233                                </#if> 
234                            </#list> 
235                        </div> 
236                    </div> 
237                </#if> 
238            </#list> 
239        </div> 
240    </div> 
241</div> 
242 
243<script> 
244    $(function() { 
245         
246        
247        
248        $('.tab-pane a').on('click', function(){ 
249            $('.tab-pane a').removeClass('active'); 
250        }); 
251		 
252		 
253		$('#navbar-toggler').on('click', function(){ 
254			handleHamburgerButton();	 
255		}); 
256		 
257		 
258		$('.nav-item').on('click', function(){ 
259			if ( $('#myTab').css('display') == 'none' || $('#myTab').css("visibility") == "hidden"){ 
260				$('#myTab').removeClass("d-none d-lg-block"); 
261			}else{ 
262				$('#myTab').addClass("d-none d-lg-block"); 
263			} 
264		 
265            $('.tab-content').show(); 
266            $('#navbar-toggler').hide(); 
267            $('#close').show(); 
268            $("#nav-mob-line").hide(); 
269             
270            //Priti 
271            if($('#bap-products.active').length > 0){ 
272                $("#main-nav-container").removeClass("bottom-border"); 
273            } 
274            else{ 
275                $("#main-nav-container").addClass("bottom-border"); 
276            } 
277		}); 
278		 
279		 
280		$('#close').on('click', function(){ 
281			handleCloseButton(); 
282		}); 
283		 
284		$('#back-close').on('click', function(){ 
285			handleBackButton(); 
286		}); 
287		 
288		$('#bap-navigation a').on('click', function() { 
289			if (window.matchMedia('screen and (max-width: 768px)').matches)  { 
290				$(window).scrollTop($('#bap-navigation').offset().top - 50); 
291			} 
292		}); 
293    }); 
294 
295    function getSelectedVehicle(){ 
296         
297        var countryCode = "${countryCode}" ;         
298        var storedVehicles = []; 
299        var selctedVehicleName = ''; 
300        if(countryCode == 'mx'){ 
301            if( window.localStorage.getItem("bap.vehicles_mx") !== null){ 
302         storedVehicles = window.localStorage.getItem("bap.vehicles_mx"); 
303            } 
304        } 
305        else{ 
306            if( window.localStorage.getItem("bap.vehicles") !== null){ 
307        storedVehicles = window.localStorage.getItem("bap.vehicles") 
308            } 
309        } 
310 
311        if(storedVehicles.length > 0){ 
312            
313          let selectedVehicle = JSON.parse(storedVehicles).filter(function (e) { 
314            return e.active == true; 
315          }); 
316            if(selectedVehicle.length > 0){ 
317                selctedVehicleName = selectedVehicle[0].vehicleName; 
318            } 
319 
320        } 
321        //alert("selctedVehicle=="+selctedVehicleName) 
322        return selctedVehicleName; 
323        //priti 
324    } 
325 
326    function performAnalyticsNavigation(category,subCategory){ 
327        //debugger; 
328        var  selectedVehicalName = getSelectedVehicle(); 
329        //alert("selectedVehicalName=="+selectedVehicalName +"  category=="+category+"  subCategory=="+subCategory); 
330            window.dataLayer = window.dataLayer || [];  
331            dataLayer.push({  
332            'event': 'navigation', 
333            'navi_category': category, //e.g.:products 
334            'navi_subcategory': subCategory, //e.g.:brakes 
335            'vehicle': selectedVehicalName //e.g.:2020 Ford EcoSport 1.0L L3 GAS 
336            });  
337    } 
338     
339    function handleHamburgerButton(){ 
340        if ( $('#myTab').css('display') == 'none' || $('#myTab').css("visibility") == "hidden"){ 
341            $('#myTab').removeClass("d-none d-lg-block"); 
342            $("#nav-mob-line").show();					 
343        }else{ 
344            $('#myTab').addClass("d-none d-lg-block"); 
345            $("#nav-mob-line").hide(); 
346        } 
347        $('.tab-content').hide(); 
348    } 
349     
350    function handleCloseButton(){ 
351        if($(window).width() < 767){ 
352			$('.nav-link.active').removeClass("active"); 
353			$('.tab-pane.fade.active.show').removeClass("active show"); 
354			$('#navbar-toggler').show(); 
355			$('#close').hide(); 
356            $("#main-nav-container").removeClass("bottom-border"); 
357		} 
358    } 
359 
360    function handleBackButton(){ 
361		if($(window).width() < 767){ 
362			$('.nav-link.active').removeClass("active"); 
363			$('.tab-pane.fade.active.show').removeClass("active show"); 
364			$('#myTab').removeClass("d-none d-md-block"); 
365			$('#navbar-toggler').show(); 
366			$('#close').hide(); 
367            $("#nav-mob-line").show(); 
368            $("#main-nav-container").removeClass("bottom-border"); 
369		} 
370    } 
371 
372    function openSecondLevel(category){ 
373        performAnalyticsNavigation(category,'') 
374		$('#navbar-toggler').hide(); 
375		$('#close').show(); 
376	} 
377 
378    $(document).on('click', '#bap-navigation .nav-link.active', function() { 
379        var href = $(this).attr('href').substring(1); 
380        $(this).toggleClass('active'); 
381        $('.tab-pane[id="' + href + '"]').removeClass('active'); 
382        $(".tab-content").find(".tab-pane.fade.active").removeClass('active'); 
383        if($(window).width() > 767){ 
384            $("#main-nav-container").removeClass("bottom-border"); 
385		} 
386    }); 
387     
388    $(document).mouseup(function(e)  
389    { 
390        var parentNavContainer = $("#parent-nav-container"); 
391        var childNavContainer = $("#child-nav-container"); 
392     
393        if (!parentNavContainer.is(e.target) && parentNavContainer.has(e.target).length === 0 
394            && !childNavContainer.is(e.target) && childNavContainer.has(e.target).length === 0 
395           )  
396        { 
397            $("#products-tab").removeClass('active'); 
398            $("#main-nav-container").removeClass("bottom-border"); 
399            $('#myTab').addClass("d-none d-lg-block"); 
400            $("#nav-mob-line").hide(); 
401            $("#bap-navigation .tab-content").find(".tab-pane.fade.active").removeClass('active'); 
402        } 
403    }); 
404	 
405</script> 
Powered by Liferay