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#153417670" 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#153417670" 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 <#assign index = 0>
89 <#list fiCardsData as fib>
90 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
91 <#assign offerTypeList = offerTypeList + [fib.offerType]>
92 <#assign temp = temp + fiCardsData[index..index]>
93 </#if>
94 <#assign index = index + 1>
95 </#list>
96 <#assign fiCardsData = temp>
97 <#if (fiCardsData?size > 0)>
98 <div class="content-container content-container-main" title="${partnerName!''}">
99 <#if url?contains("index")>
100 <#assign product="All Cards">
101 <header class="jn-header">
102 <div class="header-logo">
103
104 <#if partnerUrl?has_content>
105 <a href="${partnerUrl!''}" title="${partnerName!''}">
106 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
107 </a>
108 <#else>
109 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
110 </#if>
111 </div>
112 </header>
113 <#else>
114 <header class="jn-header">
115 <#if !isFromDCOLink>
116 <div class="back-overview hide-desktop">
117 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
118 </div>
119 </#if>
120
121 <div class="header-main-logo" title="${partnerName!''}">
122 <#if partnerUrl?has_content>
123 <a href="${partnerUrl!''}" title="${partnerName!''}">
124 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
125 </a>
126 <#else>
127 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
128 </#if>
129 </div>
130 <#if !isFromDCOLink>
131 <div class="styled-select slate">
132 <nav class="styled-select__dropdown">
133 <div class="back-overview hide-mobile">
134 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
135 </div>
136 <a href="javascript:void(0)" class="dropdown-select" aria-expanded="false">
137 <span class="selected-option"></span>
138 <div class="jn-arrow arrow arrow-right"></div>
139 </a>
140 <a href="javascript:void(0)" class="jn-hamburger hamburger" aria-expanded="false">
141 <div class="first-line transform transformed1"></div>
142 <div></div>
143 <div class="transform transformed2"></div>
144 <div></div>
145 </a>
146 <ul>
147 <#list fiCardsData as fib>
148 <#switch fib.offerType>
149 <#case "101">
150 <#assign productURL = "202302/consumer-edr">
151 <#assign productName = "Everyday Rewards+">
152 <#break>
153 <#case "103">
154 <#assign productURL = "202302/consumer-edr">
155 <#assign productName = "Everyday Rewards+">
156 <#break>
157 <#case "104">
158 <#assign productURL = "max-cash">
159 <#assign productName = "Max Cash Preferred Card">
160 <#break>
161 <#case "108">
162 <#assign productURL="202308/consumer-platinum">
163 <#assign productName="Platinum Card">
164 <#break>
165 <#case "109">
166 <#assign productURL="202308/consumer-platinum">
167 <#assign productName="Platinum Card">
168 <#break>
169 <#case "115">
170 <#assign productURL = "secured">
171 <#assign productName = "Secured Card" >
172 <#break>
173 <#case "138">
174 <#assign productURL = "202305/travel-rewards-plus">
175 <#assign productName = "Travel Rewards+" >
176 <#break>
177 <#case "141">
178 <#assign productURL = "college-real-rewards">
179 <#assign productName = "College Real Rewards" >
180 <#break>
181 <#case "147">
182 <#assign productURL = "max-cash-secured">
183 <#assign productName = "Max Cash Secured Card" >
184 <#break>
185 <#case "154">
186 <#assign productURL = "202305/reserve-rewards-plus">
187 <#assign productName = "Reserve Rewards+" >
188 <#break>
189 <#case "121">
190 <#assign productURL = "202208/business-platinum">
191 <#assign productName = "Business Card" >
192 <#break>
193 <#case "128">
194 <#assign productURL = "business-cash-preferred">
195 <#assign productName = "Business Cash Preferred" >
196 <#break>
197 <#case "143">
198 <#assign productURL = "business-real-rewards">
199 <#assign productName = "Business Real Rewards Card" >
200 <#break>
201 <#case "144">
202 <#assign productURL = "smart-business-rewards">
203 <#assign productName = "Smart Business Rewards Card" >
204 <#break>
205 <#default>
206 </#switch>
207 <#if url?matches(".*/${productURL}\\?.*")>
208 <li class="selected" data-value="${productName}" selected="selected"><a href="javascript:void(0)">${productName}</a></li>
209 <#else>
210 <li class="dropdown-item" data-value="${productName}">
211 <a href="${environment}/11t3/${productURL}?ecdma-lc=${lc}${ecidExt}">
212 ${productName}
213 </a>
214 </li>
215 </#if>
216 </#list>
217 </ul>
218 </nav>
219
220 </div>
221 </#if>
222 </header>
223 <script>
224 function toggleFlyOutMenu() {
225 $('.styled-select').toggleClass('show-select');
226 var ariaExpanded = $('.styled-select__dropdown .dropdown-select').attr('aria-expanded');
227 if(ariaExpanded !== null) {
228 var isAriaExpanded;
229 if(ariaExpanded === "true") {
230 isAriaExpanded = true;
231 } else {
232 isAriaExpanded = false
233 }
234 $('.styled-select__dropdown .dropdown-select').attr('aria-expanded', !isAriaExpanded);
235 $('.styled-select__dropdown .jn-hamburger').attr('aria-expanded', !isAriaExpanded);
236 }
237 }
238 AUI().ready(function () {
239 var pageSelected = $('.selected').attr('data-value');
240 $('.jn-hamburger, .dropdown-select').click(function () {
241 toggleFlyOutMenu();
242 });
243 $('.styled-select__dropdown').keydown(function(event) {
244 var firstNavigationLink = $('.styled-select__dropdown ul li:visible a').first();
245 var lastNavigationLink = $('.styled-select__dropdown ul li:visible a').last();
246
247 if(event.keyCode === 9 ) {
248 // if they tab outside of the nav close the navigation
249 //shift + tab pressed
250 if(event.shiftKey && firstNavigationLink.is(document.activeElement)) {
251 toggleFlyOutMenu();
252 } else if(!event.shiftKey && lastNavigationLink.is(document.activeElement)) {
253 toggleFlyOutMenu();
254 }
255 }
256 });
257 $('.selected-option').text(pageSelected);
258 });
259 </script>
260 </#if>
261 </div>
262 <script>
263 var reportingData = {};
264
265 //document.addEventListener('DOMContentLoaded', function() {
266 AUI().ready(function () {
267 //console.log('inside ready');
268 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
269 var hostName = location.hostname;
270 function getDomainFromHostname(hostname) {
271 var parts = hostname.split('.');
272 return parts.length === 3 ? parts[1] : parts[0];
273 }
274 var domain = getDomainFromHostname(hostName);
275 var partnerName = "${partnerName!''}";
276 var product = "All Cards";
277 var title = "";
278 var metaDesc = "";
279 var m = document.createElement('meta');
280 switch(page) {
281 case "max-cash-secured":
282 product="Max Cash Secured Card";
283 title = "Earn more on the categories you pick | "+partnerName+" Max Cash Secured Card";
284 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
285 break;
286 case "max-cash":
287 product="Max Cash Preferred Card";
288 title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card";
289 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select";
290 break;
291 case "consumer-platinum":
292 product="Platinum Card";
293 title = "The purchasing power of Zero | "+partnerName+" Platinum Card";
294 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 20 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card.";
295 break;
296 case "consumer-edr":
297 product="Everyday Rewards+";
298 title = "Sign up and earn bonus points | "+partnerName+" Everyday Rewards+";
299 break;
300 case "secured":
301 product="Secured Card";
302 title = "Strengthen your finances | "+partnerName+" Secured Card";
303 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
304 break;
305 case "college-real-rewards":
306 product="College Real Rewards";
307 title = "Sign up and earn bonus points. | "+partnerName+" College Real Rewards";
308 break;
309 case "smart-business-rewards":
310 product="Smart Business Rewards Card";
311 title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card";
312 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.";
313 break;
314 case "business-cash-preferred":
315 product="Business Cash Preferred";
316 title = "Flexible rewards for your business | "+partnerName+" Business Cash Preferred";
317 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
318 break;
319 case "business-real-rewards":
320 product="Business Real Rewards Card";
321 title = "Earn up to 3X points with no caps | "+partnerName+" Business Real Rewards Card";
322 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ;
323 break;
324 case "business-platinum":
325 product="Business Card";
326 title = "Pay down your other credit card balances faster | "+partnerName+" Business Card";
327 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
328 break;
329 case "travel-rewards-plus":
330 product="Travel Rewards+"
331 title = partnerName + " | Travel Rewards+ Card";
332 metaDesc = "Make travel more rewarding with unlimited 4x points on travel and frequent popular categories."
333 break;
334 case "reserve-rewards-plus":
335 product="Reserve Rewards+"
336 title = partnerName + " | Reserve Rewards+ Card";
337 metaDesc = "Get exceptional rewards on travel and frequent purchases with this exclusive metal card.";
338 break;
339 default:
340 product = "All Cards";
341 title = partnerName + " Credit Card Index Page";
342 }
343 document.title = title;
344 m.name = 'description';
345 m.content = metaDesc;
346 document.head.appendChild(m);
347
348 var lc = "${lc!'0'}";
349
350 /* update SiteCatalyst data object */
351 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
352 reportingData.page_type = 'product';
353 reportingData.site_section = 'credit cards';
354 reportingData.platform = 'microsite';
355 reportingData.campaign_id = '${campaignId}';
356 reportingData.location_code = lc;
357 reportingData.partner_name = partnerName;
358 reportingData.product = product;
359 reportingData.text_to_apply_source = '${text_to_apply_source}';
360 reportingData.visitor_type = 'prospect';
361 reportingData.Banker_id = '0';
362 reportingData.Banker_code = '0';
363
364
365 /* SiteCatalyst pageView tracking */
366 AUI().ready(function() {
367 if (window.publisherFW) {
368 //console.log("pageView");
369 window.publisherFW.publishEvent("pageView", reportingData);
370 }
371 });
372
373 jQuery('.jn-button, .applyNowLink').on('click', function(e){
374 var buttonName = $(this).data('button-name');
375 var productName = $(this).data('product-name');
376 /* SiteCatalyst onClick tracking */
377 reportingData.applyButton = buttonName;
378 reportingData.product = productName;
379
380 if (window.publisherFW) {
381 //console.log('clicked', reportingData);
382 window.publisherFW.publishEvent("onClick", reportingData);
383 }
384
385 });
386
387 jQuery('.applyNowLink').on('click', function(e){
388 ga("send", {
389 hitType: "event",
390 eventAction: "ApplyNow",
391 eventCategory: "click",
392 eventLabel: "BottomButton"
393 });
394 });
395
396 });
397 </script>
398 <#else>
399 <script>
400 console.log("Empty card list");
401 location.href = '${url404}';
402 </script>
403 </#if>
404<#else>
405 <script>
406 console.log("FI Cards Data empty", "pbu:", "${pbu}", ",subbu:","${subbu}");
407 location.href = '${url404}';
408 </script>
409</#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#153417688" at line 9, 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#153417688" at line 9, column 1] ----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
5<#assign url404 = '/error/404.html'>
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7<#assign currentEnvironment = 'prod' >
8
9<#assign lc= qstringmap["ecdma-lc"]?first>
10<#assign lc = htmlUtil.escape(lc)>
11<#assign lc = htmlUtil.escapeJS(lc)>
12
13<#assign prefix = "00000" >
14<#assign lcWithPrefix = prefix + lc >
15<#assign withPrefixLength = lcWithPrefix?length >
16<#assign startHere = withPrefixLength - 5>
17<#assign lc = lcWithPrefix?substring(startHere)>
18
19
20<#if qstringmap["ecid"]?has_content>
21 <#assign ecidExt = qstringmap["ecid"]?first>
22 <#assign ecidExt = htmlUtil.escape(ecidExt)>
23 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
24 <#assign ecidExt = "&ecid=" + ecidExt>
25<#else>
26 <#assign ecidExt="">
27</#if>
28<#if oadURL?contains("uat-")>
29 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
30 <#assign currentEnvironment = 'uat' >
31<#else>
32 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
33</#if>
34 <script>
35 //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}');
36 </script>
37<#assign campaignId = "" >
38<#assign ecidExt="">
39<#if qstringmap["ecid"]?has_content>
40 <#assign campaignId = qstringmap["ecid"]?first >
41 <#assign campaignId = htmlUtil.escape(campaignId)>
42 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
43
44 <#assign ecidExt = qstringmap["ecid"]?first>
45 <#assign ecidExt = htmlUtil.escape(ecidExt)>
46 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
47 <#assign ecidExt = "&ecid=" + ecidExt>
48</#if>
49
50<#assign dcoSourceCode = "">
51<#assign dcoSourceCodeQueryParameter = "">
52
53<#if qstringmap["sourcecode"]?has_content>
54 <#assign dcoSourceCode = qstringmap["sourcecode"]?first>
55 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
56 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
57 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
58<#elseif qstringmap["sourceCode"]?has_content>
59 <#assign dcoSourceCode = qstringmap["sourceCode"]?first>
60 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
61 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
62 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
63</#if>
64
65<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
66<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
67<#assign clientProfile = clientProfileList?first>
68<#assign partnerName = clientProfile.getMarketingNameLong()>
69<#assign pbu = clientProfile.getPbu()>
70<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
71<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
72
73<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)>
74<#assign temp = []>
75<#assign consumerCards = []>
76<#assign businessCards = []>
77<#assign offerTypeList = []>
78<#assign index = 0>
79<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]>
80<#assign businessOfferTypes = ["128", "121", "143", "144"]>
81<#list fiCardsData as fib>
82 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
83 <#assign offerTypeList = offerTypeList + [fib.offerType]>
84 <#if (consumerOfferTypes?seq_contains(fib.offerType))>
85 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
86 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
87 <#assign businessCards = businessCards + fiCardsData[index..index]>
88 </#if>
89 <#assign temp = temp + fiCardsData[index..index]>
90 </#if>
91 <#assign index = index + 1>
92</#list>
93
94<#assign fiCardsData = temp>
95 <script>
96 //console.log("fi card data count", ${fiCardsData?size})
97</script>
98
99<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
100<#if (clientdata?size > 0)>
101 <#assign backgroundColor = clientdata[0].backgroundHexColor>
102</#if>
103
104<#if (fiCardsData?size > 0)>
105 <style>
106 .excludeModal__overlay {
107 position: fixed;
108 top: 0;
109 left: 0;
110 right: 0;
111 bottom: 0;
112 background: rgba(0,0,0,0.6);
113 display: flex;
114 justify-content: center;
115 align-items: center;
116 }
117
118 .excludeModal__container {
119 background-color: #fff;
120 padding: 30px;
121 min-width: 500px;
122 max-width: 500px;
123 max-height: 100vh;
124 border-radius: 4px;
125 overflow-y: auto;
126 box-sizing: border-box;
127 }
128
129 .excludeModal__header {
130 display: flex;
131 justify-content: space-between;
132 align-items: center;
133 }
134
135 .modal .excludeModal__container .excludeModal__title {
136 margin-top: 0;
137 margin-bottom: 0;
138 font-weight: 600;
139 font-size: 20px;
140 line-height: 1.25;
141 color: #00449e;
142 box-sizing: border-box;
143 }
144
145 .excludeModal__close {
146 background: transparent;
147 border: 1px solid white;
148 padding: 4px 8px;
149 float: right;
150 }
151
152 .excludeModal__close:hover {
153 border: 1px solid black;
154 }
155
156 .excludeModal__close:before { content: "\2715"; }
157
158 @keyframes mmfadeIn {
159 from { opacity: 0; }
160 to { opacity: 1; }
161 }
162
163 @keyframes mmfadeOut {
164 from { opacity: 1; }
165 to { opacity: 0; }
166 }
167
168 @keyframes mmslideIn {
169 from { transform: translateY(15%); }
170 to { transform: translateY(0); }
171 }
172
173 @keyframes mmslideOut {
174 from { transform: translateY(0); }
175 to { transform: translateY(-10%); }
176 }
177
178 .micromodal-slide {
179 display: none;
180 }
181
182 .micromodal-slide.is-open {
183 display: block;
184 }
185
186 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
187 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
188 }
189
190 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
191 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
192 }
193
194 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
195 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
196 }
197
198 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
199 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
200 }
201
202 .micromodal-slide .excludeModal__container,
203 .micromodal-slide .excludeModal__overlay {
204 will-change: transform;
205 }
206 </style>
207 <#if url?contains("index")>
208 <#assign isExcluded = 0>
209 <#assign offerId = "">
210 <#assign sourceCode = "">
211 <#assign cardArtImage = "">
212 <#assign productUrlHero = "">
213 <#assign product = "">
214 <#assign cardIndex = 0>
215 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
216 <#if (offerTypeList?seq_contains("108")) || (offerTypeList?seq_contains("109"))>
217 <#list consumerCards as card>
218 <#if (card.offerType=="108") || (card.offerType=="109")>
219 <#assign isExcluded = 0>
220 <#if card.dmaexclude??>
221 <#assign isExcluded = card.dmaexclude?number!0>
222 </#if>
223 <#assign offerId = card.offerId>
224 <#assign sourceCode = card.sourceCode>
225 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
226 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
227
228 <#assign productUrlHero="consumer-platinum2103">
229 <#assign product="Platinum">
230 <#assign cardIndex = 1>
231 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)>
232 <#if (scrapedData?size > 0)>
233 <#list scrapedData as sItem>
234 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
235 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
236 <#break>
237 </#if>
238 </#list>
239 <script>
240 $(document).ready(function () {
241 var aprText = "${apr}";
242 //console.log('aprText: ${aprText!''}');
243 if (aprText) {
244 $(".apr-full-text").html(aprText);
245 try {
246 var matches= aprText.match(/\d+(\.\d+)?%?/g);
247 var billing_cycle = matches[1];
248 var apr_min = apr_min = matches[2];
249 var apr_max = apr_max = matches[3];
250 //console.log('billing_cycle', billing_cycle);
251 //console.log('apr_min', apr_min);
252 //console.log('apr_max', apr_max);
253 if (billing_cycle) {
254 //console.log($(".scraped-billing-cycle"));
255 $(".scraped-billing-cycle").html(billing_cycle);
256 }
257 if (apr_min) {
258 $(".scraped-apr-min").html(apr_min);
259 }
260 if (apr_max) {
261 $('.scraped-apr-max').html(apr_max);
262 }
263
264 } catch (e) {
265 console.log(e);
266 }
267 }
268 });
269 </script>
270 </#if>
271 <script>
272 $(document).ready(function () {
273 $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${card.offerId}&locationCode=${lc}" target="_blank"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions</a>');
274 });
275 </script>
276 </#if>
277 </#list>
278 <#else>
279 <#assign isExcluded = 0>
280 <#if consumerCards[0].dmaexclude??>
281 <#assign isExcluded = consumerCards[0].dmaexclude?number!0>
282 </#if>
283 <#assign displayedCard = consumerCards[0]>
284 <#assign offerId = displayedCard.offerId>
285 <#assign sourceCode = displayedCard.sourceCode>
286 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
287 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
288 <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")>
289 <#assign productUrlHero="consumer-platinum">
290 <#assign product="Platinum">
291 <#assign cardIndex = 1>
292 <#elseif (displayedCard.offerType=="104")>
293 <#assign productUrlHero = "max-cash">
294 <#assign product="Max Cash Preferred">
295 <#assign cardIndex = 0>
296 <#elseif (displayedCard.offerType=="115")>
297 <#assign productUrlHero = "secured">
298 <#assign product="Secured">
299 <#assign cardIndex = 2>
300 </#if>
301 </#if>
302 <#if product?has_content && product != "">
303 <#assign card_text = product + " Card">
304 </#if>
305 </#if>
306 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
307 <#if (offerTypeList?seq_contains("128")) >
308 <#list businessCards as card>
309 <#if (card.offerType=="128")>
310 <#assign isExcluded = 0>
311 <#if card.dmaexclude??>
312 <#assign isExcluded = card.dmaexclude?number!0>
313 </#if>
314 <#assign offerId = card.offerId>
315 <#assign sourceCode = card.sourceCode>
316 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
317 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
318
319 <#assign productUrlHero="business-cash-preferred">
320 <#assign product="Business Cash Preferred">
321 <#assign cardIndex = 1>
322 </#if>
323 </#list>
324 <#else>
325 <#assign isExcluded = 0>
326 <#if businessCards[0].dmaexclude??>
327 <#assign isExcluded = businessCards[0].dmaexclude?number!0>
328 </#if>
329 <#assign displayedCard = businessCards[0]>
330 <#assign offerId = displayedCard.offerId>
331 <#assign sourceCode = displayedCard.sourceCode>
332 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
333 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
334 <#if (displayedCard.offerType=="143")>
335 <#assign productUrlHero="business-real-rewards">
336 <#assign product="Business Real Rewards">
337 <#assign cardIndex = 2>
338 <#elseif (displayedCard.offerType=="144")>
339 <#assign productUrlHero="smart-business-rewards">
340 <#assign product="Smart Business Rewards">
341 <#assign cardIndex = 0>
342 <#elseif (displayedCard.offerType=="121")>
343 <#assign productUrlHero = "business-platinum">
344 <#assign product="Business">
345 <#assign cardIndex = 3>
346 </#if>
347 </#if>
348 <#if product?has_content && product != "">
349 <#assign card_text = product + " Card">
350 </#if>
351 </#if>
352 <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}">
353 <div class="hero-main">
354 <div class="hero-main-container">
355 <div class="hero-main-offer">
356 <div class="offer-detail">
357 <div class="offer-detail-cardArt cardArtImg">
358 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
359 class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
360 <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }"
361 class="jn-img-responsive">-->
362 <p>${card_text!''}</p>
363 </div>
364 <div class="offer-detail-text text-color-default hide-desktop">
365 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
366 </div>
367 <#if isExcluded == 0>
368 <a
369 class="jn-button hide-desktop btn"
370 data-button-name="cta-button-top"
371 data-product-name="${productUrlHero!''}"
372 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
373 >
374 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
375 </a>
376 <#else>
377 <a
378 class="jn-button hide-desktop btn"
379 data-button-name="cta-button-top"
380 data-product-name="${productUrlHero!''}"
381 data-micromodal-trigger="modal-index-hero"
382 href="javascript:void(0);"
383 >
384 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
385 </a>
386 </#if>
387 </div>
388 <div class="offer-header">
389 <div class="offer-text-top">
390 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
391 </div>
392 <div class="offer-text-bottom hide-mobile">
393 <div class="offer-detail-text text-color-default ">
394 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
395 </div>
396
397 <#if isExcluded == 0>
398 <a
399 class="jn-button"
400 data-button-name="cta-button-top"
401 data-product-name="${productUrlHero!''}"
402 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
403 >
404 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
405 </a>
406 <#else>
407 <a
408 class="jn-button"
409 data-button-name="cta-button-top"
410 data-product-name="${productUrlHero!''}"
411 data-micromodal-trigger="modal-index-hero"
412 href="javascript:void(0);"
413 >
414 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
415 </a>
416 </#if>
417 </div>
418 </div>
419 </div>
420 </div>
421 </div>
422 </div>
423
424 <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" >
425 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
426 <div
427 aria-modal="true"
428 aria-labelledby="modal-index-hero-title"
429 class="excludeModal__container"
430 role="dialog"
431 >
432 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
433 <header class="excludeModal__header">
434 <h2 class="excludeModal__title" id="modal-index-hero-title">
435 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
436 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
437 </#if>
438 </h2>
439 </header>
440 </div>
441 </div>
442 </div>
443 <#else>
444 <#assign hasBalanceTransferCalculator = false>
445 <#list fiCardsData as fib>
446 <#switch fib.offerType>
447 <#case "101">
448 <#assign cardIndex = 3 >
449 <#assign productUrlHero = "consumer-edr">
450 <#assign product="Everyday Rewards+">
451 <#assign hasBalanceTransferCalculator = false>
452 <#break>
453 <#case "103">
454 <#assign cardIndex = 3 >
455 <#assign productUrlHero = "consumer-edr">
456 <#assign product="Everyday Rewards+">
457 <#assign hasBalanceTransferCalculator = false>
458 <#break>
459 <#case "104">
460 <#assign cardIndex = 0 >
461 <#assign productUrlHero="max-cash">
462 <#assign product="Max Cash Preferred">
463 <#assign hasBalanceTransferCalculator = false>
464 <#break>
465 <#case "108">
466 <#assign cardIndex = 1 >
467 <#assign productUrlHero = "consumer-platinum">
468 <#assign product="Platinum">
469 <#assign hasBalanceTransferCalculator = true>
470 <#break>
471 <#case "109">
472 <#assign cardIndex = 1 >
473 <#assign productUrlHero = "consumer-platinum">
474 <#assign product="Platinum">
475 <#assign hasBalanceTransferCalculator = true>
476 <#break>
477 <#case "141">
478 <#assign cardIndex = 4 >
479 <#assign productUrlHero = "college-real-rewards">
480 <#assign product = "College Real Rewards" >
481 <#assign hasBalanceTransferCalculator = false>
482 <#break>
483 <#case "147">
484 <#assign cardIndex = 5 >
485 <#assign productUrlHero = "max-cash-secured">
486 <#assign product = "Max Cash Secured" >
487 <#assign hasBalanceTransferCalculator = false>
488 <#break>
489 <#case "115">
490 <#assign cardIndex = 2 >
491 <#assign productUrlHero = "secured">
492 <#assign product="Secured">
493 <#assign hasBalanceTransferCalculator = false>
494 <#break>
495 <#case "138">
496 <#assign cardIndex = 6 >
497 <#assign productUrlHero = "travel-rewards-plus">
498 <#assign product="Travel Rewards+">
499 <#assign hasBalanceTransferCalculator = false>
500 <#break>
501 <#case "154">
502 <#assign cardIndex = 7 >
503 <#assign productUrlHero = "reserve-rewards-plus">
504 <#assign product="Reserve Rewards+">
505 <#assign hasBalanceTransferCalculator = false>
506 <#break>
507 <#case "128">
508 <#assign cardIndex = 1 >
509 <#assign productUrlHero = "business-cash-preferred">
510 <#assign product="Business Cash Preferred">
511 <#assign hasBalanceTransferCalculator = false>
512 <#break>
513 <#case "143">
514 <#assign cardIndex = 2 >
515 <#assign productUrlHero = "business-real-rewards">
516 <#assign product="Business Real Rewards">
517 <#assign hasBalanceTransferCalculator = false>
518 <#break>
519 <#case "144">
520 <#assign cardIndex = 0 >
521 <#assign productUrlHero = "smart-business-rewards">
522 <#assign product="Smart Business Rewards">
523 <#assign hasBalanceTransferCalculator = false>
524 <#break>
525 <#case "121">
526 <#assign cardIndex = 3 >
527 <#assign productUrlHero = "business-platinum">
528 <#assign product="Business">
529 <#assign hasBalanceTransferCalculator = false>
530 <#break>
531 <#default>
532 </#switch>
533 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
534 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
535
536 <script>
537 console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")
538 </script>
539
540 <#if url?matches(".*/${productUrlHero}\\?.*")>
541 <#assign isExcluded = 0>
542 <#if fib.dmaexclude??>
543 <#assign isExcluded = fib.dmaexclude?number!0>
544 </#if>
545 <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")>
546
547 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')>
548 <#if (scrapedData?size > 0)>
549 <#list scrapedData as sItem>
550 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
551 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
552 <#break>
553 </#if>
554
555 </#list>
556 <script>
557 $(document).ready(function () {
558 var aprText = "${apr}";
559 //console.log('aprText',aprText);
560 if (aprText) {
561 $(".apr-full-text").html(aprText);
562 try {
563 var matches= aprText.match(/\d+(\.\d+)?%?/g);
564 var billing_cycle = matches[1];
565 var apr_min = apr_min = matches[2];
566 var apr_max = apr_max = matches[3];
567 //console.log('billing_cycle', billing_cycle);
568 //console.log('apr_min', apr_min);
569 //console.log('apr_max', apr_max);
570 if (billing_cycle) {
571 //console.log($(".scraped-billing-cycle"));
572 $(".scraped-billing-cycle").html(billing_cycle);
573 }
574 if (apr_min) {
575 $(".scraped-apr-min").html(apr_min);
576 }
577 if (apr_max) {
578 $('.scraped-apr-max').html(apr_max);
579 }
580
581 } catch (e) {
582 console.log(e);
583 }
584 }
585 });
586 </script>
587 </#if>
588 </#if>
589 <#if product?has_content && product != "">
590 <#assign card_text = product + " Card">
591 </#if>
592 <#assign tc_offerTypes = ['108', '109', '121', '144']>
593 <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']>
594 <div class="hero-container ${class.getData()}">
595 <div class="hero-main">
596 <div class="hero-main-container">
597 <div class="hero-main-offer">
598 <div class="offer-detail">
599 <div class="offer-detail-cardArt cardArtImg">
600 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
601 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive">
602 <p>${card_text!''}</p>
603 <#if (hasBalanceTransferCalculator)>
604 <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a>
605 </#if>
606 </div>
607 <div class="offer-detail-text text-color-default hide-desktop">
608 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
609
610 <#if (tc_offerTypes?seq_contains(fib.offerType))>
611 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
612 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
613 </a>
614 </#if>
615 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
616 <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a>
617 </#if>
618 </div>
619
620 <#if isExcluded == 0>
621 <a
622 class="jn-button hide-desktop btn"
623 data-button-name="cta-button-top"
624 data-product-name="${productUrlHero!''}"
625 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
626 >
627 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
628 </a>
629 <#else>
630 <a
631 class="jn-button hide-desktop btn"
632 data-button-name="cta-button-top"
633 data-product-name="${productUrlHero!''}"
634 data-micromodal-trigger="modal-product-hero"
635 href="javascript:void(0);"
636 >
637 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
638 </a>
639 </#if>
640 </div>
641 <div class="offer-header">
642 <div class="offer-text-top">
643 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
644 </div>
645 <div class="offer-text-bottom hide-mobile">
646 <div class="offer-detail-text text-color-default ">
647 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
648 <#if (tc_offerTypes?seq_contains(fib.offerType))>
649 <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
650 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
651 </a>
652 </#if>
653 </div>
654
655 <#if isExcluded == 0>
656 <a
657 class="jn-button"
658 data-button-name="cta-button-top"
659 data-product-name="${productUrlHero!''}"
660 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
661 >
662 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
663 </a>
664 <#else>
665 <a
666 class="jn-button"
667 data-button-name="cta-button-top"
668 data-product-name="${productUrlHero!''}"
669 data-micromodal-trigger="modal-product-hero"
670 href="javascript:void(0);"
671 >
672 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
673 </a>
674 </#if>
675 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
676 <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a>
677 </#if>
678 </div>
679 </div>
680
681 </div>
682 </div>
683 </div>
684 </div>
685
686 <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" >
687 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
688 <div
689 aria-modal="true"
690 aria-labelledby="modal-prodcut-hero-title"
691 class="excludeModal__container"
692 role="dialog"
693 >
694 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
695 <header class="excludeModal__header">
696 <h2 class="excludeModal__title" id="modal-prodcut-hero-title">
697 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
698 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
699 </#if>
700 </h2>
701 </header>
702 </div>
703 </div>
704 </div>
705 <#break />
706 </#if>
707 </#list>
708
709 </#if>
710</#if>
711<!-- https://micromodal.vercel.app/ -->
712<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
713
714<script>
715 AUI().ready(function(){
716 //The below script is there to add vertical card art in UAT only so that QA has an easier time auditing. Note that the script only applies to FI SouthState (location code 20419) which is currently the only bank with vertical card art at the moment
717 var locationCodeParam = '${lc}';
718 var currentEnvironmentParam = '${currentEnvironment}';
719 if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){
720 Array.prototype.slice.call(document.querySelectorAll('.cardArtImg')).map(function(e){e.firstElementChild.src = "https://39f6f821fa03de239594-9f1c16ccc3b26ce57656bb4af99947b6.ssl.cf2.rackcdn.com/f20cf80a-6aea-46ec-84fc-c2a6583773d9.png"})
721 }
722
723 MicroModal.init();
724 });
725</script>
726<script>
727 if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};}
728 setHeaderBackground = () => {
729 // Makes the Header subtitle work if there is two lines of text
730 //product page header
731 var consumerHeader = document.getElementsByClassName("landing-consumer")[0];
732 if(!consumerHeader) {
733 //index page header
734 consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0];
735 }
736
737 if(consumerHeader) {
738 var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0];
739 var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0];
740 const offerTextTop = consumerHeader.querySelector(".offer-text-top");
741
742 if (consumerOfferHeader.innerText.length >= 76){
743 const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px";
744 //two lines
745 //offerTextTop.style.marginTop = '0px';
746 //document.querySelector('.offer-text-bottom').style.marginTop = '25px';
747 //prevent button and text going into blue section
748 //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px";
749 consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")";
750 }
751 }
752 //product page header
753 var buisnessHeader = document.getElementsByClassName("landing-business")[0];
754 if(!buisnessHeader) {
755 //index page header
756 buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0];
757 }
758
759 if(buisnessHeader) {
760 var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0];
761 var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0];
762
763 if (buisnessOfferHeader.innerText.length >= 48){
764 //two lines
765 buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)";
766 }
767 }
768 };
769 /*
770 sometimes this runs before the text height it is refercning is loaded. Resulting in incorect background styles. If only in aui.ready then it flashes incorect styles then goes to correct styles everytime.
771 With the aui.ready and imediate call it normal loads correctly but if it loads before header text it will still flash incorect styles and then be fixed.
772 */
773 setHeaderBackground();
774 AUI().ready(function(){setHeaderBackground();});
775
776</script>
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> clientProfileService.findByLocationCode(lc) [in template "10154#10192#153417673" at line 34, column 30] ---- 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 clientProfileList = clientPro... [in template "10154#10192#153417673" at line 34, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url404 = '/error/404.html' >
3<#assign oadURL = propsUtil.get('elan.oad.url') >
4<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
5<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7
8
9<#-- check location id validity -->
10<#if qstringmap["ecdma-lc"]?has_content>
11 <#assign lc = qstringmap["ecdma-lc"]?first>
12 <#assign lc = htmlUtil.escape(lc)>
13 <#assign lc = htmlUtil.escapeJS(lc)>
14
15 <#assign prefix = "00000" >
16 <#assign lcWithPrefix = prefix + lc >
17 <#assign withPrefixLength = lcWithPrefix?length >
18 <#assign startHere = withPrefixLength - 5>
19 <#assign lc = lcWithPrefix?substring(startHere)>
20<#else>
21 <script>
22 console.log("location code missing");
23 location.href = '${url404}';
24 </script>
25</#if>
26
27<#if oadURL?contains("uat-")>
28 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
29<#else>
30 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
31</#if>
32
33<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
34<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
35<#if clientProfileList?first?has_content>
36 <#assign clientProfile = clientProfileList?first>
37 <#assign partnerName = clientProfile.getMarketingNameLong()>
38 <#assign pbu = clientProfile.getPbu()>
39 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
40
41 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
42 <#if (fiCardsData?size > 0)>
43 <#assign temp = []>
44 <#assign offerTypeList = []>
45 <#assign index = 0>
46 <#list fiCardsData as fib>
47 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
48 <#assign offerTypeList = offerTypeList + [fib.offerType]>
49 <#assign temp = temp + fiCardsData[index..index]>
50 </#if>
51 <#assign index = index + 1>
52 </#list>
53 <#assign fiCardsData = temp>
54 <#list fiCardsData as fib>
55 <#switch fib.offerType>
56 <#case "101">
57 <#assign productURL = "202302/consumer-edr">
58 <#assign productName = "Everyday Rewards+">
59 <#break>
60 <#case "103">
61 <#assign productURL = "202302/consumer-edr">
62 <#assign productName = "Everyday Rewards+">
63 <#break>
64 <#case "104">
65 <#assign productURL = "max-cash">
66 <#assign productName = "Max Cash Preferred Card">
67 <#break>
68 <#case "108">
69 <#assign productURL="202308/consumer-platinum">
70 <#assign productName="Platinum Card">
71 <#break>
72 <#case "109">
73 <#assign productURL="202308/consumer-platinum">
74 <#assign productName="Platinum Card">
75 <#break>
76 <#case "115">
77 <#assign productURL = "secured">
78 <#assign productName = "Secured Card" >
79 <#break>
80 <#case "138">
81 <#assign productURL = "202305/travel-rewards-plus">
82 <#assign productName = "Travel Rewards+" >
83 <#break>
84 <#case "141">
85 <#assign productURL = "college-real-rewards">
86 <#assign productName = "College Real Rewards" >
87 <#break>
88 <#case "147">
89 <#assign productURL = "max-cash-secured">
90 <#assign productName = "Max Cash Secured Card" >
91 <#break>
92 <#case "154">
93 <#assign productURL = "202305/reserve-rewards-plus">
94 <#assign productName = "Reserve Rewards+" >
95 <#break>
96 <#case "121">
97 <#assign productURL = "202208/business-platinum">
98 <#assign productName = "Business Card" >
99 <#break>
100 <#case "128">
101 <#assign productURL = "business-cash-preferred">
102 <#assign productName = "Business Cash Preferred" >
103 <#break>
104 <#case "143">
105 <#assign productURL = "business-real-rewards">
106 <#assign productName = "Business Real Rewards Card" >
107 <#break>
108 <#case "144">
109 <#assign productURL = "smart-business-rewards">
110 <#assign productName = "Smart Business Rewards Card" >
111 <#break>
112 <#default>
113 </#switch>
114
115 <#assign newSourceCode = fib.sourceCode>
116 <#assign newOfferId = fib.offerId>
117
118 <#if url?matches(".*/${productURL}\\?.*")>
119 <#assign APR="">
120 <#assign AMF="">
121 <#assign BAL="">
122 <#assign sdata = utilServ.makeCall('crcDDCGetSchumerBox', newOfferId + '&' + newSourceCode)>
123 <#if (sdata?size > 0)>
124 <#list sdata as sItem>
125
126 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
127 <#assign APR = sItem.scrapedValue>
128 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
129 <#assign AMF = sItem.scrapedValue>
130 <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) >
131 <#assign BAL = sItem.scrapedValue>
132 </#if>
133 <#if (APR?has_content && AMF?has_content && BAL?has_content)>
134 <#break>
135 </#if>
136 </#list>
137 <#else>
138 <script>
139 console.log('no scraped data');
140 </script>
141 </#if>
142
143 <section>
144 <#if FeatureText.getData() != "">
145 <#assign featureCounter = 0>
146 <div class="hero-primary-benefits offer-type-${fib.offerType}">
147 <#list FeatureText.getSiblings() as item>
148 <div class="primary-benefit">
149 <div class="primary-benefit-wrapper">
150 ${item.getData()}
151 <#if (fib.offerType=="108" || fib.offerType=="109") && (featureCounter == FeatureText.getSiblings()?size - 1)>
152 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank"><span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions</a>
153 </#if>
154 </div>
155 </div>
156 <#assign featureCounter = featureCounter + 1>
157 </#list>
158 </div>
159 </#if>
160 <div class="standard-content-container" title="${partnerName!''} ${productName!''} Credit Card">
161 <article class="product-details-container">
162 <div class="detail-background">
163 ${HeadlineInfo.getData()}
164 <div class="secondary-benefits">
165 <div class="option">
166 <#foreach itemA in AdditionalInfoA.getSiblings()>
167 ${itemA.getData()}
168 </#foreach>
169 <#assign col1NotScrappedOfferTypes = ['108', '109', '147', '115']/>
170 <#assign col1AprOfferTypes = ['104', '121', '144', '143'] >
171 <#if !col1NotScrappedOfferTypes?seq_contains(fib.offerType)>
172 <#if col1AprOfferTypes?seq_contains(fib.offerType)>
173 <#if (fib.offerType == "104" )>
174 <h3>APR for Purchases:</h3>
175 <#elseif (fib.offerType == "144")>
176 <h3>APR for Purchases and Balance Transfers:</h3>
177 <#else>
178 <h3>Intro APR<sup>*</sup> for Purchases:</h3>
179 </#if>
180
181 <p>
182 ${APR!''}
183 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
184 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
185 </a>
186 </p>
187 <#else>
188 <h3>Annual Fee</h3>
189 <p>
190 ${AMF!''}
191 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
192 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
193 </a>
194 </p>
195 </#if>
196 </#if>
197 </div>
198 <div class="option">
199 <#foreach itemB in AdditionalInfoB.getSiblings()>
200 ${itemB.getData()}
201 </#foreach>
202 <#assign col2NotScrappedOfferTypes = ['147'] >
203 <#assign col2AprOfferTypes = ['138', '154', '128'] >
204 <#assign col2AmfOfferTypes = ['108', '109', '115', '144'] >
205 <#if !col2NotScrappedOfferTypes?seq_contains(fib.offerType)>
206 <#if col2AprOfferTypes?seq_contains(fib.offerType)>
207 <#if (fib.offerType == "128" )>
208 <h3>Intro APR<sup>*</sup> for Purchases:</h3>
209 <#else>
210 <h3>APR for Purchases:</h3>
211 </#if>
212 <p>
213 ${APR!''}
214 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
215 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
216 </a>
217 </p>
218 <#elseif col2AmfOfferTypes?seq_contains(fib.offerType)>
219 <h3>Annual Fee</h3>
220 <p>
221 ${AMF!''}
222 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
223 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
224 </a>
225 </p>
226 <#else>
227 <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3>
228 <p>
229 ${BAL!''}
230 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
231 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
232 </a>
233 </p>
234 </#if>
235 </#if>
236 </div>
237 <#if (AdditionalInfoC?has_content)>
238 <div class="option">
239 ${AdditionalInfoC.getData()}
240 <#assign col3NotScrappedOfferTypes = ['144'] >
241 <#assign col3BalOfferTypes = ['138', '154', '128'] >
242 <#assign col3AmfOfferTypes = ['104', '121', '143'] >
243 <#if !col3NotScrappedOfferTypes?seq_contains(fib.offerType)>
244 <#if col3BalOfferTypes?seq_contains(fib.offerType)>
245 <#if fib.offerType == "128">
246 <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3>
247 <#else>
248 <h3>APR for Balance Transfers:</h3>
249 </#if>
250 <p>
251 ${BAL!''}
252 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
253 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
254 </a>
255 </p>
256 <#elseif col3AmfOfferTypes?seq_contains(fib.offerType)>
257 <#if fib.offerType == "104">
258 <h3>Annual Fee<sup>*</sup></h3>
259 <#else>
260 <h3>Annual Fee</h3>
261 </#if>
262 <p>
263 ${AMF!''}
264 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
265 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
266 </a>
267 </p>
268 <#else>
269 <#if (fib.offerType == "147" ||
270 fib.offerType == "115"
271 )>
272 <h3>APR for Purchases and Balance Transfers:</h3>
273 <#else>
274 <h3>Intro APR<sup>*</sup> for Purchases:</h3>
275 </#if>
276 <p>
277 ${APR!''}
278 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
279 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
280 </a>
281 </p>
282 </#if>
283 </#if>
284 <#if (fib.offerType == "108" || fib.offerType == "109")>
285 <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3>
286 <p>${BAL!''} <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank"><span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions</a>
287 </p>
288 </#if>
289 <#if fib.offerType == "147">
290 <h3>Annual Fee<sup>*</sup></h3>
291 <p>
292 ${AMF!''}
293 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
294 <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions
295 </a>
296 </p>
297 </#if>
298
299 </div>
300 </#if>
301 </div>
302 </div>
303
304 </article>
305 </div>
306 </section>
307 <script>
308 AUI().ready(function() {
309 $('.jn-subhero ul').each(function() {
310 var $this = $(this),
311 li = $this.find('li').length;
312 console.log($this.find('li').length)
313 if(li === 2){
314 $this.addClass('two-items');
315 }
316 });
317
318 });
319 </script>
320 <#break />
321 </#if>
322 </#list>
323 <#else>
324 <script>
325 console.log("FI Cards Data empty");
326 //location.href = '${url404}';
327 </script>
328 </#if>
329<#else>
330 <script>
331 console.log("client profile empty");
332 //location.href = '${url404}';
333 </script>
334</#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#157461212" at line 7, 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#157461212" at line 7, column 1] ----
1<#assign oadURL = propsUtil.get('elan.oad.url') >
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
5<#assign url404 = '/error/404.html' >
6
7<#assign lc = qstringmap["ecdma-lc"]?first>
8<#assign lc = htmlUtil.escape(lc)>
9<#assign lc = htmlUtil.escapeJS(lc)>
10
11<#assign dcoSourceCode = "">
12<#assign dcoSourceCodeQueryParameter = "">
13
14<#if qstringmap["sourcecode"]?has_content>
15 <#assign dcoSourceCode = qstringmap["sourcecode"]?first>
16 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
17 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
18 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
19<#elseif qstringmap["sourceCode"]?has_content>
20 <#assign dcoSourceCode = qstringmap["sourceCode"]?first>
21 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
22 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
23 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
24</#if>
25
26<#assign prefix = "00000" >
27<#assign lcWithPrefix = prefix + lc >
28<#assign withPrefixLength = lcWithPrefix?length >
29<#assign startHere = withPrefixLength - 5>
30<#assign lc = lcWithPrefix?substring(startHere)>
31
32<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
33<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
34
35<#if clientProfileList?first?has_content>
36 <#assign clientProfile = clientProfileList?first>
37 <#assign partnerName = clientProfile.getMarketingNameLong()>
38 <#assign pbu = clientProfile.getPbu()>
39 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
40 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
41
42 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu + '&' + lc)>
43 <#assign temp = []>
44 <#assign offerTypeList = []>
45 <#assign index = 0>
46 <#list fiCardsData as fib>
47 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
48 <#assign offerTypeList = offerTypeList + [fib.offerType]>
49 <#assign temp = temp + fiCardsData[index..index]>
50 </#if>
51 <#assign index = index + 1>
52 </#list>
53 <#assign fiCardsData = temp>
54
55 <#if (fiCardsData?size > 0)>
56 <#list fiCardsData as fib>
57 <#switch fib.offerType>
58 <#case "101">
59 <#assign productURL = "consumer-edr">
60 <#assign productName = "Everyday Rewards+">
61 <#break>
62 <#case "103">
63 <#assign productURL = "consumer-edr">
64 <#assign productName = "Everyday Rewards+">
65 <#break>
66 <#case "104">
67 <#assign productURL = "max-cash">
68 <#assign productName = "Max Cash Preferred Card">
69 <#break>
70 <#case "108">
71 <#assign productURL="consumer-platinum">
72 <#assign productName="Platinum Card">
73 <#break>
74 <#case "109">
75 <#assign productURL="consumer-platinum">
76 <#assign productName="Platinum Card">
77 <#break>
78 <#case "115">
79 <#assign productURL = "secured">
80 <#assign productName = "Secured Card" >
81 <#break>
82 <#case "138">
83 <#assign productURL = "travel-rewards-plus">
84 <#assign productName = "Travel Rewards+" >
85 <#break>
86 <#case "141">
87 <#assign productURL = "college-real-rewards">
88 <#assign productName = "College Real Rewards" >
89 <#break>
90 <#case "147">
91 <#assign productURL = "max-cash-secured">
92 <#assign productName = "Max Cash Secured Card" >
93 <#break>
94 <#case "154">
95 <#assign productURL = "reserve-rewards-plus">
96 <#assign productName = "Reserve Rewards+" >
97 <#break>
98 <#case "121">
99 <#assign productURL = "business-platinum">
100 <#assign productName = "Business Card" >
101 <#break>
102 <#case "128">
103 <#assign productURL = "business-cash-preferred">
104 <#assign productName = "Business Cash Preferred" >
105 <#break>
106 <#case "143">
107 <#assign productURL = "business-real-rewards">
108 <#assign productName = "Business Real Rewards Card" >
109 <#break>
110 <#case "144">
111 <#assign productURL = "smart-business-rewards">
112 <#assign productName = "Smart Business Rewards Card" >
113 <#break>
114 <#default>
115 </#switch>
116
117 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
118 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
119 <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")>
120 <script>
121 console.log('offerType', '${fib.offerType}', '${productURL}')
122 </script>
123 <#list product.getSiblings() as card>
124 <#if card?has_content && card.offerType.getData() == fib.offerType>
125 <#assign isExcluded = 0>
126 <#if fib.dmaexclude??>
127 <#assign isExcluded = fib.dmaexclude?number!0>
128 </#if>
129
130 <div class="content-container jn-container-banner" title="${partnerName!''} ${productName!''}">
131 <div class="banner-wrapper">
132 <div class="banner">
133 <div class="banner-cardArt cardArtImg">
134 <img
135 src="${cardArtImage!''}"
136 alt="${partnerName!''} ${productName!''}"
137 title="${partnerName!''} ${productName!''}"
138 class="jn-img-responsive"
139 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"
140 >
141 </div>
142 <div class="banner-cta">
143 <div class="banner-cta-text">
144 ${card.optionalCtaFeatureText.getData()}
145 </div>
146 <#if isExcluded == 0>
147 <a
148 class="jn-button"
149 data-button-name="cta-button-bottom"
150 data-product-name="${productURL}!''"
151 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
152 id="oadSecButton"
153 >
154 ${card.optionalCtaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${productName!''} Card </span>
155 </a>
156 <#else>
157 <a
158 class="jn-button"
159 data-button-name="cta-button-bottom"
160 data-product-name="${productURL}!''"
161 data-micromodal-trigger="modal-lower-banner"
162 id="oadSecButton"
163 href="javascript:void(0);"
164 >
165 ${card.optionalCtaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${productName!''} Card </span>
166 </a>
167 </#if>
168 </div>
169 </div>
170 </div>
171 </div>
172 <style>
173 .excludeModal__overlay {
174 position: fixed;
175 top: 0;
176 left: 0;
177 right: 0;
178 bottom: 0;
179 background: rgba(0,0,0,0.6);
180 display: flex;
181 justify-content: center;
182 align-items: center;
183 }
184
185 .excludeModal__container {
186 background-color: #fff;
187 padding: 30px;
188 min-width: 500px;
189 max-width: 500px;
190 max-height: 100vh;
191 border-radius: 4px;
192 overflow-y: auto;
193 box-sizing: border-box;
194 }
195
196 .excludeModal__header {
197 display: flex;
198 justify-content: space-between;
199 align-items: center;
200 }
201
202 .modal .excludeModal__container .excludeModal__title {
203 margin-top: 0;
204 margin-bottom: 0;
205 font-weight: 600;
206 font-size: 20px;
207 line-height: 1.25;
208 color: #00449e;
209 box-sizing: border-box;
210 }
211
212 .excludeModal__close {
213 background: transparent;
214 border: 1px solid white;
215 padding: 4px 8px;
216 float: right;
217 }
218
219 .excludeModal__close:hover {
220 border: 1px solid black;
221 }
222
223 .excludeModal__close:before { content: "\2715"; }
224
225 @keyframes mmfadeIn {
226 from { opacity: 0; }
227 to { opacity: 1; }
228 }
229
230 @keyframes mmfadeOut {
231 from { opacity: 1; }
232 to { opacity: 0; }
233 }
234
235 @keyframes mmslideIn {
236 from { transform: translateY(15%); }
237 to { transform: translateY(0); }
238 }
239
240 @keyframes mmslideOut {
241 from { transform: translateY(0); }
242 to { transform: translateY(-10%); }
243 }
244
245 .micromodal-slide {
246 display: none;
247 }
248
249 .micromodal-slide.is-open {
250 display: block;
251 }
252
253 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
254 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
255 }
256
257 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
258 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
259 }
260
261 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
262 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
263 }
264
265 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
266 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
267 }
268
269 .micromodal-slide .excludeModal__container,
270 .micromodal-slide .excludeModal__overlay {
271 will-change: transform;
272 }
273 </style>
274 <div aria-hidden="true" class="modal micromodal-slide" id="modal-lower-banner" >
275 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
276 <div
277 aria-modal="true"
278 aria-labelledby="modal-lower-banner-title"
279 class="excludeModal__container"
280 role="dialog"
281 >
282 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
283 <header class="excludeModal__header">
284 <h2 class="excludeModal__title" id="modal-lower-banner-title">
285 <#if card.excludedMessage?? >
286 ${card.excludedMessage.getData()!""}
287 </#if>
288 </h2>
289 </header>
290 </div>
291 </div>
292 </div>
293 <!-- https://micromodal.vercel.app/ -->
294 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
295 <script>
296 AUI().ready(function(){
297 MicroModal.init();
298 });
299 </script>
300 <#break>
301 </#if>
302 </#list>
303 <#break>
304 </#if>
305 </#list>
306 </#if>
307<#else>
308 <script>
309 console.log("discalimer: client profile empty");
310 </script>
311</#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#157607653" 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#157607653" 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
15<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
16<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
17<#if clientProfileList?first?has_content>
18 <#assign clientProfile = clientProfileList?first>
19 <#assign partnerName = clientProfile.getMarketingNameLong()>
20
21 <#assign pbu = clientProfile.getPbu()>
22 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
23
24 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
25
26
27 <#if (fiCardsData?size > 0)>
28
29 <#list fiCardsData as fib>
30 <#switch fib.offerType>
31 <#case "101">
32 <#assign productURL = "consumer-edr">
33 <#assign productName = "Everyday Rewards+">
34 <#break>
35 <#case "103">
36 <#assign productURL = "consumer-edr">
37 <#assign productName = "Everyday Rewards+">
38 <#break>
39 <#case "104">
40 <#assign productURL = "max-cash">
41 <#assign productName = "Max Cash Preferred Card">
42 <#break>
43 <#case "108">
44 <#assign productURL="consumer-platinum">
45 <#assign productName="Platinum Card">
46 <#break>
47 <#case "109">
48 <#assign productURL="consumer-platinum">
49 <#assign productName="Platinum Card">
50 <#break>
51 <#case "115">
52 <#assign productURL = "secured">
53 <#assign productName = "Secured Card" >
54 <#break>
55 <#case "138">
56 <#assign productURL = "travel-rewards-plus">
57 <#assign productName = "Travel Rewards+" >
58 <#break>
59 <#case "141">
60 <#assign productURL = "college-real-rewards">
61 <#assign productName = "College Real Rewards" >
62 <#break>
63 <#case "147">
64 <#assign productURL = "max-cash-secured">
65 <#assign productName = "Max Cash Secured Card" >
66 <#break>
67 <#case "154">
68 <#assign productURL = "reserve-rewards-plus">
69 <#assign productName = "Reserve Rewards+" >
70 <#break>
71 <#case "121">
72 <#assign productURL = "business-platinum">
73 <#assign productName = "Business Card" >
74 <#break>
75 <#case "128">
76 <#assign productURL = "business-cash-preferred">
77 <#assign productName = "Business Cash Preferred" >
78 <#break>
79 <#case "143">
80 <#assign productURL = "business-real-rewards">
81 <#assign productName = "Business Real Rewards Card" >
82 <#break>
83 <#case "144">
84 <#assign productURL = "smart-business-rewards">
85 <#assign productName = "Smart Business Rewards Card" >
86 <#break>
87 <#default>
88 </#switch>
89 <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")>
90 <script>
91 console.log('offerType', '${fib.offerType}', '${productURL}')
92 </script>
93 <#assign cardProviderAbbreviated = "">
94 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fib.offerType + '&' + lc)>
95 <#if (cardProvider?size > 0)>
96 <#-- This will be V for visa or M for mastercard. -->
97 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
98 <#else>
99 <script>
100 console.log("No card provider(Visa/Master Card) found for disclaimer");
101 </script>
102 </#if>
103 <#list product.getSiblings() as card>
104 <#if (card.offerType.getData() == fib.offerType)>
105 <div class="content-container" title="${partnerName!''} - Disclaimer">
106 <div class="jn-disclaimer">
107
108 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && card.disclaimerBank.getData()?has_content>
109 ${card.disclaimerBank.getData()}
110 <#else>
111 <#if (card.disclaimerVisa?has_content && cardProviderAbbreviated?contains('V'))>
112 ${card.disclaimerVisa.getData()}
113 </#if>
114 <#if (card.disclaimerMasterCard?has_content && cardProviderAbbreviated?contains('M')) >
115 ${card.disclaimerMasterCard.getData()}
116 </#if>
117 </#if>
118 </div>
119 </div>
120 <#break>
121 </#if>
122 </#list>
123 <#break>
124 </#if>
125 </#list>
126 </#if>
127</#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#153417685" 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#153417685" 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<div id="footerIdAdPlatinum">
16 ${footerContent.getData()}
17</div>
18
19<!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
20<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
21<style>
22 #opt-out-button,
23 .modal__btn.learn-more {
24 background: #0C2074;
25 border: 1px solid #0C2074;
26 color: white;
27 text-transform: uppercase;
28 text-decoration: none;
29 font-size: 16px;
30 padding: 0.5rem 2rem;
31 display: inline-block;
32 border-radius: 0;
33 }
34 #opt-out-button:hover,
35 .modal__btn.learn-more:hover {
36 color: white !important;
37 border-color: #2C76AF !important;
38 background-color: #2C76AF !important;
39 }
40 .modal .modal__btn.learn-more {
41 background: white;
42 border: 1px solid #0C2074;
43 color: #0C2074;
44 text-decoration: none;
45 }
46 #opt-out-button[disabled="true"] {
47 background-color: rgba(0,0,0,.15);
48 color: rgba(0,0,0,.45);
49 border-color: rgba(0,0,0,.25);
50 }
51 #opt-out-button:hover[disabled="true"] {
52 background-color: rgba(0,0,0,.15) !important;
53 color: rgba(0,0,0,.45) !important;
54 border-color: rgba(0,0,0,.25) !important;
55 }
56 #opt-out-button:focus {
57 outline-style: solid;
58 outline-color: white;
59 outline-offset: -3px;
60 outline-width: 1px;
61 }
62 .opt-out-link svg {
63 width: 30px;
64 height: 14px;
65 width: auto;
66 vertical-align: middle;
67 }
68 .modal__overlay {
69 position: fixed;
70 top: 0;
71 left: 0;
72 right: 0;
73 bottom: 0;
74 background: rgba(0,0,0,0.6);
75 display: flex;
76 justify-content: center;
77 align-items: center;
78 }
79
80 .modal__container {
81 background-color: #fff;
82 padding: 30px;
83 max-width: 500px;
84 max-height: 100vh;
85 border-radius: 4px;
86 overflow-y: auto;
87 box-sizing: border-box;
88 }
89
90 .modal__header {
91 display: flex;
92 justify-content: space-between;
93 align-items: center;
94 }
95
96 .modal .modal__container .modal__title {
97 margin-top: 0;
98 margin-bottom: 0;
99 font-weight: 600;
100 font-size: 20px;
101 line-height: 1.25;
102 color: #00449e;
103 box-sizing: border-box;
104 }
105
106 .modal__close {
107 background: transparent;
108 border: 1px solid white;
109 padding: 4px 8px;
110 }
111 .modal__close:hover {
112 border: 1px solid black;
113 }
114
115 .modal__header .modal__close:before { content: "\2715"; }
116
117 .modal__content {
118 margin-top: 2rem;
119 margin-bottom: 2rem;
120 line-height: 1.5;
121 }
122
123 @keyframes mmfadeIn {
124 from { opacity: 0; }
125 to { opacity: 1; }
126 }
127
128 @keyframes mmfadeOut {
129 from { opacity: 1; }
130 to { opacity: 0; }
131 }
132
133 @keyframes mmslideIn {
134 from { transform: translateY(15%); }
135 to { transform: translateY(0); }
136 }
137
138 @keyframes mmslideOut {
139 from { transform: translateY(0); }
140 to { transform: translateY(-10%); }
141 }
142
143 .micromodal-slide {
144 display: none;
145 }
146
147 .micromodal-slide.is-open {
148 display: block;
149 }
150
151 .micromodal-slide[aria-hidden="false"] .modal__overlay {
152 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
153 }
154
155 .micromodal-slide[aria-hidden="false"] .modal__container {
156 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
157 }
158
159 .micromodal-slide[aria-hidden="true"] .modal__overlay {
160 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
161 }
162
163 .micromodal-slide[aria-hidden="true"] .modal__container {
164 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
165 }
166
167 .micromodal-slide .modal__container,
168 .micromodal-slide .modal__overlay {
169 will-change: transform;
170 }
171</style>
172
173<div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
174<div class="modal__overlay" tabindex="-1" data-micromodal-close>
175 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
176 <header class="modal__header">
177 <h2 class="modal__title" id="modal-1-title">
178 Your California privacy choices
179 </h2>
180 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
181 </header>
182 <div class="modal__content" id="modal-1-content">
183 <div id="message-no-cookie">
184 <p>
185 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>
186
187<p> </p>
188
189<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>
190 </div>
191 <div id="message-with-cookie">
192 <p>You have successfully opted-out.</p>
193 </div>
194 </div>
195 <div class="modal__footer">
196 <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>
197 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
198 </div>
199 </div>
200</div>
201</div>
202<!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
203<!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
204<script>
205AUI().ready(function() {
206 //this aui.ready prevents from it not showing cali opt out modal due to getting the node before page finished loading.
207 const copyrightNode = document.querySelector('#footerIdAdPlatinum .copyright');
208 const fdicNode = document.querySelector('#footerIdAdPlatinum .fdic');
209 const agreementNode = document.querySelector('#footerIdAdPlatinum .member-agreement');
210 agreementNode.innerHTML= '<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!''}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>';
211 copyrightNode.innerHTML= '<sup>©</sup> Elan Financial Services ' + ${currentYear};
212 copyrightNode.classList.add('ecdma-footer-client-name-copyright');
213 fdicNode.innerHTML = '<a class="text-color-white" href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
214 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
215 fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><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>');
216 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
217
218 window.getCookieDomain = function() {
219 var hostname = window.location.hostname.split(".");
220 return hostname && hostname.slice(hostname.length - 2).join(".");
221 }
222 window.setToOptOut = function() {
223 if (window.getCookie('privacy_optout')) {
224 document.getElementById('message-no-cookie').style.display = 'none';
225 document.getElementById('message-with-cookie').style.display = 'block';
226 document.getElementById('opt-out-button').setAttribute('disabled', true)
227 } else {
228 document.getElementById('message-no-cookie').style.display = 'block';
229 document.getElementById('message-with-cookie').style.display = 'none';
230 }
231 }
232 window.getCookie = function(name) {
233 var value = '; ' + document.cookie;
234 var parts = value.split('; ' + name + '=');
235 if (parts.length === 2) return parts.pop().split(';').shift();
236 }
237 window.californiaOptOut = function() {
238 if (!window.getCookie('privacy_optout')) {
239 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
240 try {
241 if (window.CustomEvent) {
242 window.dispatchEvent(new CustomEvent('privacy_optout'));
243 } else {
244 var privacyOptoutEvent = document.createEvent('Event');
245 privacyOptoutEvent.initEvent('privacy_optout', true, true);
246 window.dispatchEvent(privacyOptoutEvent);
247 }
248 window.setToOptOut();
249 } catch (err) {
250 console.error(err);
251 }
252 }
253 }
254 MicroModal.init({
255 onShow: window.setToOptOut
256 });
257
258 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
259 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
260 if(isBrowserGpcOptOut === true) {
261 window.californiaOptOut();
262 }
263 });
264</script>
265<!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->