Er trad een fout op tijdens de verwerking van de sjabloon.
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 1.5X 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>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417688" at line 10, 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 10, 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<#assign prcaURL = propsUtil.get('elan.prca.url')>
9
10<#assign lc= qstringmap["ecdma-lc"]?first>
11<#assign lc = htmlUtil.escape(lc)>
12<#assign lc = htmlUtil.escapeJS(lc)>
13
14<#assign prefix = "00000" >
15<#assign lcWithPrefix = prefix + lc >
16<#assign withPrefixLength = lcWithPrefix?length >
17<#assign startHere = withPrefixLength - 5>
18<#assign lc = lcWithPrefix?substring(startHere)>
19
20
21<#if qstringmap["ecid"]?has_content>
22 <#assign ecidExt = qstringmap["ecid"]?first>
23 <#assign ecidExt = htmlUtil.escape(ecidExt)>
24 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
25 <#assign ecidExt = "&ecid=" + ecidExt>
26<#else>
27 <#assign ecidExt="">
28</#if>
29<#if oadURL?contains("uat-")>
30 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
31 <#assign currentEnvironment = 'uat' >
32<#else>
33 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
34</#if>
35 <script>
36 //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}');
37 </script>
38<#assign campaignId = "" >
39<#assign useprcaValue = "" >
40<#assign ecidExt="">
41<#if qstringmap["ecid"]?has_content>
42 <#assign campaignId = qstringmap["ecid"]?first >
43 <#assign campaignId = htmlUtil.escape(campaignId)>
44 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
45
46 <#assign ecidExt = qstringmap["ecid"]?first>
47 <#assign ecidExt = htmlUtil.escape(ecidExt)>
48 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
49 <#assign ecidExt = "&ecid=" + ecidExt>
50</#if>
51
52<#assign dcoSourceCode = "">
53<#assign dcoSourceCodeQueryParameter = "">
54
55<#if qstringmap["sourcecode"]?has_content>
56 <#assign dcoSourceCode = qstringmap["sourcecode"]?first>
57 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
58 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
59 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
60<#elseif qstringmap["sourceCode"]?has_content>
61 <#assign dcoSourceCode = qstringmap["sourceCode"]?first>
62 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
63 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
64 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
65</#if>
66
67<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
68<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
69<#assign clientProfile = clientProfileList?first>
70<#assign partnerName = clientProfile.getMarketingNameLong()>
71<#assign pbu = clientProfile.getPbu()>
72<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
73<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
74
75<#assign synExclusionMessageService = (serviceLocator.findService("com.elan.crc.quicklink.service.SYNExclusionMessageLocalService"))! />
76<#assign synExclusionMessageData = synExclusionMessageService.getClientProfileAndSyndicatedExclusionMsg(lc) />
77<#assign synExclusionMsg = "" />
78<#assign synExclusionMsgURL = "" />
79<#assign synExclusionMsgAriaLabel = "" />
80
81<#if synExclusionMessageData?exists && synExclusionMessageData?has_content>
82 <#assign synExclusionMsgObj = synExclusionMessageData[0]>
83 <#assign synExclusionMsg = synExclusionMsgObj[4]!"" />
84 <#assign synExclusionMsgURL = synExclusionMsgObj[5]!"" />
85 <#assign synExclusionMsgAriaLabel = synExclusionMsgObj[6]!"" />
86</#if>
87
88
89
90<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)>
91<#assign temp = []>
92<#assign consumerCards = []>
93<#assign businessCards = []>
94<#assign offerTypeList = []>
95<#assign index = 0>
96<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]>
97<#assign businessOfferTypes = ["128", "121", "143", "144"]>
98<#list fiCardsData as fib>
99 <#assign useprcaValue = fib.useprca!"">
100 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
101 <#assign offerTypeList = offerTypeList + [fib.offerType]>
102 <#if (consumerOfferTypes?seq_contains(fib.offerType))>
103 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
104 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
105 <#assign businessCards = businessCards + fiCardsData[index..index]>
106 </#if>
107 <#assign temp = temp + fiCardsData[index..index]>
108 </#if>
109 <#assign index = index + 1>
110</#list>
111
112<#assign fiCardsData = temp>
113 <script>
114 //console.log("fi card data count", ${fiCardsData?size})
115</script>
116
117<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
118<#if (clientdata?size > 0)>
119 <#assign backgroundColor = clientdata[0].backgroundHexColor>
120</#if>
121
122<#if (fiCardsData?size > 0)>
123 <style>
124 .excludeModal__overlay {
125 position: fixed;
126 top: 0;
127 left: 0;
128 right: 0;
129 bottom: 0;
130 background: rgba(0,0,0,0.6);
131 display: flex;
132 justify-content: center;
133 align-items: center;
134 }
135
136 .excludeModal__container {
137 background-color: #fff;
138 padding: 30px;
139 min-width: 500px;
140 max-width: 500px;
141 max-height: 100vh;
142 border-radius: 4px;
143 overflow-y: auto;
144 box-sizing: border-box;
145 }
146
147 .excludeModal__header {
148 display: block;
149 justify-content: space-between;
150 align-items: center;
151 }
152
153 .modal .excludeModal__container .excludeModal__title {
154 margin-top: 0;
155 margin-bottom: 0;
156 font-weight: 600;
157 font-size: 20px;
158 line-height: 1.25;
159 color: #00449e;
160 box-sizing: border-box;
161 }
162
163 .excludeModal__close {
164 background: transparent;
165 border: 1px solid white;
166 padding: 4px 8px;
167 float: right;
168 }
169
170 .excludeModal__close:hover {
171 border: 1px solid black;
172 }
173
174 .excludeModal__close:before { content: "\2715"; }
175
176 @keyframes mmfadeIn {
177 from { opacity: 0; }
178 to { opacity: 1; }
179 }
180
181 @keyframes mmfadeOut {
182 from { opacity: 1; }
183 to { opacity: 0; }
184 }
185
186 @keyframes mmslideIn {
187 from { transform: translateY(15%); }
188 to { transform: translateY(0); }
189 }
190
191 @keyframes mmslideOut {
192 from { transform: translateY(0); }
193 to { transform: translateY(-10%); }
194 }
195
196 .micromodal-slide {
197 display: none;
198 }
199
200 .micromodal-slide.is-open {
201 display: block;
202 }
203
204 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
205 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
206 }
207
208 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
209 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
210 }
211
212 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
213 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
214 }
215
216 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
217 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
218 }
219
220 .micromodal-slide .excludeModal__container,
221 .micromodal-slide .excludeModal__overlay {
222 will-change: transform;
223 }
224
225 .excludeModal__link {
226 font-size: 18px !important;
227 font-weight: bold;
228 color: #00449e !important;
229 text-decoration: underline !important;
230 }
231
232 .excludeModal__link a:hover {
233 text-decoration: underline !important;
234 }
235
236 #excludeModalDivLink {
237 margin-top: 20px
238 }
239 </style>
240 <#if url?contains("index")>
241 <#assign isExcluded = 0>
242 <#assign offerId = "">
243 <#assign sourceCode = "">
244 <#assign cardArtImage = "">
245 <#assign productUrlHero = "">
246 <#assign product = "">
247 <#assign cardIndex = 0>
248 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
249 <#if (offerTypeList?seq_contains("108")) || (offerTypeList?seq_contains("109"))>
250 <#list consumerCards as card>
251 <#if (card.offerType=="108") || (card.offerType=="109")>
252 <#assign isExcluded = 0>
253 <#if card.dmaexclude??>
254 <#assign isExcluded = card.dmaexclude?number!0>
255 </#if>
256 <#assign offerId = card.offerId>
257 <#assign sourceCode = card.sourceCode>
258 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
259 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
260
261 <#assign productUrlHero="consumer-platinum2103">
262 <#assign product="Platinum">
263 <#assign cardIndex = 1>
264 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)>
265 <#if (scrapedData?size > 0)>
266 <#list scrapedData as sItem>
267 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
268 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
269 <#break>
270 </#if>
271 </#list>
272 <script>
273 $(document).ready(function () {
274 var aprText = "${apr}";
275 //console.log('aprText: ${aprText!''}');
276 if (aprText) {
277 $(".apr-full-text").html(aprText);
278 try {
279 var matches= aprText.match(/\d+(\.\d+)?%?/g);
280 var billing_cycle = matches[1];
281 var apr_min = apr_min = matches[2];
282 var apr_max = apr_max = matches[3];
283 //console.log('billing_cycle', billing_cycle);
284 //console.log('apr_min', apr_min);
285 //console.log('apr_max', apr_max);
286 if (billing_cycle) {
287 //console.log($(".scraped-billing-cycle"));
288 $(".scraped-billing-cycle").html(billing_cycle);
289 }
290 if (apr_min) {
291 $(".scraped-apr-min").html(apr_min);
292 }
293 if (apr_max) {
294 $('.scraped-apr-max').html(apr_max);
295 }
296
297 } catch (e) {
298 console.log(e);
299 }
300 }
301 });
302 </script>
303 </#if>
304 <script>
305 $(document).ready(function () {
306 $(".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>');
307 });
308 </script>
309 </#if>
310 </#list>
311 <#else>
312 <#assign isExcluded = 0>
313 <#if consumerCards[0].dmaexclude??>
314 <#assign isExcluded = consumerCards[0].dmaexclude?number!0>
315 </#if>
316 <#assign displayedCard = consumerCards[0]>
317 <#assign offerId = displayedCard.offerId>
318 <#assign sourceCode = displayedCard.sourceCode>
319 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
320 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
321 <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")>
322 <#assign productUrlHero="consumer-platinum">
323 <#assign product="Platinum">
324 <#assign cardIndex = 1>
325 <#elseif (displayedCard.offerType=="104")>
326 <#assign productUrlHero = "max-cash">
327 <#assign product="Max Cash Preferred">
328 <#assign cardIndex = 0>
329 <#elseif (displayedCard.offerType=="115")>
330 <#assign productUrlHero = "secured">
331 <#assign product="Secured">
332 <#assign cardIndex = 2>
333 </#if>
334 </#if>
335 <#if product?has_content && product != "">
336 <#assign card_text = product + " Card">
337 </#if>
338 </#if>
339 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
340 <#if (offerTypeList?seq_contains("128")) >
341 <#list businessCards as card>
342 <#if (card.offerType=="128")>
343 <#assign isExcluded = 0>
344 <#if card.dmaexclude??>
345 <#assign isExcluded = card.dmaexclude?number!0>
346 </#if>
347 <#assign offerId = card.offerId>
348 <#assign sourceCode = card.sourceCode>
349 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
350 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
351
352 <#assign productUrlHero="business-cash-preferred">
353 <#assign product="Business Cash Preferred">
354 <#assign cardIndex = 1>
355 </#if>
356 </#list>
357 <#else>
358 <#assign isExcluded = 0>
359 <#if businessCards[0].dmaexclude??>
360 <#assign isExcluded = businessCards[0].dmaexclude?number!0>
361 </#if>
362 <#assign displayedCard = businessCards[0]>
363 <#assign offerId = displayedCard.offerId>
364 <#assign sourceCode = displayedCard.sourceCode>
365 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
366 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
367 <#if (displayedCard.offerType=="143")>
368 <#assign productUrlHero="business-real-rewards">
369 <#assign product="Business Real Rewards">
370 <#assign cardIndex = 2>
371 <#elseif (displayedCard.offerType=="144")>
372 <#assign productUrlHero="smart-business-rewards">
373 <#assign product="Smart Business Rewards">
374 <#assign cardIndex = 0>
375 <#elseif (displayedCard.offerType=="121")>
376 <#assign productUrlHero = "business-platinum">
377 <#assign product="Business">
378 <#assign cardIndex = 3>
379 </#if>
380 </#if>
381 <#if product?has_content && product != "">
382 <#assign card_text = product + " Card">
383 </#if>
384 </#if>
385 <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}">
386 <div class="hero-main">
387 <div class="hero-main-container">
388 <div class="hero-main-offer">
389 <div class="offer-detail">
390 <div class="offer-detail-cardArt cardArtImg">
391 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
392 class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
393 <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }"
394 class="jn-img-responsive">-->
395 <p>${card_text!''}</p>
396 </div>
397 <div class="offer-detail-text text-color-default hide-desktop">
398 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
399 </div>
400 <#if isExcluded == 0>
401 <#if useprcaValue == "1">
402 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer" method="post">
403 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
404 <input id='offerId' type="hidden" name="offerId" value="${offerId}">
405 <input type="hidden" name="preparerType" value="customer">
406 </form>
407 <a
408 class="jn-button hide-desktop btn"
409 data-button-name="cta-button-top"
410 data-product-name="${productUrlHero!''}"
411 href="#"
412 offerId="${offerId!''}"
413 onclick="submitForm(event)"
414 >
415 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
416 </a>
417
418
419
420 <#else>
421 <a
422 class="jn-button hide-desktop btn"
423 data-button-name="cta-button-top"
424 data-product-name="${productUrlHero!''}"
425 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
426 >
427 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
428 </a>
429 </#if>
430
431 <#else>
432 <a
433 class="jn-button hide-desktop btn"
434 data-button-name="cta-button-top"
435 data-product-name="${productUrlHero!''}"
436 data-micromodal-trigger="modal-index-hero"
437 href="javascript:void(0);"
438 >
439 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
440 </a>
441 </#if>
442 </div>
443 <div class="offer-header">
444 <div class="offer-text-top">
445 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
446 </div>
447 <div class="offer-text-bottom hide-mobile">
448 <div class="offer-detail-text text-color-default ">
449 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
450 </div>
451
452 <#if isExcluded == 0>
453 <#if useprcaValue == "1">
454 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer" method="post">
455 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
456 <input id='offerId' type="hidden" name="offerId" value="${offerId!''}">
457 <input type="hidden" name="preparerType" value="customer">
458 </form>
459 <a
460 class="jn-button"
461 data-button-name="cta-button-top"
462 data-product-name="${productUrlHero!''}"
463 href="#"
464 offerId="${offerId!''}"
465 onclick="submitForm(event)"
466 >
467 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
468 </a>
469
470 <#else>
471 <a
472 class="jn-button"
473 data-button-name="cta-button-top"
474 data-product-name="${productUrlHero!''}"
475 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
476 >
477 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
478 </a>
479 </#if>
480 <#else>
481 <a
482 class="jn-button"
483 data-button-name="cta-button-top"
484 data-product-name="${productUrlHero!''}"
485 data-micromodal-trigger="modal-index-hero"
486 href="javascript:void(0);"
487 >
488 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
489 </a>
490 </#if>
491 </div>
492 </div>
493 </div>
494 </div>
495 </div>
496 </div>
497
498 <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" >
499 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
500 <div
501 aria-modal="true"
502 aria-labelledby="modal-index-hero-title"
503 class="excludeModal__container"
504 role="dialog"
505 >
506 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
507 <header class="excludeModal__header">
508 <div>
509 <h2 class="excludeModal__title" id="modal-index-hero-title">
510 <#if synExclusionMsg?has_content>
511 ${synExclusionMsg}
512 <#elseif productTitle.getSiblings()[cardIndex].excludedMessage?? >
513 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
514 </#if>
515 </h2>
516 </div>
517 <div id="excludeModalDivLink">
518 <#if synExclusionMsgURL?has_content>
519 <p>
520 <a href="${synExclusionMsgURL}" target="_blank" aria-label="${synExclusionMsgAriaLabel!''}" class="excludeModal__link">
521 Learn more
522 </a>
523 </p>
524 </#if>
525 </div>
526 </header>
527 </div>
528 </div>
529 </div>
530 <#else>
531 <#assign hasBalanceTransferCalculator = false>
532 <#list fiCardsData as fib>
533 <#switch fib.offerType>
534 <#case "101">
535 <#assign cardIndex = 3 >
536 <#assign productUrlHero = "consumer-edr">
537 <#assign product="Everyday Rewards+">
538 <#assign hasBalanceTransferCalculator = false>
539 <#break>
540 <#case "103">
541 <#assign cardIndex = 3 >
542 <#assign productUrlHero = "consumer-edr">
543 <#assign product="Everyday Rewards+">
544 <#assign hasBalanceTransferCalculator = false>
545 <#break>
546 <#case "104">
547 <#assign cardIndex = 0 >
548 <#assign productUrlHero="max-cash">
549 <#assign product="Max Cash Preferred">
550 <#assign hasBalanceTransferCalculator = false>
551 <#break>
552 <#case "108">
553 <#assign cardIndex = 1 >
554 <#assign productUrlHero = "consumer-platinum">
555 <#assign product="Platinum">
556 <#assign hasBalanceTransferCalculator = true>
557 <#break>
558 <#case "109">
559 <#assign cardIndex = 1 >
560 <#assign productUrlHero = "consumer-platinum">
561 <#assign product="Platinum">
562 <#assign hasBalanceTransferCalculator = true>
563 <#break>
564 <#case "141">
565 <#assign cardIndex = 4 >
566 <#assign productUrlHero = "college-real-rewards">
567 <#assign product = "College Real Rewards" >
568 <#assign hasBalanceTransferCalculator = false>
569 <#break>
570 <#case "147">
571 <#assign cardIndex = 5 >
572 <#assign productUrlHero = "max-cash-secured">
573 <#assign product = "Max Cash Secured" >
574 <#assign hasBalanceTransferCalculator = false>
575 <#break>
576 <#case "115">
577 <#assign cardIndex = 2 >
578 <#assign productUrlHero = "secured">
579 <#assign product="Secured">
580 <#assign hasBalanceTransferCalculator = false>
581 <#break>
582 <#case "138">
583 <#assign cardIndex = 6 >
584 <#assign productUrlHero = "travel-rewards-plus">
585 <#assign product="Travel Rewards+">
586 <#assign hasBalanceTransferCalculator = false>
587 <#break>
588 <#case "154">
589 <#assign cardIndex = 7 >
590 <#assign productUrlHero = "reserve-rewards-plus">
591 <#assign product="Reserve Rewards+">
592 <#assign hasBalanceTransferCalculator = false>
593 <#break>
594 <#case "128">
595 <#assign cardIndex = 1 >
596 <#assign productUrlHero = "business-cash-preferred">
597 <#assign product="Business Cash Preferred">
598 <#assign hasBalanceTransferCalculator = false>
599 <#break>
600 <#case "143">
601 <#assign cardIndex = 2 >
602 <#assign productUrlHero = "business-real-rewards">
603 <#assign product="Business Real Rewards">
604 <#assign hasBalanceTransferCalculator = false>
605 <#break>
606 <#case "144">
607 <#assign cardIndex = 0 >
608 <#assign productUrlHero = "smart-business-rewards">
609 <#assign product="Smart Business Rewards">
610 <#assign hasBalanceTransferCalculator = false>
611 <#break>
612 <#case "121">
613 <#assign cardIndex = 3 >
614 <#assign productUrlHero = "business-platinum">
615 <#assign product="Business">
616 <#assign hasBalanceTransferCalculator = false>
617 <#break>
618 <#default>
619 </#switch>
620 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
621 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
622
623 <script>
624 console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")
625 </script>
626
627 <#if url?matches(".*/${productUrlHero}\\?.*")>
628 <#assign isExcluded = 0>
629 <script>
630 console.log("fib.dmaexclude------>"+'${fib.dmaexclude}');
631 </script>
632 <#if fib.dmaexclude??>
633 <#assign isExcluded = fib.dmaexclude?number!0>
634 </#if>
635 <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")>
636
637 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')>
638 <#if (scrapedData?size > 0)>
639 <#list scrapedData as sItem>
640 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
641 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
642 <#break>
643 </#if>
644
645 </#list>
646 <script>
647 $(document).ready(function () {
648 var aprText = "${apr}";
649 //console.log('aprText',aprText);
650 if (aprText) {
651 $(".apr-full-text").html(aprText);
652 try {
653 var matches= aprText.match(/\d+(\.\d+)?%?/g);
654 var billing_cycle = matches[1];
655 var apr_min = apr_min = matches[2];
656 var apr_max = apr_max = matches[3];
657 //console.log('billing_cycle', billing_cycle);
658 //console.log('apr_min', apr_min);
659 //console.log('apr_max', apr_max);
660 if (billing_cycle) {
661 //console.log($(".scraped-billing-cycle"));
662 $(".scraped-billing-cycle").html(billing_cycle);
663 }
664 if (apr_min) {
665 $(".scraped-apr-min").html(apr_min);
666 }
667 if (apr_max) {
668 $('.scraped-apr-max').html(apr_max);
669 }
670
671 } catch (e) {
672 console.log(e);
673 }
674 }
675 });
676 </script>
677 </#if>
678 </#if>
679 <#if product?has_content && product != "">
680 <#assign card_text = product + " Card">
681 </#if>
682 <#assign tc_offerTypes = ['108', '109', '121', '144']>
683 <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']>
684 <div class="hero-container ${class.getData()}">
685 <div class="hero-main">
686 <div class="hero-main-container">
687 <div class="hero-main-offer">
688 <div class="offer-detail">
689 <div class="offer-detail-cardArt cardArtImg">
690 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
691 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive">
692 <p>${card_text!''}</p>
693 <#if (hasBalanceTransferCalculator)>
694 <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a>
695 </#if>
696 </div>
697 <div class="offer-detail-text text-color-default hide-desktop">
698 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
699
700 <#if (tc_offerTypes?seq_contains(fib.offerType))>
701 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
702 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
703 </a>
704 </#if>
705 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
706 <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>
707 </#if>
708 </div>
709
710 <#if isExcluded == 0>
711 <#if useprcaValue == "1">
712 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId!''}&preparerType=customer" method="post">
713 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
714 <input id='offerId' type="hidden" name="offerId" value="${fib.offerId!''}">
715 <input type="hidden" name="preparerType" value="customer">
716 </form>
717
718 <a
719 class="jn-button hide-desktop btn"
720 data-button-name="cta-button-top"
721 data-product-name="${productUrlHero!''}"
722 href="#"
723 offerId="${fib.offerId!''}"
724 onclick="submitForm(event)" >
725 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
726 </a>
727
728 <#else>
729 <a
730 class="jn-button hide-desktop btn"
731 data-button-name="cta-button-top"
732 data-product-name="${productUrlHero!''}"
733 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
734 >
735 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
736
737 </a>
738 </#if>
739 <#else>
740 <a
741 class="jn-button hide-desktop btn"
742 data-button-name="cta-button-top"
743 data-product-name="${productUrlHero!''}"
744 data-micromodal-trigger="modal-product-hero"
745 href="javascript:void(0);"
746 >
747 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
748 </a>
749 </#if>
750 </div>
751 <div class="offer-header">
752 <div class="offer-text-top">
753 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
754 </div>
755 <div class="offer-text-bottom hide-mobile">
756 <div class="offer-detail-text text-color-default ">
757 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
758 <#if (tc_offerTypes?seq_contains(fib.offerType))>
759 <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
760 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
761 </a>
762 </#if>
763 </div>
764
765 <#if isExcluded == 0>
766 <#if useprcaValue == "1">
767 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer" method="post" >
768 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
769 <input id='offerId' type="hidden" name="offerId" value="${fib.offerId!''}">
770 <input type="hidden" name="preparerType" value="customer">
771 </form>
772 <a
773 class="jn-button"
774 data-button-name="cta-button-top"
775 data-product-name="${productUrlHero!''}"
776 href="#"
777 offerId="${fib.offerId!''}"
778 onclick="submitForm(event)" >
779 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
780 </a>
781
782 <#else>
783 <a
784 class="jn-button"
785 data-button-name="cta-button-top"
786 data-product-name="${productUrlHero!''}"
787 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
788 >
789 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
790
791 </a>
792 </#if>
793 <#else>
794 <a
795 class="jn-button"
796 data-button-name="cta-button-top"
797 data-product-name="${productUrlHero!''}"
798 data-micromodal-trigger="modal-product-hero"
799 href="javascript:void(0);"
800 >
801 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
802 </a>
803 </#if>
804 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
805 <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>
806 </#if>
807 </div>
808 </div>
809
810 </div>
811 </div>
812 </div>
813 </div>
814
815 <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" >
816 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
817 <div
818 aria-modal="true"
819 aria-labelledby="modal-prodcut-hero-title"
820 class="excludeModal__container"
821 role="dialog"
822 >
823 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
824 <header class="excludeModal__header">
825 <div>
826 <h2 class="excludeModal__title" id="modal-prodcut-hero-title">
827 <#if synExclusionMsg?has_content>
828 ${synExclusionMsg}
829 <#elseif productTitle.getSiblings()[cardIndex].excludedMessage?? >
830 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
831 </#if>
832 </h2>
833 </div>
834 <div id="excludeModalDivLink">
835 <#if synExclusionMsgURL?has_content>
836 <p>
837 <a href="${synExclusionMsgURL}" target="_blank" aria-label="${synExclusionMsgAriaLabel!''}" class="excludeModal__link">
838 Learn more
839 </a>
840 </p>
841 </#if>
842 </div>
843 </header>
844 </div>
845 </div>
846 </div>
847 <#break />
848 </#if>
849 </#list>
850
851 </#if>
852</#if>
853<!-- https://micromodal.vercel.app/ -->
854<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
855
856<script>
857
858 AUI().ready(function(){
859 //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
860 var locationCodeParam = '${lc}';
861 var currentEnvironmentParam = '${currentEnvironment}';
862 if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){
863 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"})
864 }
865
866 MicroModal.init();
867 });
868</script>
869<script>
870 if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};}
871 setHeaderBackground = () => {
872 // Makes the Header subtitle work if there is two lines of text
873 //product page header
874 var consumerHeader = document.getElementsByClassName("landing-consumer")[0];
875 if(!consumerHeader) {
876 //index page header
877 consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0];
878 }
879
880 if(consumerHeader) {
881 var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0];
882 var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0];
883 const offerTextTop = consumerHeader.querySelector(".offer-text-top");
884
885 if (consumerOfferHeader.innerText.length >= 76){
886 const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px";
887 //two lines
888 //offerTextTop.style.marginTop = '0px';
889 //document.querySelector('.offer-text-bottom').style.marginTop = '25px';
890 //prevent button and text going into blue section
891 //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px";
892 consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")";
893 }
894 }
895 //product page header
896 var buisnessHeader = document.getElementsByClassName("landing-business")[0];
897 if(!buisnessHeader) {
898 //index page header
899 buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0];
900 }
901
902 if(buisnessHeader) {
903 var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0];
904 var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0];
905
906 if (buisnessOfferHeader.innerText.length >= 48){
907 //two lines
908 buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)";
909 }
910 }
911 };
912 /*
913 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.
914 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.
915 */
916 setHeaderBackground();
917 AUI().ready(function(){setHeaderBackground();});
918
919
920</script>
921<script>
922 var excluded = '${isExcluded}';
923 var useprcaValue = '${useprcaValue}';
924 var url23 ='${url}';
925 function submitForm(event) {
926 event.preventDefault();
927 var offerId = event.target.getAttribute("offerId");
928 console.log("offerId::::::::::::::"+offerId);
929
930 var lc = document.getElementById('locationCode').value;
931 //var offerId = document.getElementById('offerId').value;
932 //var sourceCode = document.getElementById('sourceCode').value;
933
934 // Construct the URL
935 var url = "${prcaURL}?locationCode=" + lc + "&offerId=" + offerId + "&preparerType=customer";
936
937
938 // Set the form action to the constructed URL
939 document.getElementById('applyForm').action = url;
940
941 // Submit the form
942 postCreditcardLearnMore(url);
943 //document.getElementById('applyForm').submit();
944 }
945 function postCreditcardLearnMore(path, method='post') {
946 // Create a form element
947 const form = document.createElement('form');
948 form.method = method;
949 //form.target = '_blank'; // Open in a new tab
950 form.action = path;
951
952 // Add each parameter as a hidden input field
953
954 document.body.appendChild(form);
955 form.submit();
956 }
957
958</script>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417688" at line 10, 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 10, 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<#assign prcaURL = propsUtil.get('elan.prca.url')>
9
10<#assign lc= qstringmap["ecdma-lc"]?first>
11<#assign lc = htmlUtil.escape(lc)>
12<#assign lc = htmlUtil.escapeJS(lc)>
13
14<#assign prefix = "00000" >
15<#assign lcWithPrefix = prefix + lc >
16<#assign withPrefixLength = lcWithPrefix?length >
17<#assign startHere = withPrefixLength - 5>
18<#assign lc = lcWithPrefix?substring(startHere)>
19
20
21<#if qstringmap["ecid"]?has_content>
22 <#assign ecidExt = qstringmap["ecid"]?first>
23 <#assign ecidExt = htmlUtil.escape(ecidExt)>
24 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
25 <#assign ecidExt = "&ecid=" + ecidExt>
26<#else>
27 <#assign ecidExt="">
28</#if>
29<#if oadURL?contains("uat-")>
30 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
31 <#assign currentEnvironment = 'uat' >
32<#else>
33 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
34</#if>
35 <script>
36 //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}');
37 </script>
38<#assign campaignId = "" >
39<#assign useprcaValue = "" >
40<#assign ecidExt="">
41<#if qstringmap["ecid"]?has_content>
42 <#assign campaignId = qstringmap["ecid"]?first >
43 <#assign campaignId = htmlUtil.escape(campaignId)>
44 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
45
46 <#assign ecidExt = qstringmap["ecid"]?first>
47 <#assign ecidExt = htmlUtil.escape(ecidExt)>
48 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
49 <#assign ecidExt = "&ecid=" + ecidExt>
50</#if>
51
52<#assign dcoSourceCode = "">
53<#assign dcoSourceCodeQueryParameter = "">
54
55<#if qstringmap["sourcecode"]?has_content>
56 <#assign dcoSourceCode = qstringmap["sourcecode"]?first>
57 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
58 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
59 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
60<#elseif qstringmap["sourceCode"]?has_content>
61 <#assign dcoSourceCode = qstringmap["sourceCode"]?first>
62 <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)>
63 <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)>
64 <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}">
65</#if>
66
67<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
68<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
69<#assign clientProfile = clientProfileList?first>
70<#assign partnerName = clientProfile.getMarketingNameLong()>
71<#assign pbu = clientProfile.getPbu()>
72<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
73<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
74
75<#assign synExclusionMessageService = (serviceLocator.findService("com.elan.crc.quicklink.service.SYNExclusionMessageLocalService"))! />
76<#assign synExclusionMessageData = synExclusionMessageService.getClientProfileAndSyndicatedExclusionMsg(lc) />
77<#assign synExclusionMsg = "" />
78<#assign synExclusionMsgURL = "" />
79<#assign synExclusionMsgAriaLabel = "" />
80
81<#if synExclusionMessageData?exists && synExclusionMessageData?has_content>
82 <#assign synExclusionMsgObj = synExclusionMessageData[0]>
83 <#assign synExclusionMsg = synExclusionMsgObj[4]!"" />
84 <#assign synExclusionMsgURL = synExclusionMsgObj[5]!"" />
85 <#assign synExclusionMsgAriaLabel = synExclusionMsgObj[6]!"" />
86</#if>
87
88
89
90<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)>
91<#assign temp = []>
92<#assign consumerCards = []>
93<#assign businessCards = []>
94<#assign offerTypeList = []>
95<#assign index = 0>
96<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]>
97<#assign businessOfferTypes = ["128", "121", "143", "144"]>
98<#list fiCardsData as fib>
99 <#assign useprcaValue = fib.useprca!"">
100 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
101 <#assign offerTypeList = offerTypeList + [fib.offerType]>
102 <#if (consumerOfferTypes?seq_contains(fib.offerType))>
103 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
104 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
105 <#assign businessCards = businessCards + fiCardsData[index..index]>
106 </#if>
107 <#assign temp = temp + fiCardsData[index..index]>
108 </#if>
109 <#assign index = index + 1>
110</#list>
111
112<#assign fiCardsData = temp>
113 <script>
114 //console.log("fi card data count", ${fiCardsData?size})
115</script>
116
117<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
118<#if (clientdata?size > 0)>
119 <#assign backgroundColor = clientdata[0].backgroundHexColor>
120</#if>
121
122<#if (fiCardsData?size > 0)>
123 <style>
124 .excludeModal__overlay {
125 position: fixed;
126 top: 0;
127 left: 0;
128 right: 0;
129 bottom: 0;
130 background: rgba(0,0,0,0.6);
131 display: flex;
132 justify-content: center;
133 align-items: center;
134 }
135
136 .excludeModal__container {
137 background-color: #fff;
138 padding: 30px;
139 min-width: 500px;
140 max-width: 500px;
141 max-height: 100vh;
142 border-radius: 4px;
143 overflow-y: auto;
144 box-sizing: border-box;
145 }
146
147 .excludeModal__header {
148 display: block;
149 justify-content: space-between;
150 align-items: center;
151 }
152
153 .modal .excludeModal__container .excludeModal__title {
154 margin-top: 0;
155 margin-bottom: 0;
156 font-weight: 600;
157 font-size: 20px;
158 line-height: 1.25;
159 color: #00449e;
160 box-sizing: border-box;
161 }
162
163 .excludeModal__close {
164 background: transparent;
165 border: 1px solid white;
166 padding: 4px 8px;
167 float: right;
168 }
169
170 .excludeModal__close:hover {
171 border: 1px solid black;
172 }
173
174 .excludeModal__close:before { content: "\2715"; }
175
176 @keyframes mmfadeIn {
177 from { opacity: 0; }
178 to { opacity: 1; }
179 }
180
181 @keyframes mmfadeOut {
182 from { opacity: 1; }
183 to { opacity: 0; }
184 }
185
186 @keyframes mmslideIn {
187 from { transform: translateY(15%); }
188 to { transform: translateY(0); }
189 }
190
191 @keyframes mmslideOut {
192 from { transform: translateY(0); }
193 to { transform: translateY(-10%); }
194 }
195
196 .micromodal-slide {
197 display: none;
198 }
199
200 .micromodal-slide.is-open {
201 display: block;
202 }
203
204 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
205 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
206 }
207
208 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
209 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
210 }
211
212 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
213 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
214 }
215
216 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
217 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
218 }
219
220 .micromodal-slide .excludeModal__container,
221 .micromodal-slide .excludeModal__overlay {
222 will-change: transform;
223 }
224
225 .excludeModal__link {
226 font-size: 18px !important;
227 font-weight: bold;
228 color: #00449e !important;
229 text-decoration: underline !important;
230 }
231
232 .excludeModal__link a:hover {
233 text-decoration: underline !important;
234 }
235
236 #excludeModalDivLink {
237 margin-top: 20px
238 }
239 </style>
240 <#if url?contains("index")>
241 <#assign isExcluded = 0>
242 <#assign offerId = "">
243 <#assign sourceCode = "">
244 <#assign cardArtImage = "">
245 <#assign productUrlHero = "">
246 <#assign product = "">
247 <#assign cardIndex = 0>
248 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
249 <#if (offerTypeList?seq_contains("108")) || (offerTypeList?seq_contains("109"))>
250 <#list consumerCards as card>
251 <#if (card.offerType=="108") || (card.offerType=="109")>
252 <#assign isExcluded = 0>
253 <#if card.dmaexclude??>
254 <#assign isExcluded = card.dmaexclude?number!0>
255 </#if>
256 <#assign offerId = card.offerId>
257 <#assign sourceCode = card.sourceCode>
258 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
259 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
260
261 <#assign productUrlHero="consumer-platinum2103">
262 <#assign product="Platinum">
263 <#assign cardIndex = 1>
264 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)>
265 <#if (scrapedData?size > 0)>
266 <#list scrapedData as sItem>
267 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
268 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
269 <#break>
270 </#if>
271 </#list>
272 <script>
273 $(document).ready(function () {
274 var aprText = "${apr}";
275 //console.log('aprText: ${aprText!''}');
276 if (aprText) {
277 $(".apr-full-text").html(aprText);
278 try {
279 var matches= aprText.match(/\d+(\.\d+)?%?/g);
280 var billing_cycle = matches[1];
281 var apr_min = apr_min = matches[2];
282 var apr_max = apr_max = matches[3];
283 //console.log('billing_cycle', billing_cycle);
284 //console.log('apr_min', apr_min);
285 //console.log('apr_max', apr_max);
286 if (billing_cycle) {
287 //console.log($(".scraped-billing-cycle"));
288 $(".scraped-billing-cycle").html(billing_cycle);
289 }
290 if (apr_min) {
291 $(".scraped-apr-min").html(apr_min);
292 }
293 if (apr_max) {
294 $('.scraped-apr-max').html(apr_max);
295 }
296
297 } catch (e) {
298 console.log(e);
299 }
300 }
301 });
302 </script>
303 </#if>
304 <script>
305 $(document).ready(function () {
306 $(".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>');
307 });
308 </script>
309 </#if>
310 </#list>
311 <#else>
312 <#assign isExcluded = 0>
313 <#if consumerCards[0].dmaexclude??>
314 <#assign isExcluded = consumerCards[0].dmaexclude?number!0>
315 </#if>
316 <#assign displayedCard = consumerCards[0]>
317 <#assign offerId = displayedCard.offerId>
318 <#assign sourceCode = displayedCard.sourceCode>
319 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
320 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
321 <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")>
322 <#assign productUrlHero="consumer-platinum">
323 <#assign product="Platinum">
324 <#assign cardIndex = 1>
325 <#elseif (displayedCard.offerType=="104")>
326 <#assign productUrlHero = "max-cash">
327 <#assign product="Max Cash Preferred">
328 <#assign cardIndex = 0>
329 <#elseif (displayedCard.offerType=="115")>
330 <#assign productUrlHero = "secured">
331 <#assign product="Secured">
332 <#assign cardIndex = 2>
333 </#if>
334 </#if>
335 <#if product?has_content && product != "">
336 <#assign card_text = product + " Card">
337 </#if>
338 </#if>
339 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
340 <#if (offerTypeList?seq_contains("128")) >
341 <#list businessCards as card>
342 <#if (card.offerType=="128")>
343 <#assign isExcluded = 0>
344 <#if card.dmaexclude??>
345 <#assign isExcluded = card.dmaexclude?number!0>
346 </#if>
347 <#assign offerId = card.offerId>
348 <#assign sourceCode = card.sourceCode>
349 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
350 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
351
352 <#assign productUrlHero="business-cash-preferred">
353 <#assign product="Business Cash Preferred">
354 <#assign cardIndex = 1>
355 </#if>
356 </#list>
357 <#else>
358 <#assign isExcluded = 0>
359 <#if businessCards[0].dmaexclude??>
360 <#assign isExcluded = businessCards[0].dmaexclude?number!0>
361 </#if>
362 <#assign displayedCard = businessCards[0]>
363 <#assign offerId = displayedCard.offerId>
364 <#assign sourceCode = displayedCard.sourceCode>
365 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
366 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
367 <#if (displayedCard.offerType=="143")>
368 <#assign productUrlHero="business-real-rewards">
369 <#assign product="Business Real Rewards">
370 <#assign cardIndex = 2>
371 <#elseif (displayedCard.offerType=="144")>
372 <#assign productUrlHero="smart-business-rewards">
373 <#assign product="Smart Business Rewards">
374 <#assign cardIndex = 0>
375 <#elseif (displayedCard.offerType=="121")>
376 <#assign productUrlHero = "business-platinum">
377 <#assign product="Business">
378 <#assign cardIndex = 3>
379 </#if>
380 </#if>
381 <#if product?has_content && product != "">
382 <#assign card_text = product + " Card">
383 </#if>
384 </#if>
385 <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}">
386 <div class="hero-main">
387 <div class="hero-main-container">
388 <div class="hero-main-offer">
389 <div class="offer-detail">
390 <div class="offer-detail-cardArt cardArtImg">
391 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
392 class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
393 <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }"
394 class="jn-img-responsive">-->
395 <p>${card_text!''}</p>
396 </div>
397 <div class="offer-detail-text text-color-default hide-desktop">
398 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
399 </div>
400 <#if isExcluded == 0>
401 <#if useprcaValue == "1">
402 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer" method="post">
403 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
404 <input id='offerId' type="hidden" name="offerId" value="${offerId}">
405 <input type="hidden" name="preparerType" value="customer">
406 </form>
407 <a
408 class="jn-button hide-desktop btn"
409 data-button-name="cta-button-top"
410 data-product-name="${productUrlHero!''}"
411 href="#"
412 offerId="${offerId!''}"
413 onclick="submitForm(event)"
414 >
415 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
416 </a>
417
418
419
420 <#else>
421 <a
422 class="jn-button hide-desktop btn"
423 data-button-name="cta-button-top"
424 data-product-name="${productUrlHero!''}"
425 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
426 >
427 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
428 </a>
429 </#if>
430
431 <#else>
432 <a
433 class="jn-button hide-desktop btn"
434 data-button-name="cta-button-top"
435 data-product-name="${productUrlHero!''}"
436 data-micromodal-trigger="modal-index-hero"
437 href="javascript:void(0);"
438 >
439 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
440 </a>
441 </#if>
442 </div>
443 <div class="offer-header">
444 <div class="offer-text-top">
445 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
446 </div>
447 <div class="offer-text-bottom hide-mobile">
448 <div class="offer-detail-text text-color-default ">
449 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
450 </div>
451
452 <#if isExcluded == 0>
453 <#if useprcaValue == "1">
454 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer" method="post">
455 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
456 <input id='offerId' type="hidden" name="offerId" value="${offerId!''}">
457 <input type="hidden" name="preparerType" value="customer">
458 </form>
459 <a
460 class="jn-button"
461 data-button-name="cta-button-top"
462 data-product-name="${productUrlHero!''}"
463 href="#"
464 offerId="${offerId!''}"
465 onclick="submitForm(event)"
466 >
467 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
468 </a>
469
470 <#else>
471 <a
472 class="jn-button"
473 data-button-name="cta-button-top"
474 data-product-name="${productUrlHero!''}"
475 href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
476 >
477 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
478 </a>
479 </#if>
480 <#else>
481 <a
482 class="jn-button"
483 data-button-name="cta-button-top"
484 data-product-name="${productUrlHero!''}"
485 data-micromodal-trigger="modal-index-hero"
486 href="javascript:void(0);"
487 >
488 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
489 </a>
490 </#if>
491 </div>
492 </div>
493 </div>
494 </div>
495 </div>
496 </div>
497
498 <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" >
499 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
500 <div
501 aria-modal="true"
502 aria-labelledby="modal-index-hero-title"
503 class="excludeModal__container"
504 role="dialog"
505 >
506 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
507 <header class="excludeModal__header">
508 <div>
509 <h2 class="excludeModal__title" id="modal-index-hero-title">
510 <#if synExclusionMsg?has_content>
511 ${synExclusionMsg}
512 <#elseif productTitle.getSiblings()[cardIndex].excludedMessage?? >
513 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
514 </#if>
515 </h2>
516 </div>
517 <div id="excludeModalDivLink">
518 <#if synExclusionMsgURL?has_content>
519 <p>
520 <a href="${synExclusionMsgURL}" target="_blank" aria-label="${synExclusionMsgAriaLabel!''}" class="excludeModal__link">
521 Learn more
522 </a>
523 </p>
524 </#if>
525 </div>
526 </header>
527 </div>
528 </div>
529 </div>
530 <#else>
531 <#assign hasBalanceTransferCalculator = false>
532 <#list fiCardsData as fib>
533 <#switch fib.offerType>
534 <#case "101">
535 <#assign cardIndex = 3 >
536 <#assign productUrlHero = "consumer-edr">
537 <#assign product="Everyday Rewards+">
538 <#assign hasBalanceTransferCalculator = false>
539 <#break>
540 <#case "103">
541 <#assign cardIndex = 3 >
542 <#assign productUrlHero = "consumer-edr">
543 <#assign product="Everyday Rewards+">
544 <#assign hasBalanceTransferCalculator = false>
545 <#break>
546 <#case "104">
547 <#assign cardIndex = 0 >
548 <#assign productUrlHero="max-cash">
549 <#assign product="Max Cash Preferred">
550 <#assign hasBalanceTransferCalculator = false>
551 <#break>
552 <#case "108">
553 <#assign cardIndex = 1 >
554 <#assign productUrlHero = "consumer-platinum">
555 <#assign product="Platinum">
556 <#assign hasBalanceTransferCalculator = true>
557 <#break>
558 <#case "109">
559 <#assign cardIndex = 1 >
560 <#assign productUrlHero = "consumer-platinum">
561 <#assign product="Platinum">
562 <#assign hasBalanceTransferCalculator = true>
563 <#break>
564 <#case "141">
565 <#assign cardIndex = 4 >
566 <#assign productUrlHero = "college-real-rewards">
567 <#assign product = "College Real Rewards" >
568 <#assign hasBalanceTransferCalculator = false>
569 <#break>
570 <#case "147">
571 <#assign cardIndex = 5 >
572 <#assign productUrlHero = "max-cash-secured">
573 <#assign product = "Max Cash Secured" >
574 <#assign hasBalanceTransferCalculator = false>
575 <#break>
576 <#case "115">
577 <#assign cardIndex = 2 >
578 <#assign productUrlHero = "secured">
579 <#assign product="Secured">
580 <#assign hasBalanceTransferCalculator = false>
581 <#break>
582 <#case "138">
583 <#assign cardIndex = 6 >
584 <#assign productUrlHero = "travel-rewards-plus">
585 <#assign product="Travel Rewards+">
586 <#assign hasBalanceTransferCalculator = false>
587 <#break>
588 <#case "154">
589 <#assign cardIndex = 7 >
590 <#assign productUrlHero = "reserve-rewards-plus">
591 <#assign product="Reserve Rewards+">
592 <#assign hasBalanceTransferCalculator = false>
593 <#break>
594 <#case "128">
595 <#assign cardIndex = 1 >
596 <#assign productUrlHero = "business-cash-preferred">
597 <#assign product="Business Cash Preferred">
598 <#assign hasBalanceTransferCalculator = false>
599 <#break>
600 <#case "143">
601 <#assign cardIndex = 2 >
602 <#assign productUrlHero = "business-real-rewards">
603 <#assign product="Business Real Rewards">
604 <#assign hasBalanceTransferCalculator = false>
605 <#break>
606 <#case "144">
607 <#assign cardIndex = 0 >
608 <#assign productUrlHero = "smart-business-rewards">
609 <#assign product="Smart Business Rewards">
610 <#assign hasBalanceTransferCalculator = false>
611 <#break>
612 <#case "121">
613 <#assign cardIndex = 3 >
614 <#assign productUrlHero = "business-platinum">
615 <#assign product="Business">
616 <#assign hasBalanceTransferCalculator = false>
617 <#break>
618 <#default>
619 </#switch>
620 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
621 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">
622
623 <script>
624 console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")
625 </script>
626
627 <#if url?matches(".*/${productUrlHero}\\?.*")>
628 <#assign isExcluded = 0>
629 <script>
630 console.log("fib.dmaexclude------>"+'${fib.dmaexclude}');
631 </script>
632 <#if fib.dmaexclude??>
633 <#assign isExcluded = fib.dmaexclude?number!0>
634 </#if>
635 <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")>
636
637 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')>
638 <#if (scrapedData?size > 0)>
639 <#list scrapedData as sItem>
640 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
641 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
642 <#break>
643 </#if>
644
645 </#list>
646 <script>
647 $(document).ready(function () {
648 var aprText = "${apr}";
649 //console.log('aprText',aprText);
650 if (aprText) {
651 $(".apr-full-text").html(aprText);
652 try {
653 var matches= aprText.match(/\d+(\.\d+)?%?/g);
654 var billing_cycle = matches[1];
655 var apr_min = apr_min = matches[2];
656 var apr_max = apr_max = matches[3];
657 //console.log('billing_cycle', billing_cycle);
658 //console.log('apr_min', apr_min);
659 //console.log('apr_max', apr_max);
660 if (billing_cycle) {
661 //console.log($(".scraped-billing-cycle"));
662 $(".scraped-billing-cycle").html(billing_cycle);
663 }
664 if (apr_min) {
665 $(".scraped-apr-min").html(apr_min);
666 }
667 if (apr_max) {
668 $('.scraped-apr-max').html(apr_max);
669 }
670
671 } catch (e) {
672 console.log(e);
673 }
674 }
675 });
676 </script>
677 </#if>
678 </#if>
679 <#if product?has_content && product != "">
680 <#assign card_text = product + " Card">
681 </#if>
682 <#assign tc_offerTypes = ['108', '109', '121', '144']>
683 <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']>
684 <div class="hero-container ${class.getData()}">
685 <div class="hero-main">
686 <div class="hero-main-container">
687 <div class="hero-main-offer">
688 <div class="offer-detail">
689 <div class="offer-detail-cardArt cardArtImg">
690 <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}"
691 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive">
692 <p>${card_text!''}</p>
693 <#if (hasBalanceTransferCalculator)>
694 <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a>
695 </#if>
696 </div>
697 <div class="offer-detail-text text-color-default hide-desktop">
698 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
699
700 <#if (tc_offerTypes?seq_contains(fib.offerType))>
701 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
702 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
703 </a>
704 </#if>
705 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
706 <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>
707 </#if>
708 </div>
709
710 <#if isExcluded == 0>
711 <#if useprcaValue == "1">
712 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId!''}&preparerType=customer" method="post">
713 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
714 <input id='offerId' type="hidden" name="offerId" value="${fib.offerId!''}">
715 <input type="hidden" name="preparerType" value="customer">
716 </form>
717
718 <a
719 class="jn-button hide-desktop btn"
720 data-button-name="cta-button-top"
721 data-product-name="${productUrlHero!''}"
722 href="#"
723 offerId="${fib.offerId!''}"
724 onclick="submitForm(event)" >
725 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
726 </a>
727
728 <#else>
729 <a
730 class="jn-button hide-desktop btn"
731 data-button-name="cta-button-top"
732 data-product-name="${productUrlHero!''}"
733 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
734 >
735 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
736
737 </a>
738 </#if>
739 <#else>
740 <a
741 class="jn-button hide-desktop btn"
742 data-button-name="cta-button-top"
743 data-product-name="${productUrlHero!''}"
744 data-micromodal-trigger="modal-product-hero"
745 href="javascript:void(0);"
746 >
747 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
748 </a>
749 </#if>
750 </div>
751 <div class="offer-header">
752 <div class="offer-text-top">
753 ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}
754 </div>
755 <div class="offer-text-bottom hide-mobile">
756 <div class="offer-detail-text text-color-default ">
757 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}
758 <#if (tc_offerTypes?seq_contains(fib.offerType))>
759 <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank">
760 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
761 </a>
762 </#if>
763 </div>
764
765 <#if isExcluded == 0>
766 <#if useprcaValue == "1">
767 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer" method="post" >
768 <input id='locationCode' type="hidden" name="locationCode" value="${lc}">
769 <input id='offerId' type="hidden" name="offerId" value="${fib.offerId!''}">
770 <input type="hidden" name="preparerType" value="customer">
771 </form>
772 <a
773 class="jn-button"
774 data-button-name="cta-button-top"
775 data-product-name="${productUrlHero!''}"
776 href="#"
777 offerId="${fib.offerId!''}"
778 onclick="submitForm(event)" >
779 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
780 </a>
781
782 <#else>
783 <a
784 class="jn-button"
785 data-button-name="cta-button-top"
786 data-product-name="${productUrlHero!''}"
787 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"
788 >
789 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
790
791 </a>
792 </#if>
793 <#else>
794 <a
795 class="jn-button"
796 data-button-name="cta-button-top"
797 data-product-name="${productUrlHero!''}"
798 data-micromodal-trigger="modal-product-hero"
799 href="javascript:void(0);"
800 >
801 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Credit Card </span>
802 </a>
803 </#if>
804 <#if (calculator_offerTypes?seq_contains(fib.offerType))>
805 <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>
806 </#if>
807 </div>
808 </div>
809
810 </div>
811 </div>
812 </div>
813 </div>
814
815 <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" >
816 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
817 <div
818 aria-modal="true"
819 aria-labelledby="modal-prodcut-hero-title"
820 class="excludeModal__container"
821 role="dialog"
822 >
823 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
824 <header class="excludeModal__header">
825 <div>
826 <h2 class="excludeModal__title" id="modal-prodcut-hero-title">
827 <#if synExclusionMsg?has_content>
828 ${synExclusionMsg}
829 <#elseif productTitle.getSiblings()[cardIndex].excludedMessage?? >
830 ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
831 </#if>
832 </h2>
833 </div>
834 <div id="excludeModalDivLink">
835 <#if synExclusionMsgURL?has_content>
836 <p>
837 <a href="${synExclusionMsgURL}" target="_blank" aria-label="${synExclusionMsgAriaLabel!''}" class="excludeModal__link">
838 Learn more
839 </a>
840 </p>
841 </#if>
842 </div>
843 </header>
844 </div>
845 </div>
846 </div>
847 <#break />
848 </#if>
849 </#list>
850
851 </#if>
852</#if>
853<!-- https://micromodal.vercel.app/ -->
854<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
855
856<script>
857
858 AUI().ready(function(){
859 //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
860 var locationCodeParam = '${lc}';
861 var currentEnvironmentParam = '${currentEnvironment}';
862 if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){
863 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"})
864 }
865
866 MicroModal.init();
867 });
868</script>
869<script>
870 if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};}
871 setHeaderBackground = () => {
872 // Makes the Header subtitle work if there is two lines of text
873 //product page header
874 var consumerHeader = document.getElementsByClassName("landing-consumer")[0];
875 if(!consumerHeader) {
876 //index page header
877 consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0];
878 }
879
880 if(consumerHeader) {
881 var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0];
882 var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0];
883 const offerTextTop = consumerHeader.querySelector(".offer-text-top");
884
885 if (consumerOfferHeader.innerText.length >= 76){
886 const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px";
887 //two lines
888 //offerTextTop.style.marginTop = '0px';
889 //document.querySelector('.offer-text-bottom').style.marginTop = '25px';
890 //prevent button and text going into blue section
891 //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px";
892 consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")";
893 }
894 }
895 //product page header
896 var buisnessHeader = document.getElementsByClassName("landing-business")[0];
897 if(!buisnessHeader) {
898 //index page header
899 buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0];
900 }
901
902 if(buisnessHeader) {
903 var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0];
904 var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0];
905
906 if (buisnessOfferHeader.innerText.length >= 48){
907 //two lines
908 buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)";
909 }
910 }
911 };
912 /*
913 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.
914 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.
915 */
916 setHeaderBackground();
917 AUI().ready(function(){setHeaderBackground();});
918
919
920</script>
921<script>
922 var excluded = '${isExcluded}';
923 var useprcaValue = '${useprcaValue}';
924 var url23 ='${url}';
925 function submitForm(event) {
926 event.preventDefault();
927 var offerId = event.target.getAttribute("offerId");
928 console.log("offerId::::::::::::::"+offerId);
929
930 var lc = document.getElementById('locationCode').value;
931 //var offerId = document.getElementById('offerId').value;
932 //var sourceCode = document.getElementById('sourceCode').value;
933
934 // Construct the URL
935 var url = "${prcaURL}?locationCode=" + lc + "&offerId=" + offerId + "&preparerType=customer";
936
937
938 // Set the form action to the constructed URL
939 document.getElementById('applyForm').action = url;
940
941 // Submit the form
942 postCreditcardLearnMore(url);
943 //document.getElementById('applyForm').submit();
944 }
945 function postCreditcardLearnMore(path, method='post') {
946 // Create a form element
947 const form = document.createElement('form');
948 form.method = method;
949 //form.target = '_blank'; // Open in a new tab
950 form.action = path;
951
952 // Add each parameter as a hidden input field
953
954 document.body.appendChild(form);
955 form.submit();
956 }
957
958</script>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#155407401" at line 14, 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#155407401" at line 14, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
5<#assign environment = url?replace('/index.*','','r')>
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7<#assign prcaURL = propsUtil.get('elan.prca.url')>
8
9<script>
10var currentUrl = '${url}';
11
12</script>
13<#assign useprcaValue = "" >
14<#assign lc = qstringmap["ecdma-lc"]?first>
15<#assign lc = htmlUtil.escape(lc)>
16<#assign lc = htmlUtil.escapeJS(lc)>
17
18<#assign prefix = "00000" >
19<#assign lcWithPrefix = prefix + lc >
20<#assign withPrefixLength = lcWithPrefix?length >
21<#assign startHere = withPrefixLength - 5>
22<#assign lc = lcWithPrefix?substring(startHere)>
23
24
25<#if qstringmap["ecid"]?has_content>
26 <#assign ecidExt = qstringmap["ecid"]?first>
27 <#assign ecidExt = htmlUtil.escape(ecidExt)>
28 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
29 <#assign ecidExt = "&ecid=" + ecidExt>
30<#else>
31 <#assign ecidExt="">
32</#if>
33
34<#if oadURL?contains("uat-")>
35 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
36<#else>
37 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
38</#if>
39
40
41<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
42<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
43<#assign clientProfile = clientProfileList?first>
44<#assign partnerName = clientProfile.getMarketingNameLong()>
45<#assign pbu = clientProfile.getPbu()>
46<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
47<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
48
49<#assign synExclusionMessageService = (serviceLocator.findService("com.elan.crc.quicklink.service.SYNExclusionMessageLocalService"))! />
50<#assign synExclusionMessageData = synExclusionMessageService.getClientProfileAndSyndicatedExclusionMsg(lc) />
51<#assign synExclusionMsg = "" />
52<#assign synExclusionMsgURL = "" />
53<#assign synExclusionMsgAriaLabel = "" />
54
55<#if synExclusionMessageData?exists && synExclusionMessageData?has_content>
56 <#assign synExclusionMsgObj = synExclusionMessageData[0]>
57 <#assign synExclusionMsg = synExclusionMsgObj[4]!"" />
58 <#assign synExclusionMsgURL = synExclusionMsgObj[5]!"" />
59 <#assign synExclusionMsgAriaLabel = synExclusionMsgObj[6]!"" />
60</#if>
61
62<#if qstringmap["ecid"]?has_content>
63 <#assign ecidExt = qstringmap["ecid"]?first>
64 <#assign ecidExt = htmlUtil.escape(ecidExt)>
65 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
66 <#assign ecidExt = "&ecid=" + ecidExt>
67
68 <#assign campaignId = qstringmap["ecid"]?first >
69 <#assign campaignId = htmlUtil.escape(campaignId)>
70 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
71<#else>
72 <#assign ecidExt="">
73 <#assign campaignId = "" >
74</#if>
75
76<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu + '&' + lc)>
77<#-- filter duplicated cards-->
78<#assign consumerCards = []>
79<#assign businessCards = []>
80<#assign offerTypeList = []>
81<#assign consumerOfferTypes =['101', '104', '108', '109', '115', '141','147', '138', '154']>
82<#assign businessOfferTypes =['144', '128', '143', '121']>
83<#assign index = 0>
84<#list fiCardsData as fib>
85 <#assign useprcaValue = fib.useprca!"">
86 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
87 <#assign offerTypeList = offerTypeList + [fib.offerType]>
88 <#if consumerOfferTypes?seq_contains(fib.offerType)>
89 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
90 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
91 <#assign businessCards = businessCards + fiCardsData[index..index]>
92 </#if>
93 </#if>
94 <#assign index = index + 1>
95</#list>
96
97<#assign fultonBankpbu = "0727491">
98<#if pbu == fultonBankpbu>
99 <style>
100 #hideFultonInfo {
101 display: none;
102 }
103 </style>
104</#if>
105
106<style>
107 .excludeModal__overlay {
108 position: fixed;
109 top: 0;
110 left: 0;
111 right: 0;
112 bottom: 0;
113 background: rgba(0,0,0,0.6);
114 display: flex;
115 justify-content: center;
116 align-items: center;
117 }
118
119 .excludeModal__container {
120 background-color: #fff;
121 padding: 30px;
122 min-width: 500px;
123 max-width: 500px;
124 max-height: 100vh;
125 border-radius: 4px;
126 overflow-y: auto;
127 box-sizing: border-box;
128 }
129
130 .excludeModal__header {
131 display: block;
132 justify-content: space-between;
133 align-items: center;
134 }
135
136 .modal .excludeModal__container .excludeModal__title {
137 margin-top: 0;
138 margin-bottom: 0;
139 font-weight: 600;
140 font-size: 20px;
141 line-height: 1.25;
142 color: #00449e;
143 box-sizing: border-box;
144 }
145
146 .excludeModal__close {
147 background: transparent;
148 border: 1px solid white;
149 padding: 4px 8px;
150 float: right;
151 }
152
153 .excludeModal__close:hover {
154 border: 1px solid black;
155 }
156
157 .excludeModal__close:before { content: "\2715"; }
158
159 @keyframes mmfadeIn {
160 from { opacity: 0; }
161 to { opacity: 1; }
162 }
163
164 @keyframes mmfadeOut {
165 from { opacity: 1; }
166 to { opacity: 0; }
167 }
168
169 @keyframes mmslideIn {
170 from { transform: translateY(15%); }
171 to { transform: translateY(0); }
172 }
173
174 @keyframes mmslideOut {
175 from { transform: translateY(0); }
176 to { transform: translateY(-10%); }
177 }
178
179 .micromodal-slide {
180 display: none;
181 }
182
183 .micromodal-slide.is-open {
184 display: block;
185 }
186
187 .micromodal-slide[aria-hidden="false"] .excludeModal__overlay {
188 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
189 }
190
191 .micromodal-slide[aria-hidden="false"] .excludeModal__container {
192 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
193 }
194
195 .micromodal-slide[aria-hidden="true"] .excludeModal__overlay {
196 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
197 }
198
199 .micromodal-slide[aria-hidden="true"] .excludeModal__container {
200 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
201 }
202
203 .micromodal-slide .excludeModal__container,
204 .micromodal-slide .excludeModal__overlay {
205 will-change: transform;
206 }
207
208 .excludeModal__link {
209 font-size: 18px !important;
210 font-weight: bold;
211 color: #00449e !important;
212 text-decoration: underline !important;
213 }
214
215 .excludeModal__link a:hover {
216 text-decoration: underline !important;
217 }
218
219 #excludeModalDivLink {
220 margin-top: 20px;
221 }
222</style>
223
224<#if ((consumerCards?size > 0) || (businessCards?size > 0))>
225 <div class="content-container content-container-main jn-consumer-content">
226 <#if ((consumerCards?size > 0) && (businessCards?size > 0))>
227 <nav class="jn-primary-nav two-tabs">
228 <ul>
229 <li title="${partnerName!''} - Personal products">
230 <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a>
231 </li>
232 <li title="${partnerName!''} - Business products">
233 <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a>
234 </li>
235 </ul>
236 </nav>
237 <#else>
238 <#if (consumerCards?size > 0)>
239 <nav class="jn-primary-nav" title="${partnerName!''} - Personal products">
240 <ul>
241 <li>
242 <p class="tab-nav" id="consumerTab"><span>Personal</span></p>
243 </li>
244 </ul>
245 </nav>
246 </#if>
247 <#if (businessCards?size > 0)>
248 <nav class="jn-primary-nav" title="${partnerName!''} - Business products">
249 <ul>
250 <li>
251 <p class="tab-nav" id="businessTab"><span>Business</span></p>
252 </li>
253 </ul>
254 </nav>
255 </#if>
256 </#if>
257 <#if (consumerCards?size > 0)>
258 <div class="tab-more-wrapper">
259 <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products">
260
261 <#list consumerCards as fib>
262 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" >
263 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg" >
264 <#assign hasBalanceTransferCalculator = false>
265 <#switch fib.offerType>
266 <#case "101">
267 <#assign productName = "consumer-edr">
268 <#assign productUrl = "202302/consumer-edr">
269 <#assign product="Everyday Rewards+">
270 <#assign cardIndex = 0>
271 <#break>
272 <#case "108">
273 <#assign productName = "consumer-platinum">
274 <#assign productUrl = "202308/consumer-platinum">
275 <#assign product="Platinum">
276 <#assign cardIndex = 2>
277 <#assign hasBalanceTransferCalculator = true>
278 <#break>
279 <#case "109">
280 <#assign productName = "consumer-platinum">
281 <#assign productUrl = "202308/consumer-platinum">
282 <#assign product="Platinum">
283 <#assign cardIndex = 2>
284 <#assign hasBalanceTransferCalculator = true>
285 <#break>
286 <#case "115">
287 <#assign productName = "secured">
288 <#assign productUrl = "secured">
289 <#assign product="Secured">
290 <#assign cardIndex = 5>
291 <#break>
292 <#case "104">
293 <#assign productName = "max-cash">
294 <#assign productUrl = "max-cash">
295 <#assign product="Max Cash Preferred">
296 <#assign cardIndex = 1>
297 <#break>
298 <#case "147">
299 <#assign productName = "max-cash-secured">
300 <#assign productUrl = "max-cash-secured">
301 <#assign product="Max Cash Secured">
302 <#assign cardIndex = 4>
303 <#break>
304 <#case "141">
305 <#assign productName = "college-real-rewards">
306 <#assign productUrl = "college-real-rewards">
307 <#assign product="College Real Rewards">
308 <#assign cardIndex = 3>
309 <#break>
310 <#case "138">
311 <#assign productName = "travel-rewards-plus">
312 <#assign productUrl = "202305/travel-rewards-plus">
313 <#assign product="Travel Rewards+">
314 <#assign cardIndex = 10>
315 <#break>
316 <#case "154">
317 <#assign productName = "reserve-rewards-plus">
318 <#assign productUrl = "202305/reserve-rewards-plus">
319 <#assign product="Reserve Rewards+">
320 <#assign cardIndex = 11>
321 <#break>
322 <#default>
323 </#switch>
324 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
325 <#assign titleText = titleText?replace('<[^>]+>','','r')>
326 <#assign newTag = "">
327 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
328 <#assign newTag = "with-new-tag">
329 </#if>
330 <#assign APR="">
331 <#assign AMF="">
332 <#assign BAL="">
333 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)>
334 <#if (scrapedData?size > 0)>
335 <#list scrapedData as sItem>
336 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
337 <#assign APR = sItem.scrapedValue>
338 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
339 <#assign AMF = sItem.scrapedValue>
340 <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) >
341 <#assign BAL = sItem.scrapedValue>
342 </#if>
343 <#if (APR?has_content && AMF?has_content && BAL?has_content)>
344 <#break>
345 </#if>
346 </#list>
347 </#if>
348 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card">
349 <div class="tag-container">
350 <div class="tag-corner">
351 <div class="tag-label">NEW</div>
352 </div>
353 </div>
354 <div class="consumer-card-heading hide-desktop">
355 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
356 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
357 </div>
358 <div class="jn-consumer-card-image">
359 <img src="${cardArtImage!''}" alt="${partnerName!''} ${product!''} Card" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
360 <#assign calculatorConsumerOfferTypes = ["101", "103", "104", "138", "154"] >
361 <#if (calculatorConsumerOfferTypes?seq_contains(fib.offerType))>
362 <a class="reward-calculator-link" target="_blank" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' class="whiteLink" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a>
363 </#if>
364 <#if consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content>
365 <p class="tier3-tabs-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
366 </#if>
367 <#if (hasBalanceTransferCalculator)>
368 <a style="display: block; text-align: center; max-width: 285px; margin: auto;" href="javascript:void(0);" data-micromodal-trigger="modal-2">See how much you could save with a balance transfer</a>
369 </#if>
370 </div>
371
372 <div class="jn-consumer-card-info">
373 <div class="consumer-card-heading hide-mobile">
374 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
375 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
376 </div>
377 <div class="jn-additional">
378 <ul class="${fib.offerType}">
379 <li>
380 <p>
381 <#if (fib.offerType == "104")>
382 <strong>APR for Purchases: </strong>
383 <#elseif (fib.offerType == "101" ||
384 fib.offerType == "108" ||
385 fib.offerType == "109" ||
386 fib.offerType == "141"
387 )>
388 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
389 <#else>
390 <strong>APR for Purchases and Balance Transfers: </strong>
391 </#if>
392 ${APR!''}
393 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link">
394 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.
395 </a>
396 </p>
397 </li>
398 <#if (fib.offerType == "104")>
399 <li class="${fib.offerType}">
400 <p>
401 <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong>
402 ${BAL!''}
403 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link">
404 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.
405 </a>
406 </p>
407 </li>
408 </#if>
409
410 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
411 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
412 <li>${marketingInfo.getData()}</li>
413 </#list>
414 </#if>
415 <li>
416 <p>Annual Fee: ${AMF!''}
417 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link">
418 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.
419 </a>
420 </p>
421 </li>
422 </ul>
423 </div>
424 <ul class="actions">
425 <li>
426 <#assign isExcluded = 0>
427 <#if fib.dmaexclude??>
428 <#assign isExcluded = fib.dmaexclude?number!0>
429 </#if>
430 <#if isExcluded == 0>
431 <#if useprcaValue == "1">
432 <a
433 class="applyNowLink"
434 data-button-name="apply-now-link"
435 data-product-name="${productName!''}"
436 href="#"
437 offerId="${fib.offerId}"
438 onclick="submitForm(event)"
439 >
440 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
441 </a>
442 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer" method="post">
443 <input type="hidden" name="locationCode" value="${lc}" id="locationCode">
444 <input type="hidden" name="offerId" value="${fib.offerId}" id="offerId">
445 <input type="hidden" name="preparerType" value="customer">
446 </form>
447 <#else>
448 <a
449 class="applyNowLink"
450 data-button-name="apply-now-link"
451 data-product-name="${productName!''}"
452 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
453 >
454 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
455 </a>
456 </#if>
457 <#else>
458 <a
459 class="applyNowLink"
460 data-button-name="apply-now-link"
461 data-product-name="${productName!''}"
462 data-micromodal-trigger="modal-consumer-tabs-${fib.offerType}"
463 href="javascript:void(0);"
464 >
465 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
466 </a>
467
468 </#if>
469 </li>
470 <li><a href="${environment}/${productUrl}?ecdma-lc=${lc}${ecidExt}">${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span></a>
471 </li>
472 </ul>
473 </div>
474 </div>
475 </#list>
476 </div>
477 </div>
478 </#if>
479 <#if (businessCards?size > 0)>
480 <div class="tab-more-wrapper">
481 <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products">
482
483 <#list businessCards as fib>
484 <#assign cardArtImage = cdnCardArtUrl + "/"+fib.filename+".png">
485 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
486 <#switch fib.offerType>
487 <#case "128">
488 <#assign productName = "business-cash-preferred">
489 <#assign productUrl = "business-cash-preferred">
490 <#assign product="Business Cash Preferred">
491 <#assign cardIndex = 6>
492 <#break>
493 <#case "121">
494 <#assign productName = "business-platinum">
495 <#assign productUrl = "202208/business-platinum">
496 <#assign product="Business Card">
497 <#assign cardIndex = 7>
498 <#break>
499 <#case "144">
500 <#assign productName = "smart-business-rewards">
501 <#assign productUrl = "smart-business-rewards">
502 <#assign product="Smart Business Rewards">
503 <#assign cardIndex = 8>
504 <#break>
505 <#case "143">
506 <#assign productName = "business-real-rewards">
507 <#assign productUrl = "business-real-rewards">
508 <#assign product="Business Real Rewards">
509 <#assign cardIndex = 9>
510 <#break>
511
512 <#default>
513 </#switch>
514 <#assign newTag = "">
515 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
516 <#assign newTag = "with-new-tag">
517 </#if>
518
519 <#assign APR="">
520 <#assign AMF="">
521 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)>
522 <#if (scrapedData?size > 0)>
523 <#list scrapedData as sItem>
524 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
525 <#assign APR = sItem.scrapedValue>
526 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
527 <#assign AMF = sItem.scrapedValue>
528 </#if>
529 <#if (APR?has_content && AMF?has_content)>
530 <#break>
531 </#if>
532 </#list>
533 </#if>
534
535 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card">
536 <div class="tag-container">
537 <div class="tag-corner">
538 <div class="tag-label">NEW</div>
539 </div>
540 </div>
541 <div class="consumer-card-heading hide-desktop">
542 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
543 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
544 </div>
545 <div class="jn-consumer-card-image">
546
547 <img
548 src="${cardArtImage!''}"
549 alt="${partnerName!''} ${product!''} Card"
550 class="jn-img-responsive"
551 onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"
552 >
553 <#assign calculatorBizOfferTypes = ["144", "143", "128"] >
554 <#if (calculatorBizOfferTypes?seq_contains(fib.offerType))>
555 <a class="reward-calculator-link" target="_blank" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' class="whiteLink" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a>
556 </#if>
557 <#if consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content>
558 <p class="tier3-tabs-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
559 </#if>
560 </div>
561 <div class="jn-consumer-card-info">
562 <div class="consumer-card-heading hide-mobile">
563 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
564 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
565 </div>
566 <div class="jn-additional">
567 <ul class="${fib.offerType}">
568 <li>
569 <p>
570 <#if (fib.offerType == "144")>
571 <strong>APR for Purchases and Balance Transfers: </strong>
572 <#else>
573 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
574 </#if>
575 ${APR!''}
576 <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.</a>
577 </p>
578 </li>
579
580 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
581 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
582 <li>${marketingInfo.getData()}</li>
583 </#list>
584 </#if>
585 <li><p>Annual Fee: ${AMF!''} <a
586 href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}" target="_blank" class="t_c_link"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions.</a></p>
587 </li>
588 </ul>
589 </div>
590 <ul class="actions">
591 <li>
592 <#assign isExcluded = 0>
593 <#if fib.dmaexclude??>
594 <#assign isExcluded = fib.dmaexclude?number!0>
595 </#if>
596 <#if isExcluded == 0>
597 <#if useprcaValue == "1">
598 <a
599 class="applyNowLink"
600 data-button-name="apply-now-link"
601 data-product-name="${productName!''}"
602 href="#"
603 offerId="${fib.offerId}"
604 onclick="submitForm(event)"
605 >
606 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
607 </a>
608 <form id="applyForm" action="${prcaURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer" method="post">
609 <input type="hidden" name="locationCode" value="${lc}" id="locationCode">
610 <input type="hidden" name="offerId" value="${fib.offerId}" id="offerId">
611 <input type="hidden" name="preparerType" value="customer">
612 </form>
613 <#else>
614 <a
615 href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer"
616 class="applyNowLink"
617 data-button-name="apply-now-link"
618 data-product-name="${productName!''}"
619 >
620 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
621 </a>
622 </#if>
623 <#else>
624 <a
625 class="applyNowLink"
626 data-button-name="apply-now-link"
627 data-product-name="${productName!''}"
628 data-micromodal-trigger="modal-business-tabs-${fib.offerType}"
629 href="javascript:void(0);"
630 >
631 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only">for ${partnerName!''} ${product!''} Card </span>
632 </a>
633
634 </#if>
635 </li>
636 <li><a href="${environment}/${productUrl}?ecdma-lc=${lc}${ecidExt}">${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span></a></li>
637 </ul>
638 </div>
639 </div>
640
641 </#list>
642 </div>
643 </div>
644 </#if>
645 </div>
646
647 <#if (consumerCards?size > 0)>
648 <#list consumerCards as fib>
649 <#assign isExcluded = 0>
650 <#if fib.dmaexclude??>
651 <#assign isExcluded = fib.dmaexclude?number!0>
652 </#if>
653 <#if isExcluded == 1>
654 <div aria-hidden="true" class="modal micromodal-slide" id="modal-consumer-tabs-${fib.offerType}" >
655 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1" >
656 <div
657 aria-modal="true"
658 aria-labelledby="modal-consumer-tabs-title-${fib.offerType}"
659 class="excludeModal__container"
660 role="dialog"
661 >
662 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
663 <header class="excludeModal__header">
664 <div>
665 <h2 class="excludeModal__title" id="modal-consumer-tabs-title-${fib.offerType}">
666 <#if synExclusionMsg?has_content>
667 ${synExclusionMsg}
668 <#elseif consumerTitle.getSiblings()[cardIndex].excludedMessage?? >
669 ${consumerTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
670 </#if>
671 </h2>
672 </div>
673 <div id="excludeModalDivLink">
674 <#if synExclusionMsgURL?has_content>
675 <p>
676 <a href="${synExclusionMsgURL}" target="_blank" aria-label="${synExclusionMsgAriaLabel!''}" class="excludeModal__link">
677 Learn more
678 </a>
679 </p>
680 </#if>
681 </div>
682 </header>
683 </div>
684 </div>
685 </div>
686 </#if>
687 </#list>
688 </#if>
689
690 <#if (businessCards?size > 0)>
691 <#list businessCards as fib>
692 <#assign isExcluded = 0>
693 <#if fib.dmaexclude??>
694 <#assign isExcluded = fib.dmaexclude?number!0>
695 </#if>
696 <#if isExcluded == 1>
697 <div aria-hidden="true" class="modal micromodal-slide" id="modal-business-tabs-${fib.offerType}" >
698 <div class="excludeModal__overlay" data-micromodal-close tabindex="-1">
699 <div
700 aria-modal="true"
701 aria-labelledby="modal-business-tabs-title-${fib.offerType}"
702 class="excludeModal__container"
703 role="dialog"
704 >
705 <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button>
706 <header class="excludeModal__header">
707 <div>
708 <h2 class="excludeModal__title" id="modal-business-tabs-title-${fib.offerType}">
709 <#if synExclusionMsg?has_content>
710 ${synExclusionMsg}
711 <#elseif consumerTitle.getSiblings()[cardIndex].excludedMessage?? >
712 ${consumerTitle.getSiblings()[cardIndex].excludedMessage.getData()!""}
713 </#if>
714 </h2>
715 </div>
716 <div id="excludeModalDivLink">
717 <#if synExclusionMsgURL?has_content>
718 <p>
719 <a href="${synExclusionMsgURL}" target="_blank" aria-label="${synExclusionMsgAriaLabel!''}" class="excludeModal__link">
720 Learn more
721 </a>
722 </p>
723 </#if>
724 </div>
725 </header>
726 </div>
727 </div>
728 </div>
729 </#if>
730 </#list>
731 </#if>
732
733 <!-- https://micromodal.vercel.app/ -->
734 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
735
736 <script>
737 function submitForm(event) {
738 event.preventDefault();
739 var offerId = event.target.getAttribute("offerId");
740 console.log("offerId::::::::::::::"+offerId);
741 var lc = document.getElementById('locationCode').value;
742 // var offerId = document.getElementById('offerId').value;
743
744 // Construct the URL
745 var url = "${prcaURL}?locationCode=" + lc + "&offerId=" + offerId + "&preparerType=customer";
746
747 // Set the form action to the constructed URL
748 document.getElementById('applyForm').action = url;
749
750
751 postCreditcardLearnMore(url);
752 //document.getElementById('applyForm').submit();
753 }
754
755 function postCreditcardLearnMore(path, method='post') {
756 // Create a form element
757 const form = document.createElement('form');
758 form.method = method;
759 //form.target = '_blank'; // Open in a new tab
760 form.action = path;
761
762 // Add each parameter as a hidden input field
763
764 document.body.appendChild(form);
765 form.submit();
766 }
767
768 AUI().ready(function() {
769 var tabs=$('.tab-nav');
770 var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]';
771 var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]';
772 var screenWidthMobile = 768;
773 var screenWidth = window.innerWidth;
774 var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img');
775 for (var index = 0; index < heroCardImgs.length; index++) {
776 var heroCardImg = heroCardImgs[index];
777 var heroCardSrc = heroCardImg.getAttribute("src");
778 if(heroCardSrc != "") {
779 resizeImg(heroCardImg);
780 }
781 }
782
783 if (tabs.length == 1) {
784 $(tabs).parent().css('margin', '0');
785 if ($(consumerSelector).length > 0) {
786 hideHeroAndDisclaimer('business');
787 showHeroAndDisclaimer('consumer');
788 changeCardLayout(consumerSelector);
789 renumberFootnote("consumer");
790 createMetaTag("consumer");
791 }
792 if ($(businessSelector).length > 0) {
793 $(businessSelector).addClass('active');
794 hideHeroAndDisclaimer('consumer');
795 showHeroAndDisclaimer('business');
796 changeCardLayout(businessSelector);
797 renumberFootnote("business");
798 createMetaTag("business");
799 }
800 }
801 if (tabs.length == 2) {
802 renumberFootnote("consumer");
803 renumberFootnote("business");
804 createMetaTag("consumer");
805
806 if ($(consumerSelector + ' .jn-consumer-item').length < 3) {
807 changeCardLayout(consumerSelector);
808 }
809 if ($(businessSelector + ' .jn-consumer-item').length < 3) {
810 changeCardLayout(businessSelector);
811 }
812
813 var tabsNav = document.querySelectorAll('.tab-nav');
814 togglePrimaryNav(tabsNav);
815
816 if(window.location.href.indexOf('#business') > -1 ) {
817 $(consumerSelector).removeClass('active');
818 $(businessSelector).addClass('active');
819 $('#consumerTab').removeClass('active');
820 $('#businessTab').addClass('active');
821 hideHeroAndDisclaimer('consumer');
822 showHeroAndDisclaimer('business');
823 changeCardLayout(businessSelector);
824 renumberFootnote("business");
825 createMetaTag("business");
826
827 $(tabs).click(function(){
828 if ($(this).attr('id') === "consumerTab") {
829 var newUrl = window.location.toString();
830 window.location = newUrl.replace(/#business/, '#consumer');
831 }
832 if ($(this).attr('id') === "businessTab") {
833 var url = window.location.toString();
834 window.location = url.replace(/#consumer/, '#business');
835 }
836 });
837 }
838
839 }
840 });
841
842 // Primary Nav function
843 function togglePrimaryNav(elem) {
844 for (var i = 0; i < elem.length; i++) {
845 elem[i].addEventListener("click", function(e) {
846
847 var current = this,
848 allSections = document.querySelectorAll('[data-id]'),
849 section = document.querySelector("[data-id='"+ current.id +"']");
850
851 for (var a = 0; a < allSections.length; a++) {
852 allSections[a].classList.remove('active');
853 }
854 for (var c = 0; c < elem.length; c++) {
855 if (current != elem[c]) {
856 elem[c].classList.remove('active');
857 } else {
858 current.classList.add('active');
859 section.classList.add('active');
860 hideHeroAndDisclaimer('consumer');
861 hideHeroAndDisclaimer('business');
862 if(current.getAttribute('id') === "consumerTab"){
863 showHeroAndDisclaimer('consumer');
864 } else if(current.getAttribute('id') === "businessTab"){
865 showHeroAndDisclaimer('business');
866 }
867 }
868 }
869 e.preventDefault();
870 });
871 }
872 }
873
874 function renumberFootnote(type) {
875 var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]';
876 var disclaimerSelector = '.tier3-disclaimer-landing-' + type;
877 var heroSelector = '.tier3-hero-landing-' + type;
878 var numOfFootnote = $(disclaimerSelector + ' sup').length;
879 var showList = [];
880 var hideList=[];
881 for (var i = 1; i <= numOfFootnote; i++) {
882 var cssClass="tag-" + i;
883 if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) {
884 showList.push(i);
885 } else {
886 hideList.push(i);
887 }
888 }
889 /*
890 for (var i = 1; i < showList.length + 1; i++) {
891 if(showList[i-1] != i) {
892 var className="tag-" + showList[i-1];
893
894 //$(heroSelector).find("." + className).html(i);
895 // $(discriptionSelector).find("." + className).html(i);
896 //$(disclaimerSelector).find("." + className).html(i);
897 }
898 }
899 */
900 for (var i = 0; i <hideList.length; i++) {
901 var cname="tag-" + hideList[i];
902 $(disclaimerSelector).find("." + cname).parent().hide();
903 }
904 }
905
906 function changeCardLayout(cssSelector) {
907 var numOfCards = $(cssSelector + ' .jn-consumer-item').length;
908 if(numOfCards == 1) {
909 $(cssSelector).addClass('one-card');
910 } else if (numOfCards == 2) {
911 $(cssSelector).addClass('two-card');
912 }
913 }
914
915 function hideHeroAndDisclaimer(type) {
916 try {
917 document.querySelector('.tier3-hero-landing-'+ type).classList.remove('show');
918 document.querySelector('.tier3-hero-landing-'+ type).classList.add('hide');
919 } catch (e) {
920 console.log(e);
921 }
922
923 try {
924 document.querySelector('.tier3-disclaimer-landing-'+ type).classList.remove('show');
925 document.querySelector('.tier3-disclaimer-landing-'+ type).classList.add('hide');
926 } catch (e) {
927 console.log(e);
928 }
929
930 }
931
932 function showHeroAndDisclaimer(type) {
933 try {
934 document.querySelector('.tier3-hero-landing-'+ type).classList.add('show');
935 document.querySelector('.tier3-hero-landing-'+ type).classList.remove('hide');
936 } catch (e) {
937 console.log(e);
938 }
939
940 try {
941 document.querySelector('.tier3-disclaimer-landing-'+ type).classList.add('show');
942 document.querySelector('.tier3-disclaimer-landing-'+ type).classList.remove('hide');
943 } catch (e) {
944 console.log(e);
945 }
946
947 }
948
949 function createMetaTag(type) {
950 var partnerName = "${partnerName!0}";
951 var product_name = $('.jn-hero-container .jn-button').data('product-name');
952 var metaDesc ="";
953 if (type == "consumer") {
954 if(product_name == "consumer-platinum") {
955 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.";
956 } else if(product_name == "real-rewards") {
957 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase.";
958 } else if(product_name == "secured") {
959 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
960 } else if(product_name == "max-cash") {
961 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus.";
962 } else if(product_name == "max-cash-secured") {
963 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn more on the categories you pick.";
964 } else if(product_name == "travel-rewards-plus") {
965 metaDesc = "Apply Today for a "+partnerName+" Credit Card.";
966 } else if(product_name == "reserve-rewards-plus") {
967 metaDesc = "Apply Today for a "+partnerName+" Credit Card.";
968 }
969
970 } else if (type == "business") {
971 if(product_name == "business-cashback") {
972 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
973 } else if(product_name == "business-real-rewards") {
974 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on.";
975 } else if(product_name == "business-platinum") {
976 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
977 } else if(product_name == "smart-business-rewards") {
978 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.";
979 }
980 }
981 var m = document.createElement('meta');
982 m.name = 'description';
983 m.content = metaDesc;
984 document.head.appendChild(m);
985 }
986
987 function resizeImg(img) {
988 img.addEventListener("load", function() {
989 var cardImgWidth = img.width;
990 var cardImgHeight = img.height;
991 if(cardImgWidth > cardImgHeight) {
992 img.style.width = "285px";
993 } else {
994 img.style.width = "150px";
995 }
996 });
997 }
998
999 AUI().ready(function() {
1000 MicroModal.init();
1001 });
1002
1003 </script>
1004</#if>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417682" 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#153417682" at line 5, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4
5<#assign lc = qstringmap["ecdma-lc"]?first>
6<#assign lc = htmlUtil.escape(lc)>
7<#assign lc = htmlUtil.escapeJS(lc)>
8
9<#assign prefix = "00000" >
10<#assign lcWithPrefix = prefix + lc >
11<#assign withPrefixLength = lcWithPrefix?length >
12<#assign startHere = withPrefixLength - 5>
13<#assign lc = lcWithPrefix?substring(startHere)>
14<#if lc?has_content>
15
16 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
17 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
18 <#assign clientProfile = clientProfileList?first>
19 <#assign partnerName = clientProfile.getMarketingNameLong()>
20
21 <#assign pbu = clientProfile.getPbu()>
22 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
23
24 <#assign fultonBankpbu = "0727491">
25 <#if pbu == fultonBankpbu>
26 <style>
27 #hideFultonInfo {
28 display: none;
29 }
30 </style>
31 </#if>
32
33 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
34 <#if (fiCardsData?size > 0) >
35 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
36
37 <#if (cardProvider?size > 0)>
38 <#-- This will be V for visa or M for mastercard. -->
39 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
40 <#else>
41 <script>
42 console.log("No card provider(Visa/Master Card) found for disclaimer");
43 </script>
44 </#if>
45
46 <div class="jn-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer">
47 <div class="disclaimer">
48 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerBank.getData()?has_content>
49 ${disclaimerBank.getData()}
50 <#else>
51 <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))>
52 ${disclaimersVisa.getData()}
53 </#if>
54 <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) >
55 ${disclaimersMasterCard.getData()}
56 </#if>
57 </#if>
58 </div>
59 </div>
60 <#else>
61 <script>
62 console.log("card data empty");
63 </script>
64 </#if>
65<#else>
66 <script>
67 console.log("No lc for disclaimer");
68 </script>
69</#if>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> qstringmap["ecdma-lc"] [in template "10154#10192#153417682" 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#153417682" at line 5, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4
5<#assign lc = qstringmap["ecdma-lc"]?first>
6<#assign lc = htmlUtil.escape(lc)>
7<#assign lc = htmlUtil.escapeJS(lc)>
8
9<#assign prefix = "00000" >
10<#assign lcWithPrefix = prefix + lc >
11<#assign withPrefixLength = lcWithPrefix?length >
12<#assign startHere = withPrefixLength - 5>
13<#assign lc = lcWithPrefix?substring(startHere)>
14<#if lc?has_content>
15
16 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
17 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
18 <#assign clientProfile = clientProfileList?first>
19 <#assign partnerName = clientProfile.getMarketingNameLong()>
20
21 <#assign pbu = clientProfile.getPbu()>
22 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
23
24 <#assign fultonBankpbu = "0727491">
25 <#if pbu == fultonBankpbu>
26 <style>
27 #hideFultonInfo {
28 display: none;
29 }
30 </style>
31 </#if>
32
33 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
34 <#if (fiCardsData?size > 0) >
35 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
36
37 <#if (cardProvider?size > 0)>
38 <#-- This will be V for visa or M for mastercard. -->
39 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
40 <#else>
41 <script>
42 console.log("No card provider(Visa/Master Card) found for disclaimer");
43 </script>
44 </#if>
45
46 <div class="jn-disclaimer tier3-disclaimer-${class.getData()}" title="${partnerName!''} - Disclaimer">
47 <div class="disclaimer">
48 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerBank.getData()?has_content>
49 ${disclaimerBank.getData()}
50 <#else>
51 <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))>
52 ${disclaimersVisa.getData()}
53 </#if>
54 <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) >
55 ${disclaimersMasterCard.getData()}
56 </#if>
57 </#if>
58 </div>
59 </div>
60 <#else>
61 <script>
62 console.log("card data empty");
63 </script>
64 </#if>
65<#else>
66 <script>
67 console.log("No lc for disclaimer");
68 </script>
69</#if>
Er trad een fout op tijdens de verwerking van de sjabloon.
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 -->