Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#18387089" at line 19, column 15] ---- Tip: It's the final [] step that caused this error, not those before it. ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#18387089" at line 19, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() >
4<#assign themeDisplay = serviceContext.getThemeDisplay() />
5<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
6<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
7<#assign url404 = '/error/404.html' >
8<#assign environment = url?replace('/11t3.*','','r')>
9
10<#assign text_to_apply_source = "vanity url" >
11<#if qstringmap["sms"]?has_content>
12 <#assign sms = 1 >
13 <#assign text_to_apply_source = "sms" >
14</#if>
15<#if qstringmap["qrCode"]?has_content>
16 <#assign text_to_apply_source = "qr code" >
17</#if>
18
19<#assign lc = qstringmap["ecdma-lc"]?first>
20<#assign lc = htmlUtil.escape(lc)>
21<#assign lc = htmlUtil.escapeJS(lc)>
22
23<#assign prefix = "00000" >
24<#assign lcWithPrefix = prefix + lc >
25<#assign withPrefixLength = lcWithPrefix?length >
26<#assign startHere = withPrefixLength - 5>
27<#assign lc = lcWithPrefix?substring(startHere)>
28
29<#if qstringmap["ecid"]?has_content>
30 <#assign ecidExt = qstringmap["ecid"]?first>
31 <#assign ecidExt = htmlUtil.escape(ecidExt)>
32 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
33 <#assign ecidExt = "&ecid=" + ecidExt>
34
35
36 <#assign campaignId = qstringmap["ecid"]?first >
37 <#assign campaignId = htmlUtil.escape(campaignId)>
38 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
39<#else>
40 <#assign ecidExt="">
41 <#assign campaignId = "" >
42</#if>
43
44<#assign isFromDCOLink = false>
45<#assign dcoSourceCode = ''>
46<#if qstringmap["sourcecode"]?has_content>
47 <#assign dcoSourceCode = qstringmap["sourcecode"]?first>
48 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
49 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
50<#elseif qstringmap["sourceCode"]?has_content>
51 <#assign dcoSourceCode = qstringmap["sourceCode"]?first>
52 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
53 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
54</#if>
55
56<#if dcoSourceCode?has_content>
57 <#assign isFromDCOLink = true>
58</#if>
59
60<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
61<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
62<#assign clientProfile = clientProfileList?first>
63<#assign partnerName = clientProfile.getMarketingNameLong()>
64<#assign pbu = clientProfile.getPbu()>
65<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
66
67<#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
68<#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
69<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+pbu+'&'+subbu)>
70
71 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
72<#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
73<#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
74<script>
75//console.log('Partner URL', ${partnerUrl});
76</script>
77<#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>
78 <#assign partnerUrl = 'https://' + partnerUrl>
79</#if>
80<script>
81//console.log('Partner URL', ${partnerUrl});
82
83</script>
84<#-- Begin: filter duplicated cards-->
85<#assign temp = []>
86<#assign offerTypeList = []>
87<#if (fiCardsData?size > 0)>
88
89
90<!-- redirect to PANO start -->
91<!-- parse URL for page to determine product -->
92<#if (fiCardsData?first.redirectToPANO == "1")>
93 <#assign pageend = url?index_of("?") - 1 >
94 <#assign urlwoquery = url[0..pageend] >
95 <#assign pagestart = urlwoquery?last_index_of("/") + 1 >
96 <#assign productURL = urlwoquery[pagestart..] >
97 <#assign qstringonly = httpUtil.getQueryString(url) >
98
99 <#if (productURL == "consumer-platinum")>
100 <#assign PANOofferType = "108">
101 <!-- PANOofferType = "109" -->
102 <#elseif (productURL == "max-cash")>
103 <#assign PANOofferType = "104">
104 <#elseif (productURL == "consumer-edr")>
105 <#assign PANOofferType = "101">
106 <!-- PANOofferType = "103" -->
107 <#elseif (productURL == "secured")>
108 <#assign PANOofferType = "115">
109 <#elseif (productURL == "smart-business-rewards")>
110 <#assign PANOofferType = "144">
111 <#elseif (productURL == "business-cash-preferred")>
112 <#assign PANOofferType = "128">
113 <#elseif (productURL == "business-real-rewards")>
114 <#assign PANOofferType = "143">
115 <#elseif (productURL == "business-platinum")>
116 <#assign PANOofferType = "121">
117 <#elseif (productURL == "max-cash-secured")>
118 <#assign PANOofferType = "147">
119 <#elseif (productURL == "college-real-rewards")>
120 <#assign PANOofferType = "141">
121 <#elseif (productURL == "travel-rewards-plus")>
122 <#assign PANOofferType = "138">
123 <#elseif (productURL == "reserve-rewards-plus")>
124 <#assign PANOofferType = "154">
125 <#else>
126 <#assign PANOofferType = "0">
127 </#if>
128 <#assign redirectToPANO = 'https://www.mycardapply.com/synindex/?' + qstringonly + "&offertype=" + PANOofferType >
129 <script>
130 console.log('${productURL}');
131 console.log('${PANOofferType}');
132 console.log('${redirectToPANO}');
133 <!-- append #business to PANO Redirect URL if current URL contains #business. PANO uses this to show business tab as selected -->
134 if(window.location.href.includes('#business')){
135 location.href = '${redirectToPANO}'+'#business';
136 } else {
137 location.href = '${redirectToPANO}';
138 }
139 </script>
140</#if>
141<!-- redirect to PANO end -->
142
143
144 <#assign index = 0>
145 <#list fiCardsData as fib>
146 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
147 <#assign offerTypeList = offerTypeList + [fib.offerType]>
148 <#assign temp = temp + fiCardsData[index..index]>
149 </#if>
150 <#assign index = index + 1>
151 </#list>
152 <#assign fiCardsData = temp>
153 <#if (fiCardsData?size > 0)>
154 <div class="content-container content-container-main">
155 <#if url?contains("index")>
156 <#assign product="All Cards">
157 <h1 class="sr-only">${partnerName!'Elan'} Credit Cards</h1>
158 <header class="page-header">
159 <div class="page-header__logo">
160 <#if partnerUrl?has_content>
161 <a href="${partnerUrl!''}">
162 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo">
163 </a>
164 <#else>
165 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo">
166 </#if>
167 </div>
168 </header>
169 <#else>
170 <header class="page-header">
171 <#if !isFromDCOLink>
172 <div class="back-overview hide-desktop">
173 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
174 </div>
175 </#if>
176
177 <div class="header-main-logo">
178 <#if partnerUrl?has_content>
179 <a href="${partnerUrl!''}">
180 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo">
181 </a>
182 <#else>
183 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo">
184 </#if>
185 </div>
186 <#if !isFromDCOLink>
187 <div class="styled-select slate">
188 <nav class="styled-select__dropdown">
189 <div class="back-overview hide-mobile-flex">
190 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
191 </div>
192 <a href="javascript:void(0)" class="dropdown-select" aria-expanded="false">
193 <span class="selected-option"></span>
194 <div class="jn-arrow arrow arrow-right"></div>
195 </a>
196 <a href="javascript:void(0)" aria-label="Open page navigation menu" class="jn-hamburger hamburger" aria-expanded="false">
197 <div class="first-line transform transformed1"></div>
198 <div></div>
199 <div class="transform transformed2"></div>
200 <div></div>
201 </a>
202 <ul>
203 <#list fiCardsData as fib>
204 <#switch fib.offerType>
205 <#case "101">
206 <#assign productURL = "202302/consumer-edr">
207 <#assign productName = "Everyday Rewards+">
208 <#break>
209 <#case "103">
210 <#assign productURL = "202302/consumer-edr">
211 <#assign productName = "Everyday Rewards+">
212 <#break>
213 <#case "104">
214 <#assign productURL = "max-cash">
215 <#assign productName = "Max Cash Preferred Card">
216 <#break>
217 <#case "108">
218 <#assign productURL="202308/consumer-platinum">
219 <#assign productName="Platinum Card">
220 <#break>
221 <#case "109">
222 <#assign productURL="202308/consumer-platinum">
223 <#assign productName="Platinum Card">
224 <#break>
225 <#case "115">
226 <#assign productURL = "secured">
227 <#assign productName = "Secured Card" >
228 <#break>
229 <#case "138">
230 <#assign productURL = "202305/travel-rewards-plus">
231 <#assign productName = "Travel Rewards+" >
232 <#break>
233 <#case "141">
234 <#assign productURL = "college-real-rewards">
235 <#assign productName = "College Real Rewards" >
236 <#break>
237 <#case "147">
238 <#assign productURL = "max-cash-secured">
239 <#assign productName = "Max Cash Secured Card" >
240 <#break>
241 <#case "154">
242 <#assign productURL = "202305/reserve-rewards-plus">
243 <#assign productName = "Reserve Rewards+" >
244 <#break>
245 <#case "121">
246 <#assign productURL = "202208/business-platinum">
247 <#assign productName = "Business Card" >
248 <#break>
249 <#case "128">
250 <#assign productURL = "business-cash-preferred">
251 <#assign productName = "Business Cash Preferred" >
252 <#break>
253 <#case "143">
254 <#assign productURL = "business-real-rewards">
255 <#assign productName = "Business Real Rewards Card" >
256 <#break>
257 <#case "144">
258 <#assign productURL = "smart-business-rewards">
259 <#assign productName = "Smart Business Rewards Card" >
260 <#break>
261 <#default>
262 </#switch>
263 <#if url?matches(".*/${productURL}\\?.*")>
264 <li class="selected" data-value="${productName}" selected="selected"><a href="javascript:void(0)">${productName}</a></li>
265 <#else>
266 <li class="dropdown-item" data-value="${productName}">
267 <a href="${environment}/11t3/${productURL}?ecdma-lc=${lc}${ecidExt}">
268 ${productName}
269 </a>
270 </li>
271 </#if>
272 </#list>
273 </ul>
274 </nav>
275
276 </div>
277 </#if>
278 </header>
279 <script>
280 function toggleFlyOutMenu() {
281 $('.styled-select').toggleClass('show-select');
282 var ariaExpanded = $('.styled-select__dropdown .dropdown-select').attr('aria-expanded');
283 if(ariaExpanded !== null) {
284 var isAriaExpanded;
285 if(ariaExpanded === "true") {
286 isAriaExpanded = true;
287 } else {
288 isAriaExpanded = false
289 }
290 $('.styled-select__dropdown .dropdown-select').attr('aria-expanded', !isAriaExpanded);
291 const ariaLabel = isAriaExpanded? "Open page navigation menu" : "Close page navigation menu";
292 $('.styled-select__dropdown .jn-hamburger').attr('aria-expanded', !isAriaExpanded).attr('aria-label', ariaLabel);
293 }
294 }
295 AUI().ready(function () {
296 var pageSelected = $('.selected').attr('data-value');
297 $('.jn-hamburger, .dropdown-select').click(function () {
298 toggleFlyOutMenu();
299 });
300 $('.styled-select__dropdown').keydown(function(event) {
301 var firstNavigationLink = $('.styled-select__dropdown ul li:visible a').first();
302 var lastNavigationLink = $('.styled-select__dropdown ul li:visible a').last();
303
304 if(event.keyCode === 9 ) {
305 // if they tab outside of the nav close the navigation
306 //shift + tab pressed
307 if(event.shiftKey && firstNavigationLink.is(document.activeElement)) {
308 toggleFlyOutMenu();
309 } else if(!event.shiftKey && lastNavigationLink.is(document.activeElement)) {
310 toggleFlyOutMenu();
311 }
312 }
313 });
314 $('.selected-option').text(pageSelected);
315 });
316 </script>
317 </#if>
318 </div>
319 <script>
320 var reportingData = {};
321
322 //document.addEventListener('DOMContentLoaded', function() {
323 AUI().ready(function () {
324 //console.log('inside ready');
325 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
326 var hostName = location.hostname;
327 function getDomainFromHostname(hostname) {
328 var parts = hostname.split('.');
329 return parts.length === 3 ? parts[1] : parts[0];
330 }
331 var domain = getDomainFromHostname(hostName);
332 var partnerName = "${partnerName!''}";
333 var product = "All Cards";
334 var title = "";
335 var metaDesc = "";
336 var m = document.createElement('meta');
337 switch(page) {
338 case "max-cash-secured":
339 product="Max Cash Secured Card";
340 title = "Earn more on the categories you pick | "+partnerName+" Max Cash Secured Card";
341 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
342 break;
343 case "max-cash":
344 product="Max Cash Preferred Card";
345 title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card";
346 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select.";
347 break;
348 case "consumer-platinum":
349 product="Platinum Card";
350 title = "The purchasing power of Zero | "+partnerName+" Platinum Card";
351 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 18 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card.";
352 break;
353 case "consumer-edr":
354 product="Everyday Rewards+";
355 title = "Sign up and earn bonus points | "+partnerName+" Everyday Rewards+";
356 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn 15,000 when you spend $500 within the first 90 days.";
357 break;
358 case "secured":
359 product="Secured Card";
360 title = "Strengthen your finances | "+partnerName+" Secured Card";
361 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
362 break;
363 case "college-real-rewards":
364 product="College Real Rewards";
365 title = "Sign up and earn bonus points. | "+partnerName+" College Real Rewards";
366 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
367 break;
368 case "smart-business-rewards":
369 product="Smart Business Rewards Card";
370 title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card";
371 metaDesc = "Apply Today for a "+partnerName+" Credit Card. More choices. More value for your business. Earn a $200 Bonus and 2x Rewards on your top 2 spend categories each month with the "+partnerName+" Credit Card.";
372 break;
373 case "business-cash-preferred":
374 product="Business Cash Preferred";
375 title = "Flexible rewards for your business | "+partnerName+" Business Cash Preferred";
376 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
377 break;
378 case "business-real-rewards":
379 product="Business Real Rewards Card";
380 title = "Earn up to 1.5X points with no caps | "+partnerName+" Business Real Rewards Card";
381 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ;
382 break;
383 case "business-platinum":
384 product="Business Card";
385 title = "Pay down your other credit card balances faster | "+partnerName+" Business Card";
386 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 18 Billing Cycles.";
387 break;
388 case "travel-rewards-plus":
389 product="Travel Rewards+"
390 title = partnerName + " | Travel Rewards+ Card";
391 metaDesc = "Make travel more rewarding with unlimited 4x points on travel and frequent popular categories."
392 break;
393 case "reserve-rewards-plus":
394 product="Reserve Rewards+"
395 title = partnerName + " | Reserve Rewards+ Card";
396 metaDesc = "Get exceptional rewards on travel and frequent purchases with this exclusive metal card.";
397 break;
398 default:
399 product = "All Cards";
400 title = partnerName + " Credit Card Index Page";
401 metaDesc = "Apply Today for a "+partnerName+" Credit Card.";
402 }
403 document.title = title;
404 m.name = 'description';
405 m.content = metaDesc;
406 document.head.appendChild(m);
407
408 var lc = "${lc!'0'}";
409
410 /* update SiteCatalyst data object */
411 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
412 reportingData.page_type = 'product';
413 reportingData.site_section = 'credit cards';
414 reportingData.platform = 'microsite';
415 reportingData.campaign_id = '${campaignId}';
416 reportingData.location_code = lc;
417 reportingData.partner_name = partnerName;
418 reportingData.product = product;
419 reportingData.text_to_apply_source = '${text_to_apply_source}';
420 reportingData.visitor_type = 'prospect';
421 reportingData.Banker_id = '0';
422 reportingData.Banker_code = '0';
423
424
425 /* SiteCatalyst pageView tracking */
426 AUI().ready(function() {
427 if (window.publisherFW) {
428 //console.log("pageView");
429 window.publisherFW.publishEvent("pageView", reportingData);
430 }
431 });
432
433 jQuery('.jn-button, .applyNowLink').on('click', function(e){
434 var buttonName = $(this).data('button-name');
435 var productName = $(this).data('product-name');
436 /* SiteCatalyst onClick tracking */
437 reportingData.applyButton = buttonName;
438 reportingData.product = productName;
439
440 if (window.publisherFW) {
441 //console.log('clicked', reportingData);
442 window.publisherFW.publishEvent("onClick", reportingData);
443 }
444
445 });
446
447 jQuery('.applyNowLink').on('click', function(e){
448 ga("send", {
449 hitType: "event",
450 eventAction: "ApplyNow",
451 eventCategory: "click",
452 eventLabel: "BottomButton"
453 });
454 });
455
456 });
457 </script>
458 <#else>
459 <script>
460 console.log("Empty card list");
461 location.href = '${url404}';
462 </script>
463 </#if>
464<#else>
465 <script>
466 console.log("FI Cards Data empty", "pbu:", "${pbu}", ",subbu:","${subbu}");
467 location.href = '${url404}';
468 </script>
469</#if>
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#18372542" at line 6, column 14] ---- Tip: It's the final [] step that caused this error, not those before it. ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#18372542" at line 6, column 1] ----
1<#assign uniqueID = randomNamespace />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign environment = url?replace('/11t3/index.*','','r')>
5
6<#assign lc= qstringmap["ecdma-lc"]?first>
7<#assign lc = htmlUtil.escape(lc)>
8<#assign lc = htmlUtil.escapeJS(lc)>
9
10<#assign prefix = "00000" >
11<#assign lcWithPrefix = prefix + lc >
12<#assign withPrefixLength = lcWithPrefix?length >
13<#assign startHere = withPrefixLength - 5>
14<#assign lc = lcWithPrefix?substring(startHere)>
15
16<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! >
17<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
18<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
19<#assign clientProfile = clientProfileList?first>
20<#assign partnerName = clientProfile.getMarketingNameLong()>
21<#assign pbu = clientProfile.getPbu()>
22<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
23<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
24
25
26<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&'+ pbu + '&'+subbu + '&' + lc)>
27<#assign personalBusinessOfferTypes = utilServ.makeCall('SAA_DistinctCardOffers', '0')>
28
29<#assign personalOfferTypes = []>
30<#assign businessOfferTypes = []>
31
32<#list personalBusinessOfferTypes as pbOfferType>
33 <#if pbOfferType.groupname?has_content && pbOfferType.offertype?has_content>
34 <#if pbOfferType.groupname == "Personal">
35 <#assign personalOfferTypes += [pbOfferType.offertype]>
36 <#elseif pbOfferType.groupname == "Business">
37 <#assign businessOfferTypes += [pbOfferType.offertype]>
38 </#if>
39 </#if>
40</#list>
41
42
43<#assign productTypeValue = "">
44<#if productType.getData()?has_content>
45 <#assign productKey = productType.getData()>
46 <#assign productTypeValue = productType.optionsMap[productKey]>
47
48</#if>
49
50<#assign personalCards = []>
51<#assign businessCards = []>
52<#assign finalList = []>
53<#assign index = 0>
54
55<#list fiCardsData as fib>
56 <#if (fib.offerType?has_content)>
57 <#if (personalOfferTypes?seq_contains(fib.offerType))>
58 <#assign personalCards = personalCards + fiCardsData[index..index]>
59 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
60 <#assign businessCards = businessCards + fiCardsData[index..index]>
61 </#if>
62 </#if>
63 <#assign index = index + 1>
64</#list>
65
66
67<#if productTypeValue == "Personal">
68 <#list personalCards as personalCard>
69 <#if product.getSiblings()?has_content>
70 <#list product.getSiblings() as productItem>
71 <#if personalCard.offerType == productItem.productOfferType.getData()>
72 <#assign finalList = finalList + [personalCard]>
73 </#if>
74 </#list>
75 </#if>
76 </#list>
77<#elseif productTypeValue == "Business">
78 <#list businessCards as businessCard>
79 <#if product.getSiblings()?has_content>
80 <#list product.getSiblings() as productItem>
81 <#if businessCard.offerType == productItem.productOfferType.getData()>
82 <#assign finalList = finalList + [businessCard]>
83 </#if>
84 </#list>
85 </#if>
86 </#list>
87</#if>
88
89<#macro renderCards finalListMacro>
90 <#assign count = 0>
91 <#list finalListMacro as result>
92 <#if count < 3>
93 <#if product.getSiblings()?has_content>
94 <#list product.getSiblings() as productItem>
95 <#if result.offerType == productItem.productOfferType.getData()>
96
97 <#assign productOfferTypeValue = product.productOfferType.optionsMap[productItem.productOfferType.getData()]>
98 <#assign productOfferType = productOfferTypeValue?substring(productOfferTypeValue?index_of(" - ") + 3)!''>
99 <div class="card">
100 <div class="card__content">
101
102 <div class="card__content-left">
103 <#assign cardArtImage = cdnCardArtUrl + "/" + result.filename + ".png" >
104 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + result.filename + ".jpg" >
105 <#assign cardArtImageAltText = partnerName + " " + productOfferType>
106 <img class="card__image" src="${cardArtImage!''}" alt="${cardArtImageAltText}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
107
108 <#if (productItem.learnMoreURL.getData())??>
109 <a class="card__learn-more" href="${environment}${productItem.learnMoreURL.getData()!''}?ecdma-lc=${lc}" rel="noopener noreferrer">
110 Learn More <span class="sr-only">about ${productOfferType!''}</span>
111 </a>
112 </#if>
113
114 </div>
115
116
117 <div class="card__content-right">
118 <h3 class="product-offer-type">
119 ${productOfferType?upper_case!''}
120
121 <#if (productItem.cardNameFootnotes.getData())??>
122 <sup>${productItem.cardNameFootnotes.getData()}</sup>
123 </#if>
124 </h3>
125
126 <#if (productItem.offerCopy.getData())??>
127 <div class="offer-copy">
128 ${productItem.offerCopy.getData()}
129 </div>
130 </#if>
131
132 </div>
133 </div>
134 </div>
135
136 </#if>
137 </#list>
138 </#if>
139 <#assign count = count + 1>
140 </#if>
141 </#list>
142</#macro>
143
144<#if (finalList?? && finalList?has_content && finalList?size > 1)>
145 <#assign count = 0>
146 <#assign countGlider = 0>
147 <div class="${productTypeValue}-featured-cards tier3-syn-featured-cards-2024 <#if productTypeValue == 'Business'>hide</#if>" id="${uniqueID}">
148 <h2 id="featured-glider-label" class="super-head">FEATURED CREDIT CARD OFFERS</h2>
149 <div class="card-container">
150 <@renderCards finalListMacro=finalList />
151 </div>
152 <div class="featured-glider-container" aria-roledescription="carousel" aria-labelledby="featured-glider-label">
153 <div id="featured-glider-slides" class="featured-glider">
154 <@renderCards finalListMacro=finalList />
155 </div>
156 <button aria-label="Previous slide" class="glider-prev" aria-controls="featured-glider-slides"></button>
157 <button aria-label="Next slide" class="glider-next" aria-controls="featured-glider-slides"></button>
158 <div role="tablist" class="dots"></div>
159 </div>
160 </div>
161</#if>
162<style>
163 #content .tier3-syn-featured-cards-2024 {
164 max-width: 1336px;
165 padding: 0 20px;
166 margin: 0 auto;
167 }
168 @media (min-width: 1376px) {
169 #content .tier3-syn-featured-cards-2024 {
170 margin-top: 30px;
171 }
172 }
173 #content .tier3-syn-featured-cards-2024 .featured-glider-container {
174 display: block !important;
175 position: relative;
176 margin-bottom: 20px;
177 }
178 #content .tier3-syn-featured-cards-2024 .featured-glider-container .card {
179 flex: 375px;
180 }
181 @media (min-width: 1200px) {
182 #content .tier3-syn-featured-cards-2024 .featured-glider-container {
183 display: none !important;
184 }
185 }
186 #content .tier3-syn-featured-cards-2024 .featured-glider {
187 padding-top: 40px;
188 margin-bottom: 15px;
189 overflow-x: hidden;
190 }
191 #content .tier3-syn-featured-cards-2024 .card-container {
192 display: flex;
193 gap: 30px;
194 flex-wrap: nowrap;
195 justify-content: space-between;
196 margin-top: 40px;
197 margin-bottom: 60px;
198 display: none !important;
199 justify-content: center;
200
201 }
202 @media (min-width: 1200px) {
203 #content .tier3-syn-featured-cards-2024 .card-container {
204 display: flex !important;
205 }
206 }
207 #content .tier3-syn-featured-cards-2024 .card {
208 background-color: var(--ecdma-bg-color);
209 border-radius: 10px;
210 padding: 0 20px 15px 20px;
211 margin: 0 20px;
212 flex: 33%;
213 flex-grow: 0;
214 }
215 @media (min-width: 1200px) {
216 #content .tier3-syn-featured-cards-2024 .card {
217 margin: 0;
218 }
219 }
220 #content .tier3-syn-featured-cards-2024 .card__content {
221 display: flex;
222 height: 100%;
223 }
224 #content .tier3-syn-featured-cards-2024 .card__content-left {
225 display: flex;
226 flex-direction: column;
227 margin-right: 20px;
228 justify-content: space-between;
229 height: 100%;
230 }
231 #content .tier3-syn-featured-cards-2024 .card__content-right {
232 flex: 1;
233 margin-top: 20px;
234 }
235 #content .tier3-syn-featured-cards-2024 .card__image {
236 border-radius: 12px;
237 width: 100%;
238 height: auto;
239 border-radius: 8px;
240 max-width: 112px !important;
241 max-height: 112px;
242 margin-top: -10px;
243 object-fit: contain;
244 }
245 #content .tier3-syn-featured-cards-2024 .card__image--vertical {
246 margin-top: -20px;
247 }
248 #content .tier3-syn-featured-cards-2024 .product-offer-type {
249 margin-bottom: 6px;
250 color: white;
251 letter-spacing: 1px;
252 font-size: 13px;
253 font-weight: 400;
254 line-height: 1.5;
255 }
256 #content .tier3-syn-featured-cards-2024 .product-offer-type sup {
257 font-size: 10px;
258 line-height: 13px;
259 }
260 #content .tier3-syn-featured-cards-2024 .offer-copy {
261 color: white;
262 }
263 #content .tier3-syn-featured-cards-2024 .card__learn-more {
264 background-color: #fff;
265 border: 1px solid white;
266 color: var(--ecdma-text-color);
267 font-size: 13px;
268 cursor: pointer;
269 text-decoration: none;
270 text-align: center;
271 text-transform: capitalize;
272 line-height: 15px;
273 margin-top: 5px;
274 min-width: 112px;
275 height: 35px;
276 line-height: 35px;
277 }
278 #content .tier3-syn-featured-cards-2024 .card__learn-more:hover {
279 background-color: var(--ecdma-hover-color);
280 color: #fff;
281 }
282 #content .tier3-syn-featured-cards-2024 .card__learn-more:focus {
283 outline: 1px solid white;
284 outline-offset: 3px;
285 }
286</style>
287<script>
288/* This template is added to a single page multiple times. iife keeps glider/vars from overriding each other */
289(() => {
290 let featuredGlider = null;
291 if(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider')) {
292 featuredGlider = new Glider(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider'), {
293 slidesToShow: 'auto',
294 itemWidth: 375,
295 slidesToScroll: 1,
296 scrollLockDelay: 100,
297 draggable: true,
298 scrollLock: true,
299 arrows: {
300 prev: '#${uniqueID}.tier3-syn-featured-cards-2024 .glider-prev',
301 next: '#${uniqueID}.tier3-syn-featured-cards-2024 .glider-next'
302 },
303 dots: '#${uniqueID}.tier3-syn-featured-cards-2024 .dots',
304 });
305 }
306 const images = document.querySelectorAll('#${uniqueID}.tier3-syn-featured-cards-2024 .card__image');
307 images.forEach(img => {
308 const width = img.naturalWidth;
309 const height = img.naturalHeight;
310 if(height > width) {
311 img.classList.add('card__image--vertical');
312 }
313 });
314
315 AUI().ready(() => {
316 /* Make the slider the correct size after the theme and everything is loaded*/
317 if(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider')){
318 featuredGlider.refresh(false);
319 }
320
321 const productTypeValue = '${productTypeValue}';
322 const thisTabSelector = productTypeValue === "Personal"? '#tab-Personal' : '#tab-Business';
323 /* If the resize the screen and one of the featured card glider is hidden. The hidden glider dose not resize. On show of glider resize it. */
324 document.querySelectorAll(thisTabSelector).forEach(tab => {
325 tab.onclick = () => {
326 setTimeout(() => {featuredGlider.refresh(false);}, 0);
327 };
328 });
329 })
330})();
331</script>
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#18372542" at line 6, column 14] ---- Tip: It's the final [] step that caused this error, not those before it. ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#18372542" at line 6, column 1] ----
1<#assign uniqueID = randomNamespace />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign environment = url?replace('/11t3/index.*','','r')>
5
6<#assign lc= qstringmap["ecdma-lc"]?first>
7<#assign lc = htmlUtil.escape(lc)>
8<#assign lc = htmlUtil.escapeJS(lc)>
9
10<#assign prefix = "00000" >
11<#assign lcWithPrefix = prefix + lc >
12<#assign withPrefixLength = lcWithPrefix?length >
13<#assign startHere = withPrefixLength - 5>
14<#assign lc = lcWithPrefix?substring(startHere)>
15
16<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! >
17<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
18<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
19<#assign clientProfile = clientProfileList?first>
20<#assign partnerName = clientProfile.getMarketingNameLong()>
21<#assign pbu = clientProfile.getPbu()>
22<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
23<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
24
25
26<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&'+ pbu + '&'+subbu + '&' + lc)>
27<#assign personalBusinessOfferTypes = utilServ.makeCall('SAA_DistinctCardOffers', '0')>
28
29<#assign personalOfferTypes = []>
30<#assign businessOfferTypes = []>
31
32<#list personalBusinessOfferTypes as pbOfferType>
33 <#if pbOfferType.groupname?has_content && pbOfferType.offertype?has_content>
34 <#if pbOfferType.groupname == "Personal">
35 <#assign personalOfferTypes += [pbOfferType.offertype]>
36 <#elseif pbOfferType.groupname == "Business">
37 <#assign businessOfferTypes += [pbOfferType.offertype]>
38 </#if>
39 </#if>
40</#list>
41
42
43<#assign productTypeValue = "">
44<#if productType.getData()?has_content>
45 <#assign productKey = productType.getData()>
46 <#assign productTypeValue = productType.optionsMap[productKey]>
47
48</#if>
49
50<#assign personalCards = []>
51<#assign businessCards = []>
52<#assign finalList = []>
53<#assign index = 0>
54
55<#list fiCardsData as fib>
56 <#if (fib.offerType?has_content)>
57 <#if (personalOfferTypes?seq_contains(fib.offerType))>
58 <#assign personalCards = personalCards + fiCardsData[index..index]>
59 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
60 <#assign businessCards = businessCards + fiCardsData[index..index]>
61 </#if>
62 </#if>
63 <#assign index = index + 1>
64</#list>
65
66
67<#if productTypeValue == "Personal">
68 <#list personalCards as personalCard>
69 <#if product.getSiblings()?has_content>
70 <#list product.getSiblings() as productItem>
71 <#if personalCard.offerType == productItem.productOfferType.getData()>
72 <#assign finalList = finalList + [personalCard]>
73 </#if>
74 </#list>
75 </#if>
76 </#list>
77<#elseif productTypeValue == "Business">
78 <#list businessCards as businessCard>
79 <#if product.getSiblings()?has_content>
80 <#list product.getSiblings() as productItem>
81 <#if businessCard.offerType == productItem.productOfferType.getData()>
82 <#assign finalList = finalList + [businessCard]>
83 </#if>
84 </#list>
85 </#if>
86 </#list>
87</#if>
88
89<#macro renderCards finalListMacro>
90 <#assign count = 0>
91 <#list finalListMacro as result>
92 <#if count < 3>
93 <#if product.getSiblings()?has_content>
94 <#list product.getSiblings() as productItem>
95 <#if result.offerType == productItem.productOfferType.getData()>
96
97 <#assign productOfferTypeValue = product.productOfferType.optionsMap[productItem.productOfferType.getData()]>
98 <#assign productOfferType = productOfferTypeValue?substring(productOfferTypeValue?index_of(" - ") + 3)!''>
99 <div class="card">
100 <div class="card__content">
101
102 <div class="card__content-left">
103 <#assign cardArtImage = cdnCardArtUrl + "/" + result.filename + ".png" >
104 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + result.filename + ".jpg" >
105 <#assign cardArtImageAltText = partnerName + " " + productOfferType>
106 <img class="card__image" src="${cardArtImage!''}" alt="${cardArtImageAltText}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
107
108 <#if (productItem.learnMoreURL.getData())??>
109 <a class="card__learn-more" href="${environment}${productItem.learnMoreURL.getData()!''}?ecdma-lc=${lc}" rel="noopener noreferrer">
110 Learn More <span class="sr-only">about ${productOfferType!''}</span>
111 </a>
112 </#if>
113
114 </div>
115
116
117 <div class="card__content-right">
118 <h3 class="product-offer-type">
119 ${productOfferType?upper_case!''}
120
121 <#if (productItem.cardNameFootnotes.getData())??>
122 <sup>${productItem.cardNameFootnotes.getData()}</sup>
123 </#if>
124 </h3>
125
126 <#if (productItem.offerCopy.getData())??>
127 <div class="offer-copy">
128 ${productItem.offerCopy.getData()}
129 </div>
130 </#if>
131
132 </div>
133 </div>
134 </div>
135
136 </#if>
137 </#list>
138 </#if>
139 <#assign count = count + 1>
140 </#if>
141 </#list>
142</#macro>
143
144<#if (finalList?? && finalList?has_content && finalList?size > 1)>
145 <#assign count = 0>
146 <#assign countGlider = 0>
147 <div class="${productTypeValue}-featured-cards tier3-syn-featured-cards-2024 <#if productTypeValue == 'Business'>hide</#if>" id="${uniqueID}">
148 <h2 id="featured-glider-label" class="super-head">FEATURED CREDIT CARD OFFERS</h2>
149 <div class="card-container">
150 <@renderCards finalListMacro=finalList />
151 </div>
152 <div class="featured-glider-container" aria-roledescription="carousel" aria-labelledby="featured-glider-label">
153 <div id="featured-glider-slides" class="featured-glider">
154 <@renderCards finalListMacro=finalList />
155 </div>
156 <button aria-label="Previous slide" class="glider-prev" aria-controls="featured-glider-slides"></button>
157 <button aria-label="Next slide" class="glider-next" aria-controls="featured-glider-slides"></button>
158 <div role="tablist" class="dots"></div>
159 </div>
160 </div>
161</#if>
162<style>
163 #content .tier3-syn-featured-cards-2024 {
164 max-width: 1336px;
165 padding: 0 20px;
166 margin: 0 auto;
167 }
168 @media (min-width: 1376px) {
169 #content .tier3-syn-featured-cards-2024 {
170 margin-top: 30px;
171 }
172 }
173 #content .tier3-syn-featured-cards-2024 .featured-glider-container {
174 display: block !important;
175 position: relative;
176 margin-bottom: 20px;
177 }
178 #content .tier3-syn-featured-cards-2024 .featured-glider-container .card {
179 flex: 375px;
180 }
181 @media (min-width: 1200px) {
182 #content .tier3-syn-featured-cards-2024 .featured-glider-container {
183 display: none !important;
184 }
185 }
186 #content .tier3-syn-featured-cards-2024 .featured-glider {
187 padding-top: 40px;
188 margin-bottom: 15px;
189 overflow-x: hidden;
190 }
191 #content .tier3-syn-featured-cards-2024 .card-container {
192 display: flex;
193 gap: 30px;
194 flex-wrap: nowrap;
195 justify-content: space-between;
196 margin-top: 40px;
197 margin-bottom: 60px;
198 display: none !important;
199 justify-content: center;
200
201 }
202 @media (min-width: 1200px) {
203 #content .tier3-syn-featured-cards-2024 .card-container {
204 display: flex !important;
205 }
206 }
207 #content .tier3-syn-featured-cards-2024 .card {
208 background-color: var(--ecdma-bg-color);
209 border-radius: 10px;
210 padding: 0 20px 15px 20px;
211 margin: 0 20px;
212 flex: 33%;
213 flex-grow: 0;
214 }
215 @media (min-width: 1200px) {
216 #content .tier3-syn-featured-cards-2024 .card {
217 margin: 0;
218 }
219 }
220 #content .tier3-syn-featured-cards-2024 .card__content {
221 display: flex;
222 height: 100%;
223 }
224 #content .tier3-syn-featured-cards-2024 .card__content-left {
225 display: flex;
226 flex-direction: column;
227 margin-right: 20px;
228 justify-content: space-between;
229 height: 100%;
230 }
231 #content .tier3-syn-featured-cards-2024 .card__content-right {
232 flex: 1;
233 margin-top: 20px;
234 }
235 #content .tier3-syn-featured-cards-2024 .card__image {
236 border-radius: 12px;
237 width: 100%;
238 height: auto;
239 border-radius: 8px;
240 max-width: 112px !important;
241 max-height: 112px;
242 margin-top: -10px;
243 object-fit: contain;
244 }
245 #content .tier3-syn-featured-cards-2024 .card__image--vertical {
246 margin-top: -20px;
247 }
248 #content .tier3-syn-featured-cards-2024 .product-offer-type {
249 margin-bottom: 6px;
250 color: white;
251 letter-spacing: 1px;
252 font-size: 13px;
253 font-weight: 400;
254 line-height: 1.5;
255 }
256 #content .tier3-syn-featured-cards-2024 .product-offer-type sup {
257 font-size: 10px;
258 line-height: 13px;
259 }
260 #content .tier3-syn-featured-cards-2024 .offer-copy {
261 color: white;
262 }
263 #content .tier3-syn-featured-cards-2024 .card__learn-more {
264 background-color: #fff;
265 border: 1px solid white;
266 color: var(--ecdma-text-color);
267 font-size: 13px;
268 cursor: pointer;
269 text-decoration: none;
270 text-align: center;
271 text-transform: capitalize;
272 line-height: 15px;
273 margin-top: 5px;
274 min-width: 112px;
275 height: 35px;
276 line-height: 35px;
277 }
278 #content .tier3-syn-featured-cards-2024 .card__learn-more:hover {
279 background-color: var(--ecdma-hover-color);
280 color: #fff;
281 }
282 #content .tier3-syn-featured-cards-2024 .card__learn-more:focus {
283 outline: 1px solid white;
284 outline-offset: 3px;
285 }
286</style>
287<script>
288/* This template is added to a single page multiple times. iife keeps glider/vars from overriding each other */
289(() => {
290 let featuredGlider = null;
291 if(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider')) {
292 featuredGlider = new Glider(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider'), {
293 slidesToShow: 'auto',
294 itemWidth: 375,
295 slidesToScroll: 1,
296 scrollLockDelay: 100,
297 draggable: true,
298 scrollLock: true,
299 arrows: {
300 prev: '#${uniqueID}.tier3-syn-featured-cards-2024 .glider-prev',
301 next: '#${uniqueID}.tier3-syn-featured-cards-2024 .glider-next'
302 },
303 dots: '#${uniqueID}.tier3-syn-featured-cards-2024 .dots',
304 });
305 }
306 const images = document.querySelectorAll('#${uniqueID}.tier3-syn-featured-cards-2024 .card__image');
307 images.forEach(img => {
308 const width = img.naturalWidth;
309 const height = img.naturalHeight;
310 if(height > width) {
311 img.classList.add('card__image--vertical');
312 }
313 });
314
315 AUI().ready(() => {
316 /* Make the slider the correct size after the theme and everything is loaded*/
317 if(document.querySelector('#${uniqueID}.tier3-syn-featured-cards-2024 .featured-glider')){
318 featuredGlider.refresh(false);
319 }
320
321 const productTypeValue = '${productTypeValue}';
322 const thisTabSelector = productTypeValue === "Personal"? '#tab-Personal' : '#tab-Business';
323 /* If the resize the screen and one of the featured card glider is hidden. The hidden glider dose not resize. On show of glider resize it. */
324 document.querySelectorAll(thisTabSelector).forEach(tab => {
325 tab.onclick = () => {
326 setTimeout(() => {featuredGlider.refresh(false);}, 0);
327 };
328 });
329 })
330})();
331</script>
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#460256133" at line 3, column 14] ---- Tip: It's the final [] step that caused this error, not those before it. ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#460256133" at line 3, column 1] ----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()>
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign lc= qstringmap["ecdma-lc"]?first>
4<#assign lc = htmlUtil.escape(lc)>
5<#assign lc = htmlUtil.escapeJS(lc)>
6
7<#assign prefix = "00000" >
8<#assign lcWithPrefix = prefix + lc >
9<#assign withPrefixLength = lcWithPrefix?length >
10<#assign startHere = withPrefixLength - 5>
11<#assign lc = lcWithPrefix?substring(startHere)>
12
13<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! >
14<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
15<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
16<#assign clientProfile = clientProfileList?first>
17<#assign pbu = clientProfile.getPbu()>
18<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
19<#assign fiCardsDataWT = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)>
20<#assign personalBusinessWT = utilServ.makeCall('SAA_PillGrouping', '0')>
21<#assign personalWT = []>
22<#assign businessWT = []>
23
24<#list personalBusinessWT as pbWT>
25 <#if pbWT.groupName?has_content && pbWT.offerType?has_content && pbWT.pillName?has_content> <#if pbWT.groupName == "Personal">
26 <#assign personalWT += [pbWT]>
27
28 <#elseif pbWT.groupName == "Business">
29 <#assign businessWT += [pbWT]>
30
31 </#if>
32 </#if>
33</#list>
34
35
36<#assign fiPersonalRaw = personalWT?filter(personalPill -> fiCardsDataWT?filter(fib -> personalPill.offerType == fib.offerType)?size > 0)>
37<#assign fiBusinessRaw = businessWT?filter(businessPill -> fiCardsDataWT?filter(fib -> businessPill.offerType == fib.offerType)?size > 0)>
38
39<#assign fiPersonalWT = []>
40<#list fiPersonalRaw as item>
41 <#if !(fiPersonalWT?map(it -> it.offerType)?seq_contains(item.offerType))>
42 <#assign fiPersonalWT += [item]>
43 </#if>
44</#list>
45
46<#assign fiBusinessWT = []>
47<#list fiBusinessRaw as item>
48 <#if !(fiBusinessWT?map(it -> it.offerType)?seq_contains(item.offerType))>
49 <#assign fiBusinessWT += [item]>
50 </#if>
51</#list>
52
53<#assign fiPersonalSizeWT = fiPersonalWT?size />
54<#assign fiBusinessSizeWT = fiBusinessWT?size />
55
56<#assign hasTabs = entries?has_content>
57<#assign PersonalTab = "Personal">
58<#assign BusinessTab = "Business">
59
60<#if hasTabs>
61 <div class="Tier3-Syn-Tabs-2024-Feature">
62 <#if (fiPersonalSizeWT > 0 && fiBusinessSizeWT >0 ) >
63 <div role="tablist" class="card-type-tabs" aria-label="Choose a credit card type to explore details">
64 <button
65 id="tab-Personal"
66 role="tab"
67 class="card-type-tabs__button"
68 aria-selected="true"
69 aria-controls="content-Personal"
70 data-tab="content-Personal">
71 ${PersonalTab}
72 </button>
73 <button
74 id="tab-Business"
75 role="tab"
76 class="card-type-tabs__button"
77 aria-selected="false"
78 aria-controls="content-Business"
79 data-tab="content-Business">
80 ${BusinessTab}
81 </button>
82 </div>
83 </#if>
84 <div class="all-card-types-content">
85 <#if (fiPersonalSizeWT > 0)>
86 <div
87 id="content-Personal"
88 class="card-type-content"
89 role="tabpanel"
90 aria-labelledby="tab-Personal"
91 style="display: block;">
92
93 <#list entries as entry>
94 <#if entry_index == 0>
95 <#assign assetRenderer = entry.getAssetRenderer() />
96 <@liferay_journal["journal-article"]
97 articleId=assetRenderer.getAssetObject().articleId
98 ddmTemplateKey=assetRenderer.getAssetObject().ddmTemplateKey
99 groupId=assetRenderer.getAssetObject().groupId />
100 </#if>
101 </#list>
102 </div>
103 </#if>
104 <#if (fiBusinessSizeWT > 0)>
105 <div
106 id="content-Business"
107 class="card-type-content"
108 role="tabpanel"
109 aria-labelledby="tab-Business"
110 style="display: none;">
111
112 <#list entries as entry>
113 <#if entry_index == 1>
114 <#assign assetRenderer = entry.getAssetRenderer() />
115 <@liferay_journal["journal-article"]
116 articleId=assetRenderer.getAssetObject().articleId
117 ddmTemplateKey=assetRenderer.getAssetObject().ddmTemplateKey
118 groupId=assetRenderer.getAssetObject().groupId />
119 </#if>
120 </#list>
121 </div>
122 </#if>
123 </div>
124 </div>
125</#if>
126
127<script>
128 AUI().ready(() => {
129 if(${fiPersonalSizeWT} > 0) {
130 hideOrShowDisclaimers("Personal");
131 } else {
132 hideOrShowDisclaimers("Business");
133 }
134 if (window.location.hash === '#business') {
135 const businessTab = document.getElementById('tab-Business');
136 if (businessTab) {
137 businessTab.click();
138 }
139 }
140 });
141 function setPillAndSelectToDefault() {
142 const buttons = document.querySelectorAll('.Tier3-Syn-Tabs-2024 .card-feature-pills__button');
143 buttons.forEach(button => {
144 button.classList.remove('active');
145 button.setAttribute('aria-selected', 'false');
146 });
147
148 buttons.forEach(button => {
149 if (button.getAttribute('data-pill') === 'All Cards') {
150 button.classList.add('active');
151 button.setAttribute('aria-selected', 'true');
152 }
153 });
154
155 const cardFeatureSelect = document.querySelectorAll('.Tier3-Syn-Tabs-2024 .card-feature-select' );
156 cardFeatureSelect.forEach(select=> {
157 if(select.value) {
158 select.value = 'All Cards';
159 }
160 });
161 }
162 document.addEventListener("DOMContentLoaded", function () {
163 const tabs = document.querySelectorAll(".card-type-tabs__button");
164 const tabContents = document.querySelectorAll(".card-type-content");
165
166 tabs.forEach((tab) => {
167 tab.addEventListener("click", () => {
168
169 tabs.forEach((t) => t.setAttribute("aria-selected", "false"));
170
171 tabContents.forEach((content) => {
172 content.style.display = "none";
173 });
174
175 tab.setAttribute("aria-selected", "true");
176
177 const targetContent = document.getElementById(tab.dataset.tab);
178 targetContent.style.display = "block";
179
180 const productType = tab.textContent.trim(); // Get the tab label as the product type
181 widgetButtonSlection(productType);
182 });
183 });
184 });
185
186 function widgetButtonSlection( productType) {
187 hideOrShowFeaturedCards(productType);
188 hideOrShowDisclaimers(productType);
189 hideAllPillSections();
190 document.getElementById("allcards-container-"+productType).style.display = "block";
191 setPillAndSelectToDefault();
192 }
193
194 function hideAllPillSections() {
195 document.getElementById("allcards-container-Personal").style.display = "none";
196 document.getElementById("cashback-container-Personal").style.display = "none";
197 document.getElementById("points-container-Personal").style.display = "none";
198 document.getElementById("travel-container-Personal").style.display = "none";
199 document.getElementById("noannualfee-container-Personal").style.display = "none";
200 document.getElementById("buildcredit-container-Personal").style.display = "none";
201 document.getElementById("lowintrorate-container-Personal").style.display = "none";
202
203 document.getElementById("allcards-container-Business").style.display = "none";
204 document.getElementById("cashback-container-Business").style.display = "none";
205 document.getElementById("points-container-Business").style.display = "none";
206 document.getElementById("travel-container-Business").style.display = "none";
207 document.getElementById("noannualfee-container-Business").style.display = "none";
208 document.getElementById("buildcredit-container-Business").style.display = "none";
209 document.getElementById("lowintrorate-container-Business").style.display = "none";
210 }
211
212 function hideOrShowFeaturedCards(type) {
213 const personalFeaturedCards = document.querySelector('.Personal-featured-cards');
214 const businessFeaturedCards = document.querySelector('.Business-featured-cards');
215
216 if (type === "Personal") {
217 if (personalFeaturedCards) {
218 personalFeaturedCards.classList.remove('hide');
219 }
220 if (businessFeaturedCards) {
221 businessFeaturedCards.classList.add('hide');
222 }
223 } else if (type === "Business") {
224 if (businessFeaturedCards) {
225 businessFeaturedCards.classList.remove('hide');
226 }
227 if (personalFeaturedCards) {
228 personalFeaturedCards.classList.add('hide');
229 }
230 }
231 }
232
233 function hideOrShowDisclaimers(type) {
234 const personalDisclaimers = document.querySelector('.tier3-disclaimer-landing-consumer');
235 const businessDisclaimers = document.querySelector('.tier3-disclaimer-landing-business');
236 if (type === "Personal") {
237 if (personalDisclaimers) {
238 personalDisclaimers.classList.remove('hide');
239 }
240 if (businessDisclaimers) {
241 businessDisclaimers.classList.add('hide');
242 }
243 } else if (type === "Business") {
244 if (businessDisclaimers) {
245 businessDisclaimers.classList.remove('hide');
246 }
247 if (personalDisclaimers) {
248 personalDisclaimers.classList.add('hide');
249 }
250 }
251 }
252</script>
253
254<style>
255 .Tier3-Syn-Tabs-2024-Feature {
256 /*@include page-width-container;*/
257 max-width: 1336px;
258 margin: 0 20px;
259 }
260 @media (min-width: 1376px) {
261 .Tier3-Syn-Tabs-2024-Feature {
262 margin: 0 auto;
263 }
264 }
265 .card-type-tabs {
266 display: flex;
267 justify-content: flex-start;
268 border-bottom: 1px solid #cccccc;
269 }
270
271 .card-type-tabs__button {
272 align-items: center;
273 background-color: transparent;
274 border: none;
275 border-bottom: 4px solid transparent;
276 color: #333;
277 display: flex;
278 flex-direction: column;
279 justify-content: center;
280 padding: 10px 30px;
281 text-align: center;
282 font-size: 20px;
283 font-weight: 700;
284 line-height: 25px;
285 margin-bottom: -1px;
286 flex: 1;
287 }
288 @media (min-width: 992px) {
289 .card-type-tabs__button {
290 flex: 0;
291 }
292 }
293 .card-type-tabs__button:focus {
294 outline: 1px solid #173989;
295 }
296 .card-type-tabs__button[aria-selected="true"] {
297 color: var(--ecdma-text-color);
298 border-bottom: 4px solid var(--ecdma-text-color);
299 }
300 .card-type-tabs__button:hover {
301 color: var(--ecdma-hover-color);
302 border-bottom: 4px solid var(--ecdma-hover-color);
303 }
304
305 .all-card-types-content {
306 }
307
308 .card-type-content {
309 display: none;
310 }
311
312 .card-type-content[style="display: block;"] {
313 display: block !important;
314 }
315
316</style>
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#18387094" at line 5, column 15] ---- Tip: It's the final [] step that caused this error, not those before it. ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#18387094" at line 5, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4
5<#assign lc = qstringmap["ecdma-lc"]?first>
6<#assign lc = htmlUtil.escape(lc)>
7<#assign lc = htmlUtil.escapeJS(lc)>
8
9<#assign prefix = "00000" >
10<#assign lcWithPrefix = prefix + lc >
11<#assign withPrefixLength = lcWithPrefix?length >
12<#assign startHere = withPrefixLength - 5>
13<#assign lc = lcWithPrefix?substring(startHere)>
14<#if lc?has_content>
15
16 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
17 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
18 <#assign clientProfile = clientProfileList?first>
19 <#assign partnerName = clientProfile.getMarketingNameLong()>
20
21 <#assign pbu = clientProfile.getPbu()>
22 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
23
24 <#assign fultonBankpbu = "0727491">
25 <#if pbu == fultonBankpbu>
26 <style>
27 #hideFultonInfo {
28 display: none;
29 }
30 </style>
31 </#if>
32
33 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
34 <#if (fiCardsData?size > 0) >
35 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
36
37 <#if (cardProvider?size > 0)>
38 <#-- This will be V for visa or M for mastercard. -->
39 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
40 <#else>
41 <script>
42 console.log("No card provider(Visa/Master Card) found for disclaimer");
43 </script>
44 </#if>
45
46 <div class="page-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer">
47 <div class="page-disclaimer__content">
48 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerBank.getData()?has_content>
49 ${disclaimerBank.getData()}
50 <#else>
51 <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))>
52 ${disclaimersVisa.getData()}
53 </#if>
54 <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) >
55 ${disclaimersMasterCard.getData()}
56 </#if>
57 </#if>
58 </div>
59 </div>
60 <#else>
61 <script>
62 console.log("card data empty");
63 </script>
64 </#if>
65<#else>
66 <script>
67 console.log("No lc for disclaimer");
68 </script>
69</#if>
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#18387094" at line 5, column 15] ---- Tip: It's the final [] step that caused this error, not those before it. ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#18387094" at line 5, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4
5<#assign lc = qstringmap["ecdma-lc"]?first>
6<#assign lc = htmlUtil.escape(lc)>
7<#assign lc = htmlUtil.escapeJS(lc)>
8
9<#assign prefix = "00000" >
10<#assign lcWithPrefix = prefix + lc >
11<#assign withPrefixLength = lcWithPrefix?length >
12<#assign startHere = withPrefixLength - 5>
13<#assign lc = lcWithPrefix?substring(startHere)>
14<#if lc?has_content>
15
16 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
17 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
18 <#assign clientProfile = clientProfileList?first>
19 <#assign partnerName = clientProfile.getMarketingNameLong()>
20
21 <#assign pbu = clientProfile.getPbu()>
22 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
23
24 <#assign fultonBankpbu = "0727491">
25 <#if pbu == fultonBankpbu>
26 <style>
27 #hideFultonInfo {
28 display: none;
29 }
30 </style>
31 </#if>
32
33 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
34 <#if (fiCardsData?size > 0) >
35 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
36
37 <#if (cardProvider?size > 0)>
38 <#-- This will be V for visa or M for mastercard. -->
39 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
40 <#else>
41 <script>
42 console.log("No card provider(Visa/Master Card) found for disclaimer");
43 </script>
44 </#if>
45
46 <div class="page-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer">
47 <div class="page-disclaimer__content">
48 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerBank.getData()?has_content>
49 ${disclaimerBank.getData()}
50 <#else>
51 <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))>
52 ${disclaimersVisa.getData()}
53 </#if>
54 <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) >
55 ${disclaimersMasterCard.getData()}
56 </#if>
57 </#if>
58 </div>
59 </div>
60 <#else>
61 <script>
62 console.log("card data empty");
63 </script>
64 </#if>
65<#else>
66 <script>
67 console.log("No lc for disclaimer");
68 </script>
69</#if>
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#18387099" at line 3, column 15] ---- Tip: It's the final [] step that caused this error, not those before it. ---- 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 lc = qstringmap["ecdma-lc"]?f... [in template "10154#10192#18387099" at line 3, column 1] ----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign lc = qstringmap["ecdma-lc"]?first>
4<#assign lc = htmlUtil.escape(lc)>
5<#assign lc = htmlUtil.escapeJS(lc)>
6
7<#if (lc?has_content && lc?length gt 5)>
8 <#assign lc = lc[0..4] >
9</#if>
10<#assign lc = lc?web_safe>
11<#assign aDateTime = .now>
12<#assign currentYear = aDateTime?string.yyyy>
13
14
15<footer class="page-footer" id="footerIdAdPlatinum">
16 <div class="page-footer__content">
17 ${footerContent.getData()}
18 </div>
19</footer>
20
21<!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
22<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
23<style>
24 #opt-out-button,
25 .modal__btn.learn-more {
26 background: #0C2074;
27 border: 1px solid #0C2074;
28 color: white;
29 text-transform: uppercase;
30 text-decoration: none;
31 font-size: 16px;
32 padding: 0.5rem 2rem;
33 display: inline-block;
34 border-radius: 0;
35 }
36 #opt-out-button:hover,
37 .modal__btn.learn-more:hover {
38 color: white !important;
39 border-color: #2C76AF !important;
40 background-color: #2C76AF !important;
41 }
42 .modal .modal__btn.learn-more {
43 background: white;
44 border: 1px solid #0C2074;
45 color: #0C2074;
46 text-decoration: none;
47 }
48 #opt-out-button[disabled="true"] {
49 background-color: rgba(0,0,0,.15);
50 color: rgba(0,0,0,.45);
51 border-color: rgba(0,0,0,.25);
52 }
53 #opt-out-button:hover[disabled="true"] {
54 background-color: rgba(0,0,0,.15) !important;
55 color: rgba(0,0,0,.45) !important;
56 border-color: rgba(0,0,0,.25) !important;
57 }
58 #opt-out-button:focus {
59 outline-style: solid;
60 outline-color: white;
61 outline-offset: -3px;
62 outline-width: 1px;
63 }
64 .opt-out-link svg {
65 width: 30px;
66 height: 14px;
67 width: auto;
68 vertical-align: middle;
69 }
70 .modal__overlay {
71 position: fixed;
72 top: 0;
73 left: 0;
74 right: 0;
75 bottom: 0;
76 background: rgba(0,0,0,0.6);
77 display: flex;
78 justify-content: center;
79 align-items: center;
80 }
81
82 .modal__container {
83 background-color: #fff;
84 padding: 30px;
85 max-width: 500px;
86 max-height: 100vh;
87 border-radius: 4px;
88 overflow-y: auto;
89 box-sizing: border-box;
90 }
91
92 .modal__header {
93 display: flex;
94 justify-content: space-between;
95 align-items: center;
96 }
97
98 .modal .modal__container .modal__title {
99 margin-top: 0;
100 margin-bottom: 0;
101 font-weight: 600;
102 font-size: 20px;
103 line-height: 1.25;
104 color: #00449e;
105 box-sizing: border-box;
106 }
107
108 .modal__close {
109 background: transparent;
110 border: 1px solid white;
111 padding: 4px 8px;
112 }
113 .modal__close:hover {
114 border: 1px solid black;
115 }
116
117 .modal__header .modal__close:before { content: "\2715"; }
118
119 .modal__content {
120 margin-top: 2rem;
121 margin-bottom: 2rem;
122 line-height: 1.5;
123 }
124
125 @keyframes mmfadeIn {
126 from { opacity: 0; }
127 to { opacity: 1; }
128 }
129
130 @keyframes mmfadeOut {
131 from { opacity: 1; }
132 to { opacity: 0; }
133 }
134
135 @keyframes mmslideIn {
136 from { transform: translateY(15%); }
137 to { transform: translateY(0); }
138 }
139
140 @keyframes mmslideOut {
141 from { transform: translateY(0); }
142 to { transform: translateY(-10%); }
143 }
144
145 .micromodal-slide {
146 display: none;
147 }
148
149 .micromodal-slide.is-open {
150 display: block;
151 }
152
153 .micromodal-slide[aria-hidden="false"] .modal__overlay {
154 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
155 }
156
157 .micromodal-slide[aria-hidden="false"] .modal__container {
158 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
159 }
160
161 .micromodal-slide[aria-hidden="true"] .modal__overlay {
162 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
163 }
164
165 .micromodal-slide[aria-hidden="true"] .modal__container {
166 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
167 }
168
169 .micromodal-slide .modal__container,
170 .micromodal-slide .modal__overlay {
171 will-change: transform;
172 }
173</style>
174
175<div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
176<div class="modal__overlay" tabindex="-1" data-micromodal-close>
177 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
178 <header class="modal__header">
179 <h2 class="modal__title" id="modal-1-title">
180 Your California privacy choices
181 </h2>
182 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
183 </header>
184 <div class="modal__content" id="modal-1-content">
185 <div id="message-no-cookie">
186 <p>
187 We use technologies, such as cookies, that gather information on our website. That information is used for a variety of purposes, such as to understand how visitors interact with our websites, or to serve advertisements on our websites or on other websites. The use of technologies, such as cookies, constitutes a ‘share’ or ‘sale’ of personal information under the California Privacy Rights Act. You can stop the use of certain third-party tracking technologies that are not considered our service providers by clicking on “Opt-Out” below or by broadcasting the global privacy control signal.</p>
188
189<p> </p>
190
191<p>Note that due to technological limitations, if you visit our website from a different computer or device, or clear cookies on your browser that store your preferences, you will need to return to this screen to opt-out and/or rebroadcast the signal. You can find a description of the types of tracking technologies, and your options with respect to those technologies, by clicking “Learn more” below.</p>
192 </div>
193 <div id="message-with-cookie">
194 <p>You have successfully opted-out.</p>
195 </div>
196 </div>
197 <div class="modal__footer">
198 <a href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a>
199 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
200 </div>
201 </div>
202</div>
203</div>
204<!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
205<!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
206<script>
207AUI().ready(function() {
208 //this aui.ready prevents from it not showing cali opt out modal due to getting the node before page finished loading.
209 const copyrightNode = document.querySelector('#footerIdAdPlatinum .copyright');
210 const fdicNode = document.querySelector('#footerIdAdPlatinum .fdic');
211 const agreementNode = document.querySelector('#footerIdAdPlatinum .member-agreement');
212 agreementNode.innerHTML= '<a class="text-color-white" href="https://onboarding.elancreditcard.com/usl/generic/credit-card/application/card-member-agreements?locationCode=${lc!''}" target="_blank">Cardmember Agreements</a>';
213 copyrightNode.innerHTML= '© Elan Financial Services ' + ${currentYear};
214 copyrightNode.classList.add('ecdma-footer-client-name-copyright');
215 fdicNode.innerHTML = '<a class="text-color-white" href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
216 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
217 fdicNode.insertAdjacentHTML('afterend', '<div class="opt-out-container" ><a href="javascript:void(0);" class="opt-out-link" data-micromodal-trigger="modal-1">Your California privacy choices <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve"><path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#fff"/><path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#06f"/><path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" fill="#fff"/><path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" fill="#06f"/></svg></a></div>');
218 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
219
220 window.getCookieDomain = function() {
221 var hostname = window.location.hostname.split(".");
222 return hostname && hostname.slice(hostname.length - 2).join(".");
223 }
224 window.setToOptOut = function() {
225 if (window.getCookie('privacy_optout')) {
226 document.getElementById('message-no-cookie').style.display = 'none';
227 document.getElementById('message-with-cookie').style.display = 'block';
228 document.getElementById('opt-out-button').setAttribute('disabled', true)
229 } else {
230 document.getElementById('message-no-cookie').style.display = 'block';
231 document.getElementById('message-with-cookie').style.display = 'none';
232 }
233 }
234 window.getCookie = function(name) {
235 var value = '; ' + document.cookie;
236 var parts = value.split('; ' + name + '=');
237 if (parts.length === 2) return parts.pop().split(';').shift();
238 }
239 window.californiaOptOut = function() {
240 if (!window.getCookie('privacy_optout')) {
241 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
242 try {
243 if (window.CustomEvent) {
244 window.dispatchEvent(new CustomEvent('privacy_optout'));
245 } else {
246 var privacyOptoutEvent = document.createEvent('Event');
247 privacyOptoutEvent.initEvent('privacy_optout', true, true);
248 window.dispatchEvent(privacyOptoutEvent);
249 }
250 window.setToOptOut();
251 } catch (err) {
252 console.error(err);
253 }
254 }
255 }
256 MicroModal.init({
257 onShow: window.setToOptOut
258 });
259
260 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
261 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
262 if(isBrowserGpcOptOut === true) {
263 window.californiaOptOut();
264 }
265 });
266</script>
267<!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->