S'ha produït un error mentre es processava la plantilla.
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
45
46<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
47<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
48<#assign clientProfile = clientProfileList?first>
49<#assign partnerName = clientProfile.getMarketingNameLong()>
50<#assign pbu = clientProfile.getPbu()>
51<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
52
53<#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
54<#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
55<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+pbu+'&'+subbu)>
56
57 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
58<#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
59<#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
60<script>
61//console.log('Partner URL', ${partnerUrl});
62</script>
63<#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>
64 <#assign partnerUrl = 'https://' + partnerUrl>
65</#if>
66<script>
67//console.log('Partner URL', ${partnerUrl});
68
69</script>
70<#-- Begin: filter duplicated cards-->
71<#assign temp = []>
72<#assign offerTypeList = []>
73<#if (fiCardsData?size > 0)>
74 <#assign index = 0>
75 <#list fiCardsData as fib>
76 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
77 <#assign offerTypeList = offerTypeList + [fib.offerType]>
78 <#assign temp = temp + fiCardsData[index..index]>
79 </#if>
80 <#assign index = index + 1>
81 </#list>
82 <#assign fiCardsData = temp>
83 <#if (fiCardsData?size > 0)>
84 <div class="content-container content-container-main" title="${partnerName!''}">
85 <#if url?contains("index")>
86 <#assign product="All Cards">
87 <header class="jn-header">
88 <div class="header-logo">
89
90 <#if partnerUrl?has_content>
91 <a href="${partnerUrl!''}" title="${partnerName!''}">
92 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
93 </a>
94 <#else>
95 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
96 </#if>
97 </div>
98 </header>
99 <#else>
100 <header class="jn-header">
101 <div class="back-overview hide-desktop">
102 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
103 </div>
104
105 <div class="header-main-logo" title="${partnerName!''}">
106 <#if partnerUrl?has_content>
107 <a href="${partnerUrl!''}" title="${partnerName!''}">
108 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
109 </a>
110 <#else>
111 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">
112 </#if>
113 </div>
114 <div class="styled-select slate">
115 <nav class="styled-select__dropdown">
116 <div class="back-overview hide-mobile">
117 <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a>
118 </div>
119 <a href="javascript:void(0)" class="dropdown-select" aria-expanded="false">
120 <span class="selected-option"></span>
121 <div class="jn-arrow arrow arrow-right"></div>
122 </a>
123 <a href="javascript:void(0)" class="jn-hamburger hamburger" aria-expanded="false">
124 <div class="first-line transform transformed1"></div>
125 <div></div>
126 <div class="transform transformed2"></div>
127 <div></div>
128 </a>
129 <ul>
130 <#list fiCardsData as fib>
131 <#switch fib.offerType>
132 <#case "101">
133 <#assign productURL = "202302/consumer-edr">
134 <#assign productName = "Everyday Rewards+">
135 <#break>
136 <#case "103">
137 <#assign productURL = "202302/consumer-edr">
138 <#assign productName = "Everyday Rewards+">
139 <#break>
140 <#case "104">
141 <#assign productURL = "max-cash">
142 <#assign productName = "Max Cash Preferred Card">
143 <#break>
144 <#case "108">
145 <#assign productURL="202308/consumer-platinum">
146 <#assign productName="Platinum Card">
147 <#break>
148 <#case "109">
149 <#assign productURL="202308/consumer-platinum">
150 <#assign productName="Platinum Card">
151 <#break>
152 <#case "115">
153 <#assign productURL = "secured">
154 <#assign productName = "Secured Card" >
155 <#break>
156 <#case "138">
157 <#assign productURL = "202305/travel-rewards-plus">
158 <#assign productName = "Travel Rewards+" >
159 <#break>
160 <#case "141">
161 <#assign productURL = "college-real-rewards">
162 <#assign productName = "College Real Rewards" >
163 <#break>
164 <#case "147">
165 <#assign productURL = "max-cash-secured">
166 <#assign productName = "Max Cash Secured Card" >
167 <#break>
168 <#case "154">
169 <#assign productURL = "202305/reserve-rewards-plus">
170 <#assign productName = "Reserve Rewards+" >
171 <#break>
172 <#case "121">
173 <#assign productURL = "202208/business-platinum">
174 <#assign productName = "Business Card" >
175 <#break>
176 <#case "128">
177 <#assign productURL = "business-cash-preferred">
178 <#assign productName = "Business Cash Preferred" >
179 <#break>
180 <#case "143">
181 <#assign productURL = "business-real-rewards">
182 <#assign productName = "Business Real Rewards Card" >
183 <#break>
184 <#case "144">
185 <#assign productURL = "smart-business-rewards">
186 <#assign productName = "Smart Business Rewards Card" >
187 <#break>
188 <#default>
189 </#switch>
190 <#if url?matches(".*/${productURL}\\?.*")>
191 <li class="selected" data-value="${productName}" selected="selected"><a href="javascript:void(0)">${productName}</a></li>
192 <#else>
193 <li class="dropdown-item" data-value="${productName}">
194 <a href="${environment}/11t3/${productURL}?ecdma-lc=${lc}${ecidExt}">
195 ${productName}
196 </a>
197 </li>
198 </#if>
199 </#list>
200 </ul>
201 </nav>
202
203 </div>
204 </header>
205 <script>
206 function toggleFlyOutMenu() {
207 $('.styled-select').toggleClass('show-select');
208 var ariaExpanded = $('.styled-select__dropdown .dropdown-select').attr('aria-expanded');
209 if(ariaExpanded !== null) {
210 var isAriaExpanded;
211 if(ariaExpanded === "true") {
212 isAriaExpanded = true;
213 } else {
214 isAriaExpanded = false
215 }
216 $('.styled-select__dropdown .dropdown-select').attr('aria-expanded', !isAriaExpanded);
217 $('.styled-select__dropdown .jn-hamburger').attr('aria-expanded', !isAriaExpanded);
218 }
219 }
220 AUI().ready(function () {
221 var pageSelected = $('.selected').attr('data-value');
222 $('.jn-hamburger, .dropdown-select').click(function () {
223 toggleFlyOutMenu();
224 });
225 $('.styled-select__dropdown').keydown(function(event) {
226 var firstNavigationLink = $('.styled-select__dropdown ul li:visible a').first();
227 var lastNavigationLink = $('.styled-select__dropdown ul li:visible a').last();
228
229 if(event.keyCode === 9 ) {
230 // if they tab outside of the nav close the navigation
231 //shift + tab pressed
232 if(event.shiftKey && firstNavigationLink.is(document.activeElement)) {
233 toggleFlyOutMenu();
234 } else if(!event.shiftKey && lastNavigationLink.is(document.activeElement)) {
235 toggleFlyOutMenu();
236 }
237 }
238 });
239 $('.selected-option').text(pageSelected);
240 });
241 </script>
242 </#if>
243 </div>
244 <script>
245 var reportingData = {};
246
247 //document.addEventListener('DOMContentLoaded', function() {
248 AUI().ready(function () {
249 //console.log('inside ready');
250 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
251 var hostName = location.hostname;
252 function getDomainFromHostname(hostname) {
253 var parts = hostname.split('.');
254 return parts.length === 3 ? parts[1] : parts[0];
255 }
256 var domain = getDomainFromHostname(hostName);
257 var partnerName = "${partnerName!''}";
258 var product = "All Cards";
259 var title = "";
260 var metaDesc = "";
261 var m = document.createElement('meta');
262 switch(page) {
263 case "max-cash-secured":
264 product="Max Cash Secured Card";
265 title = "Earn more on the categories you pick | "+partnerName+" Max Cash Secured Card";
266 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
267 break;
268 case "max-cash":
269 product="Max Cash Preferred Card";
270 title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card";
271 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select";
272 break;
273 case "consumer-platinum":
274 product="Platinum Card";
275 title = "The purchasing power of Zero | "+partnerName+" Platinum Card";
276 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.";
277 break;
278 case "consumer-edr":
279 product="Everyday Rewards+";
280 title = "Sign up and earn bonus points | "+partnerName+" Everyday Rewards+";
281 break;
282 case "secured":
283 product="Secured Card";
284 title = "Strengthen your finances | "+partnerName+" Secured Card";
285 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
286 break;
287 case "college-real-rewards":
288 product="College Real Rewards";
289 title = "Sign up and earn bonus points. | "+partnerName+" College Real Rewards";
290 break;
291 case "smart-business-rewards":
292 product="Smart Business Rewards Card";
293 title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card";
294 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.";
295 break;
296 case "business-cash-preferred":
297 product="Business Cash Preferred";
298 title = "Flexible rewards for your business | "+partnerName+" Business Cash Preferred";
299 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
300 break;
301 case "business-real-rewards":
302 product="Business Real Rewards Card";
303 title = "Earn up to 3X points with no caps | "+partnerName+" Business Real Rewards Card";
304 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ;
305 break;
306 case "business-platinum":
307 product="Business Card";
308 title = "Pay down your other credit card balances faster | "+partnerName+" Business Card";
309 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
310 break;
311 case "travel-rewards-plus":
312 product="Travel Rewards+"
313 title = partnerName + " | Travel Rewards+ Card";
314 metaDesc = "Make travel more rewarding with unlimited 4x points on travel and frequent popular categories."
315 break;
316 case "reserve-rewards-plus":
317 product="Reserve Rewards+"
318 title = partnerName + " | Reserve Rewards+ Card";
319 metaDesc = "Get exceptional rewards on travel and frequent purchases with this exclusive metal card.";
320 break;
321 default:
322 product = "All Cards";
323 title = partnerName + " Credit Card Index Page";
324 }
325 document.title = title;
326 m.name = 'description';
327 m.content = metaDesc;
328 document.head.appendChild(m);
329
330 var lc = "${lc!'0'}";
331
332 /* update SiteCatalyst data object */
333 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
334 reportingData.page_type = 'product';
335 reportingData.site_section = 'credit cards';
336 reportingData.platform = 'microsite';
337 reportingData.campaign_id = '${campaignId}';
338 reportingData.location_code = lc;
339 reportingData.partner_name = partnerName;
340 reportingData.product = product;
341 reportingData.text_to_apply_source = '${text_to_apply_source}';
342 reportingData.visitor_type = 'prospect';
343 reportingData.Banker_id = '0';
344 reportingData.Banker_code = '0';
345
346
347 /* SiteCatalyst pageView tracking */
348 AUI().ready(function() {
349 if (window.publisherFW) {
350 //console.log("pageView");
351 window.publisherFW.publishEvent("pageView", reportingData);
352 }
353 });
354
355 jQuery('.jn-button, .applyNowLink').on('click', function(e){
356 var buttonName = $(this).data('button-name');
357 var productName = $(this).data('product-name');
358 /* SiteCatalyst onClick tracking */
359 reportingData.applyButton = buttonName;
360 reportingData.product = productName;
361
362 if (window.publisherFW) {
363 //console.log('clicked', reportingData);
364 window.publisherFW.publishEvent("onClick", reportingData);
365 }
366
367 });
368
369 jQuery('.applyNowLink').on('click', function(e){
370 ga("send", {
371 hitType: "event",
372 eventAction: "ApplyNow",
373 eventCategory: "click",
374 eventLabel: "BottomButton"
375 });
376 });
377
378 });
379 </script>
380 <#else>
381 <script>
382 console.log("Empty card list");
383 location.href = '${url404}';
384 </script>
385 </#if>
386<#else>
387 <script>
388 console.log("FI Cards Data empty", "pbu:", "${pbu}", ",subbu:","${subbu}");
389 location.href = '${url404}';
390 </script>
391</#if>
S'ha produït un error mentre es processava la plantilla.
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 clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
51<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
52<#assign clientProfile = clientProfileList?first>
53<#assign partnerName = clientProfile.getMarketingNameLong()>
54<#assign pbu = clientProfile.getPbu()>
55<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
56<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
57
58<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)>
59<#assign temp = []>
60<#assign consumerCards = []>
61<#assign businessCards = []>
62<#assign offerTypeList = []>
63<#assign index = 0>
64<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]>
65<#assign businessOfferTypes = ["128", "121", "143", "144"]>
66<#list fiCardsData as fib>
67 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
68 <#assign offerTypeList = offerTypeList + [fib.offerType]>
69 <#if (consumerOfferTypes?seq_contains(fib.offerType))>
70 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
71 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
72 <#assign businessCards = businessCards + fiCardsData[index..index]>
73 </#if>
74 <#assign temp = temp + fiCardsData[index..index]>
75 </#if>
76 <#assign index = index + 1>
77</#list>
78
79<#assign fiCardsData = temp>
80 <script>
81 //console.log("fi card data count", ${fiCardsData?size})
82</script>
83
84<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
85<#if (clientdata?size > 0)>
86 <#assign backgroundColor = clientdata[0].backgroundHexColor>
87</#if>
88
89<#if (fiCardsData?size > 0)>
90 <style>
91 .excludeModal__overlay {
92 position: fixed;
93 top: 0;
94 left: 0;
95 right: 0;
96 bottom: 0;
97 background: rgba(0,0,0,0.6);
98 display: flex;
99 justify-content: center;
100 align-items: center;
101 }
102
103 .excludeModal__container {
104 background-color: #fff;
105 padding: 30px;
106 min-width: 500px;
107 max-width: 500px;
108 max-height: 100vh;
109 border-radius: 4px;
110 overflow-y: auto;
111 box-sizing: border-box;
112 }
113
114 .excludeModal__header {
115 display: flex;
116 justify-content: space-between;
117 align-items: center;
118 }
119
120 .modal .excludeModal__container .excludeModal__title {
121 margin-top: 0;
122 margin-bottom: 0;
123 font-weight: 600;
124 font-size: 20px;
125 line-height: 1.25;
126 color: #00449e;
127 box-sizing: border-box;
128 }
129
130 .excludeModal__close {
131 background: transparent;
132 border: 1px solid white;
133 padding: 4px 8px;
134 float: right;
135 }
136
137 .excludeModal__close:hover {
138 border: 1px solid black;
139 }
140
141 .excludeModal__close:before { content: "\2715"; }
142
143 @keyframes mmfadeIn {
144 from { opacity: 0; }
145 to { opacity: 1; }
146 }
147
148 @keyframes mmfadeOut {
149 from { opacity: 1; }
150 to { opacity: 0; }
151 }
152
153 @keyframes mmslideIn {
154 from { transform: translateY(15%); }
155 to { transform: translateY(0); }
156 }
157
158 @keyframes mmslideOut {
159 from { transform: translateY(0); }
160 to { transform: translateY(-10%); }
161 }
162
163 .micromodal-slide {
164 display: none;
165 }
166
167 .micromodal-slide.is-open {
168 display: block;
169 }
170
171 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
172 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
173 }
174
175 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
176 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
177 }
178
179 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
180 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
181 }
182
183 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
184 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
185 }
186
187 .micromodal-slide .excludeModal__container,
188 .micromodal-slide .excludeModal__overlay {
189 will-change: transform;
190 }
191 </style>
192 <#if url?contains("index")>
193 <#assign isExcluded = 0>
194 <#assign offerId = "">
195 <#assign sourceCode = "">
196 <#assign cardArtImage = "">
197 <#assign productUrlHero = "">
198 <#assign product = "">
199 <#assign cardIndex = 0>
200 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
201 <#if (offerTypeList?seq_contains("108")) || (offerTypeList?seq_contains("109"))>
202 <#list consumerCards as card>
203 <#if (card.offerType=="108") || (card.offerType=="109")>
204 <#assign isExcluded = 0>
205 <#if card.dmaexclude??>
206 <#assign isExcluded = card.dmaexclude?number!0>
207 </#if>
208 <#assign offerId = card.offerId>
209 <#assign sourceCode = card.sourceCode>
210 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
211 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
212
213 <#assign productUrlHero="consumer-platinum2103">
214 <#assign product="Platinum">
215 <#assign cardIndex = 1>
216 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)>
217 <#if (scrapedData?size > 0)>
218 <#list scrapedData as sItem>
219 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
220 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
221 <#break>
222 </#if>
223 </#list>
224 <script>
225 $(document).ready(function () {
226 var aprText = "${apr}";
227 //console.log('aprText: ${aprText!''}');
228 if (aprText) {
229 $(".apr-full-text").html(aprText);
230 try {
231 var matches= aprText.match(/\d+(\.\d+)?%?/g);
232 var billing_cycle = matches[1];
233 var apr_min = apr_min = matches[2];
234 var apr_max = apr_max = matches[3];
235 //console.log('billing_cycle', billing_cycle);
236 //console.log('apr_min', apr_min);
237 //console.log('apr_max', apr_max);
238 if (billing_cycle) {
239 //console.log($(".scraped-billing-cycle"));
240 $(".scraped-billing-cycle").html(billing_cycle);
241 }
242 if (apr_min) {
243 $(".scraped-apr-min").html(apr_min);
244 }
245 if (apr_max) {
246 $('.scraped-apr-max').html(apr_max);
247 }
248
249 } catch (e) {
250 console.log(e);
251 }
252 }
253 });
254 </script>
255 </#if>
256 <script>
257 $(document).ready(function () {
258 $(".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>');
259 });
260 </script>
261 </#if>
262 </#list>
263 <#else>
264 <#assign isExcluded = 0>
265 <#if consumerCards[0].dmaexclude??>
266 <#assign isExcluded = consumerCards[0].dmaexclude?number!0>
267 </#if>
268 <#assign displayedCard = consumerCards[0]>
269 <#assign offerId = displayedCard.offerId>
270 <#assign sourceCode = displayedCard.sourceCode>
271 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
272 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
273 <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")>
274 <#assign productUrlHero="consumer-platinum">
275 <#assign product="Platinum">
276 <#assign cardIndex = 1>
277 <#elseif (displayedCard.offerType=="104")>
278 <#assign productUrlHero = "max-cash">
279 <#assign product="Max Cash Preferred">
280 <#assign cardIndex = 0>
281 <#elseif (displayedCard.offerType=="115")>
282 <#assign productUrlHero = "secured">
283 <#assign product="Secured">
284 <#assign cardIndex = 2>
285 </#if>
286 </#if>
287 <#if product?has_content && product != "">
288 <#assign card_text = product + " Card">
289 </#if>
290 </#if>
291 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
292 <#if (offerTypeList?seq_contains("128")) >
293 <#list businessCards as card>
294 <#if (card.offerType=="128")>
295 <#assign isExcluded = 0>
296 <#if card.dmaexclude??>
297 <#assign isExcluded = card.dmaexclude?number!0>
298 </#if>
299 <#assign offerId = card.offerId>
300 <#assign sourceCode = card.sourceCode>
301 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
302 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
303
304 <#assign productUrlHero="business-cash-preferred">
305 <#assign product="Business Cash Preferred">
306 <#assign cardIndex = 1>
307 </#if>
308 </#list>
309 <#else>
310 <#assign isExcluded = 0>
311 <#if businessCards[0].dmaexclude??>
312 <#assign isExcluded = businessCards[0].dmaexclude?number!0>
313 </#if>
314 <#assign displayedCard = businessCards[0]>
315 <#assign offerId = displayedCard.offerId>
316 <#assign sourceCode = displayedCard.sourceCode>
317 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
318 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
319 <#if (displayedCard.offerType=="143")>
320 <#assign productUrlHero="business-real-rewards">
321 <#assign product="Business Real Rewards">
322 <#assign cardIndex = 2>
323 <#elseif (displayedCard.offerType=="144")>
324 <#assign productUrlHero="smart-business-rewards">
325 <#assign product="Smart Business Rewards">
326 <#assign cardIndex = 0>
327 <#elseif (displayedCard.offerType=="121")>
328 <#assign productUrlHero = "business-platinum">
329 <#assign product="Business">
330 <#assign cardIndex = 3>
331 </#if>
332 </#if>
333 <#if product?has_content && product != "">
334 <#assign card_text = product + " Card">
335 </#if>
336 </#if>
337 <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}">
338 <div class="hero-main">
339 <div class="hero-main-container">
340 <div class="hero-main-offer">
341 <div class="offer-detail">
342 <div class="offer-detail-cardArt cardArtImg">
343 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
344 class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
345 <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }"
346 class="jn-img-responsive">-->
347 <p>${card_text!''}</p>
348 </div>
349 <div class="offer-detail-text text-color-default hide-desktop">
350 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
351 </div>
352 <#if isExcluded == 0>
353 <a
354 class="jn-button hide-desktop btn"
355 data-button-name="cta-button-top"
356 data-product-name="${productUrlHero!''}"
357 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"
358 >
359 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
360 </a>
361 <#else>
362 <a
363 class="jn-button hide-desktop btn"
364 data-button-name="cta-button-top"
365 data-product-name="${productUrlHero!''}"
366 data-micromodal-trigger="modal-index-hero"
367 href="javascript:void(0);"
368 >
369 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
370 </a>
371 </#if>
372 </div>
373 <div class="offer-header">
374 <div class="offer-text-top">
375 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
376 </div>
377 <div class="offer-text-bottom hide-mobile">
378 <div class="offer-detail-text text-color-default ">
379 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
380 </div>
381
382 <#if isExcluded == 0>
383 <a
384 class="jn-button"
385 data-button-name="cta-button-top"
386 data-product-name="${productUrlHero!''}"
387 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer"
388 >
389 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
390 </a>
391 <#else>
392 <a
393 class="jn-button"
394 data-button-name="cta-button-top"
395 data-product-name="${productUrlHero!''}"
396 data-micromodal-trigger="modal-index-hero"
397 href="javascript:void(0);"
398 >
399 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
400 </a>
401 </#if>
402 </div>
403 </div>
404 </div>
405 </div>
406 </div>
407 </div>
408
409 <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" >
410 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
411 <div
412 aria-modal="true"
413 aria-labelledby="modal-index-hero-title"
414 class="excludeModal__container"
415 role="dialog"
416 >
417 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
418 <header class="excludeModal__header">
419 <h2 class="excludeModal__title" id="modal-index-hero-title">
420 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
421 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
422 </#if>
423 </h2>
424 </header>
425 </div>
426 </div>
427 </div>
428 <#else>
429 <#assign hasBalanceTransferCalculator = false>
430 <#list fiCardsData as fib>
431 <#switch fib.offerType>
432 <#case "101">
433 <#assign cardIndex = 3 >
434 <#assign productUrlHero = "consumer-edr">
435 <#assign product="Everyday Rewards+">
436 <#assign hasBalanceTransferCalculator = false>
437 <#break>
438 <#case "103">
439 <#assign cardIndex = 3 >
440 <#assign productUrlHero = "consumer-edr">
441 <#assign product="Everyday Rewards+">
442 <#assign hasBalanceTransferCalculator = false>
443 <#break>
444 <#case "104">
445 <#assign cardIndex = 0 >
446 <#assign productUrlHero="max-cash">
447 <#assign product="Max Cash Preferred">
448 <#assign hasBalanceTransferCalculator = false>
449 <#break>
450 <#case "108">
451 <#assign cardIndex = 1 >
452 <#assign productUrlHero = "consumer-platinum">
453 <#assign product="Platinum">
454 <#assign hasBalanceTransferCalculator = true>
455 <#break>
456 <#case "109">
457 <#assign cardIndex = 1 >
458 <#assign productUrlHero = "consumer-platinum">
459 <#assign product="Platinum">
460 <#assign hasBalanceTransferCalculator = true>
461 <#break>
462 <#case "141">
463 <#assign cardIndex = 4 >
464 <#assign productUrlHero = "college-real-rewards">
465 <#assign product = "College Real Rewards" >
466 <#assign hasBalanceTransferCalculator = false>
467 <#break>
468 <#case "147">
469 <#assign cardIndex = 5 >
470 <#assign productUrlHero = "max-cash-secured">
471 <#assign product = "Max Cash Secured" >
472 <#assign hasBalanceTransferCalculator = false>
473 <#break>
474 <#case "115">
475 <#assign cardIndex = 2 >
476 <#assign productUrlHero = "secured">
477 <#assign product="Secured">
478 <#assign hasBalanceTransferCalculator = false>
479 <#break>
480 <#case "138">
481 <#assign cardIndex = 6 >
482 <#assign productUrlHero = "travel-rewards-plus">
483 <#assign product="Travel Rewards+">
484 <#assign hasBalanceTransferCalculator = false>
485 <#break>
486 <#case "154">
487 <#assign cardIndex = 7 >
488 <#assign productUrlHero = "reserve-rewards-plus">
489 <#assign product="Reserve Rewards+">
490 <#assign hasBalanceTransferCalculator = false>
491 <#break>
492 <#case "128">
493 <#assign cardIndex = 1 >
494 <#assign productUrlHero = "business-cash-preferred">
495 <#assign product="Business Cash Preferred">
496 <#assign hasBalanceTransferCalculator = false>
497 <#break>
498 <#case "143">
499 <#assign cardIndex = 2 >
500 <#assign productUrlHero = "business-real-rewards">
501 <#assign product="Business Real Rewards">
502 <#assign hasBalanceTransferCalculator = false>
503 <#break>
504 <#case "144">
505 <#assign cardIndex = 0 >
506 <#assign productUrlHero = "smart-business-rewards">
507 <#assign product="Smart Business Rewards">
508 <#assign hasBalanceTransferCalculator = false>
509 <#break>
510 <#case "121">
511 <#assign cardIndex = 3 >
512 <#assign productUrlHero = "business-platinum">
513 <#assign product="Business">
514 <#assign hasBalanceTransferCalculator = false>
515 <#break>
516 <#default>
517 </#switch>
518 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
519 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
520
521 <script>
522 console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")
523 </script>
524
525 <#if url?matches(".*/${productUrlHero}\\?.*")>
526 <#assign isExcluded = 0>
527 <#if fib.dmaexclude??>
528 <#assign isExcluded = fib.dmaexclude?number!0>
529 </#if>
530 <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")>
531
532 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')>
533 <#if (scrapedData?size > 0)>
534 <#list scrapedData as sItem>
535 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
536 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
537 <#break>
538 </#if>
539
540 </#list>
541 <script>
542 $(document).ready(function () {
543 var aprText = "${apr}";
544 //console.log('aprText',aprText);
545 if (aprText) {
546 $(".apr-full-text").html(aprText);
547 try {
548 var matches= aprText.match(/\d+(\.\d+)?%?/g);
549 var billing_cycle = matches[1];
550 var apr_min = apr_min = matches[2];
551 var apr_max = apr_max = matches[3];
552 //console.log('billing_cycle', billing_cycle);
553 //console.log('apr_min', apr_min);
554 //console.log('apr_max', apr_max);
555 if (billing_cycle) {
556 //console.log($(".scraped-billing-cycle"));
557 $(".scraped-billing-cycle").html(billing_cycle);
558 }
559 if (apr_min) {
560 $(".scraped-apr-min").html(apr_min);
561 }
562 if (apr_max) {
563 $('.scraped-apr-max').html(apr_max);
564 }
565
566 } catch (e) {
567 console.log(e);
568 }
569 }
570 });
571 </script>
572 </#if>
573 </#if>
574 <#if product?has_content && product != "">
575 <#assign card_text = product + " Card">
576 </#if>
577 <#assign tc_offerTypes = ['108', '109', '121', '144']>
578 <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']>
579 <div class="hero-container ${class.getData()}">
580 <div class="hero-main">
581 <div class="hero-main-container">
582 <div class="hero-main-offer">
583 <div class="offer-detail">
584 <div class="offer-detail-cardArt cardArtImg">
585 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
586 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive">
587 <p>${card_text!''}</p>
588 <#if (hasBalanceTransferCalculator)>
589 <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a>
590 </#if>
591 </div>
592 <div class="offer-detail-text text-color-default hide-desktop">
593 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
594
595 <#if (tc_offerTypes?seq_contains(fib.offerType))>
596 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
597 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
598 </a>
599 </#if>
600 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
601 <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>
602 </#if>
603 </div>
604
605 <#if isExcluded == 0>
606 <a
607 class="jn-button hide-desktop btn"
608 data-button-name="cta-button-top"
609 data-product-name="${productUrlHero!''}"
610 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
611 >
612 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
613 </a>
614 <#else>
615 <a
616 class="jn-button hide-desktop btn"
617 data-button-name="cta-button-top"
618 data-product-name="${productUrlHero!''}"
619 data-micromodal-trigger="modal-product-hero"
620 href="javascript:void(0);"
621 >
622 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
623 </a>
624 </#if>
625 </div>
626 <div class="offer-header">
627 <div class="offer-text-top">
628 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
629 </div>
630 <div class="offer-text-bottom hide-mobile">
631 <div class="offer-detail-text text-color-default ">
632 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
633 <#if (tc_offerTypes?seq_contains(fib.offerType))>
634 <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
635 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
636 </a>
637 </#if>
638 </div>
639
640 <#if isExcluded == 0>
641 <a
642 class="jn-button"
643 data-button-name="cta-button-top"
644 data-product-name="${productUrlHero!''}"
645 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
646 >
647 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
648 </a>
649 <#else>
650 <a
651 class="jn-button"
652 data-button-name="cta-button-top"
653 data-product-name="${productUrlHero!''}"
654 data-micromodal-trigger="modal-product-hero"
655 href="javascript:void(0);"
656 >
657 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
658 </a>
659 </#if>
660 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
661 <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>
662 </#if>
663 </div>
664 </div>
665
666 </div>
667 </div>
668 </div>
669 </div>
670
671 <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" >
672 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
673 <div
674 aria-modal="true"
675 aria-labelledby="modal-prodcut-hero-title"
676 class="excludeModal__container"
677 role="dialog"
678 >
679 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
680 <header class="excludeModal__header">
681 <h2 class="excludeModal__title" id="modal-prodcut-hero-title">
682 <#if productTitle.getSiblings()[cardIndex].excludedMessage?? >
683 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
684 </#if>
685 </h2>
686 </header>
687 </div>
688 </div>
689 </div>
690 <#break />
691 </#if>
692 </#list>
693
694 </#if>
695</#if>
696<!-- https://micromodal.vercel.app/ -->
697<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
698
699<script>
700 AUI().ready(function(){
701 //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
702 var locationCodeParam = '${lc}';
703 var currentEnvironmentParam = '${currentEnvironment}';
704 if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){
705 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"})
706 }
707
708 MicroModal.init();
709 });
710</script>
711<script>
712 if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};}
713 setHeaderBackground = () => {
714 // Makes the Header subtitle work if there is two lines of text
715 //product page header
716 var consumerHeader = document.getElementsByClassName("landing-consumer")[0];
717 if(!consumerHeader) {
718 //index page header
719 consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0];
720 }
721
722 if(consumerHeader) {
723 var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0];
724 var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0];
725 const offerTextTop = consumerHeader.querySelector(".offer-text-top");
726
727 if (consumerOfferHeader.innerText.length >= 76){
728 const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px";
729 //two lines
730 //offerTextTop.style.marginTop = '0px';
731 //document.querySelector('.offer-text-bottom').style.marginTop = '25px';
732 //prevent button and text going into blue section
733 //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px";
734 consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")";
735 }
736 }
737 //product page header
738 var buisnessHeader = document.getElementsByClassName("landing-business")[0];
739 if(!buisnessHeader) {
740 //index page header
741 buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0];
742 }
743
744 if(buisnessHeader) {
745 var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0];
746 var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0];
747
748 if (buisnessOfferHeader.innerText.length >= 48){
749 //two lines
750 buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)";
751 }
752 }
753 };
754 /*
755 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.
756 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.
757 */
758 setHeaderBackground();
759 AUI().ready(function(){setHeaderBackground();});
760
761</script>
S'ha produït un error mentre es processava la plantilla.
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>
S'ha produït un error mentre es processava la plantilla.
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 prefix = "00000" >
12<#assign lcWithPrefix = prefix + lc >
13<#assign withPrefixLength = lcWithPrefix?length >
14<#assign startHere = withPrefixLength - 5>
15<#assign lc = lcWithPrefix?substring(startHere)>
16
17<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
18<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
19
20<#if clientProfileList?first?has_content>
21 <#assign clientProfile = clientProfileList?first>
22 <#assign partnerName = clientProfile.getMarketingNameLong()>
23 <#assign pbu = clientProfile.getPbu()>
24 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
25 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
26
27 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu + '&' + lc)>
28 <#assign temp = []>
29 <#assign offerTypeList = []>
30 <#assign index = 0>
31 <#list fiCardsData as fib>
32 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
33 <#assign offerTypeList = offerTypeList + [fib.offerType]>
34 <#assign temp = temp + fiCardsData[index..index]>
35 </#if>
36 <#assign index = index + 1>
37 </#list>
38 <#assign fiCardsData = temp>
39
40 <#if (fiCardsData?size > 0)>
41 <#list fiCardsData as fib>
42 <#switch fib.offerType>
43 <#case "101">
44 <#assign productURL = "consumer-edr">
45 <#assign productName = "Everyday Rewards+">
46 <#break>
47 <#case "103">
48 <#assign productURL = "consumer-edr">
49 <#assign productName = "Everyday Rewards+">
50 <#break>
51 <#case "104">
52 <#assign productURL = "max-cash">
53 <#assign productName = "Max Cash Preferred Card">
54 <#break>
55 <#case "108">
56 <#assign productURL="consumer-platinum">
57 <#assign productName="Platinum Card">
58 <#break>
59 <#case "109">
60 <#assign productURL="consumer-platinum">
61 <#assign productName="Platinum Card">
62 <#break>
63 <#case "115">
64 <#assign productURL = "secured">
65 <#assign productName = "Secured Card" >
66 <#break>
67 <#case "138">
68 <#assign productURL = "travel-rewards-plus">
69 <#assign productName = "Travel Rewards+" >
70 <#break>
71 <#case "141">
72 <#assign productURL = "college-real-rewards">
73 <#assign productName = "College Real Rewards" >
74 <#break>
75 <#case "147">
76 <#assign productURL = "max-cash-secured">
77 <#assign productName = "Max Cash Secured Card" >
78 <#break>
79 <#case "154">
80 <#assign productURL = "reserve-rewards-plus">
81 <#assign productName = "Reserve Rewards+" >
82 <#break>
83 <#case "121">
84 <#assign productURL = "business-platinum">
85 <#assign productName = "Business Card" >
86 <#break>
87 <#case "128">
88 <#assign productURL = "business-cash-preferred">
89 <#assign productName = "Business Cash Preferred" >
90 <#break>
91 <#case "143">
92 <#assign productURL = "business-real-rewards">
93 <#assign productName = "Business Real Rewards Card" >
94 <#break>
95 <#case "144">
96 <#assign productURL = "smart-business-rewards">
97 <#assign productName = "Smart Business Rewards Card" >
98 <#break>
99 <#default>
100 </#switch>
101
102 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
103 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
104 <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")>
105 <script>
106 console.log('offerType', '${fib.offerType}', '${productURL}')
107 </script>
108 <#list product.getSiblings() as card>
109 <#if card?has_content && card.offerType.getData() == fib.offerType>
110 <#assign isExcluded = 0>
111 <#if fib.dmaexclude??>
112 <#assign isExcluded = fib.dmaexclude?number!0>
113 </#if>
114
115 <div class="content-container jn-container-banner" title="${partnerName!''} ${productName!''}">
116 <div class="banner-wrapper">
117 <div class="banner">
118 <div class="banner-cardArt cardArtImg">
119 <img
120 src="${cardArtImage!''}"
121 alt="${partnerName!''} ${productName!''}"
122 title="${partnerName!''} ${productName!''}"
123 class="jn-img-responsive"
124 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"
125 >
126 </div>
127 <div class="banner-cta">
128 <div class="banner-cta-text">
129 ${card.optionalCtaFeatureText.getData()}
130 </div>
131 <#if isExcluded == 0>
132 <a
133 class="jn-button"
134 data-button-name="cta-button-bottom"
135 data-product-name="${productURL}!''"
136 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
137 id="oadSecButton"
138 >
139 ${card.optionalCtaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${productName!''} Card </span>
140 </a>
141 <#else>
142 <a
143 class="jn-button"
144 data-button-name="cta-button-bottom"
145 data-product-name="${productURL}!''"
146 data-micromodal-trigger="modal-lower-banner"
147 id="oadSecButton"
148 href="javascript:void(0);"
149 >
150 ${card.optionalCtaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${productName!''} Card </span>
151 </a>
152 </#if>
153 </div>
154 </div>
155 </div>
156 </div>
157 <style>
158 .excludeModal__overlay {
159 position: fixed;
160 top: 0;
161 left: 0;
162 right: 0;
163 bottom: 0;
164 background: rgba(0,0,0,0.6);
165 display: flex;
166 justify-content: center;
167 align-items: center;
168 }
169
170 .excludeModal__container {
171 background-color: #fff;
172 padding: 30px;
173 min-width: 500px;
174 max-width: 500px;
175 max-height: 100vh;
176 border-radius: 4px;
177 overflow-y: auto;
178 box-sizing: border-box;
179 }
180
181 .excludeModal__header {
182 display: flex;
183 justify-content: space-between;
184 align-items: center;
185 }
186
187 .modal .excludeModal__container .excludeModal__title {
188 margin-top: 0;
189 margin-bottom: 0;
190 font-weight: 600;
191 font-size: 20px;
192 line-height: 1.25;
193 color: #00449e;
194 box-sizing: border-box;
195 }
196
197 .excludeModal__close {
198 background: transparent;
199 border: 1px solid white;
200 padding: 4px 8px;
201 float: right;
202 }
203
204 .excludeModal__close:hover {
205 border: 1px solid black;
206 }
207
208 .excludeModal__close:before { content: "\2715"; }
209
210 @keyframes mmfadeIn {
211 from { opacity: 0; }
212 to { opacity: 1; }
213 }
214
215 @keyframes mmfadeOut {
216 from { opacity: 1; }
217 to { opacity: 0; }
218 }
219
220 @keyframes mmslideIn {
221 from { transform: translateY(15%); }
222 to { transform: translateY(0); }
223 }
224
225 @keyframes mmslideOut {
226 from { transform: translateY(0); }
227 to { transform: translateY(-10%); }
228 }
229
230 .micromodal-slide {
231 display: none;
232 }
233
234 .micromodal-slide.is-open {
235 display: block;
236 }
237
238 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
239 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
240 }
241
242 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
243 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
244 }
245
246 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
247 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
248 }
249
250 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
251 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
252 }
253
254 .micromodal-slide .excludeModal__container,
255 .micromodal-slide .excludeModal__overlay {
256 will-change: transform;
257 }
258 </style>
259 <div aria-hidden="true" class="modal micromodal-slide" id="modal-lower-banner" >
260 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
261 <div
262 aria-modal="true"
263 aria-labelledby="modal-lower-banner-title"
264 class="excludeModal__container"
265 role="dialog"
266 >
267 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
268 <header class="excludeModal__header">
269 <h2 class="excludeModal__title" id="modal-lower-banner-title">
270 <#if card.excludedMessage?? >
271 ${card.excludedMessage.getData()!""}
272 </#if>
273 </h2>
274 </header>
275 </div>
276 </div>
277 </div>
278 <!-- https://micromodal.vercel.app/ -->
279 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
280 <script>
281 AUI().ready(function(){
282 MicroModal.init();
283 });
284 </script>
285 <#break>
286 </#if>
287 </#list>
288 <#break>
289 </#if>
290 </#list>
291 </#if>
292<#else>
293 <script>
294 console.log("discalimer: client profile empty");
295 </script>
296</#if>
S'ha produït un error mentre es processava la plantilla.
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>
S'ha produït un error mentre es processava la plantilla.
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 -->