处理模板时发生错误。
The following has evaluated to null or missing: ==> bankercode [in template "10153#10191#6524591" at line 42, column 6] ---- 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: #if bankercode?starts_with("amp") && ... [in template "10153#10191#6524591" at line 42, column 1] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url404 = '/error/404.html' >
3<#assign oadURL = propsUtil.get('elan.oad.url') >
4<#assign url = themeDisplay.getURLCurrent() >
5<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
6
7<#if qstringmap["ecid"]?has_content>
8 <#assign ecidExt="&ecid="+qstringmap["ecid"]?first>
9<#else>
10 <#assign ecidExt="">
11</#if>
12
13<#if qstringmap["bankercode"]?has_content>
14 <#assign bankercode= qstringmap["bankercode"]?first>
15
16 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedApp','0&'+bankercode)>
17 <#if fiData?first?has_content>
18 <#assign fi = fiData?first>
19 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14"))>
20 <#assign subbu_special = fi.offerId>
21 </#if>
22 </#if>
23
24 <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bankercode)>
25 <#list bData as b>
26 <#assign rLC = b.reallocationcode >
27 <#assign lc = b.locationcode >
28 <#assign mappedLC = b.mappedLocationCode >
29 </#list>
30<#else>
31 <script>
32 console.log("MainProductBcode missing");
33 //location.href = '${url404}';
34 </script>
35</#if>
36
37<#if url?contains('11t1')>
38 <#assign tier = '11t1'>
39<#elseif url?contains('11t2')>
40 <#assign tier = '11t2'>
41</#if>
42<#if bankercode?starts_with("amp") && (url?contains("11t1m"))>
43 <#assign ameriprise = true>
44<#else>
45 <#assign ameriprise = false>
46</#if>
47<#if ameriprise>
48 <#assign tier = '11t1m'>
49</#if>
50<#assign environment = url?replace('/${tier}.*','','r')>
51
52
53<#if mappedLC?has_content && !ameriprise>
54 <#assign lc = mappedLC >
55</#if>
56
57<#if lc?has_content>
58 <#assign prefix = "00000" >
59 <#assign lcWithPrefix = prefix + lc >
60 <#assign withPrefixLength = lcWithPrefix?length >
61 <#assign startHere = withPrefixLength - 5>
62 <#assign lc = lcWithPrefix?substring(startHere)>
63 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
64 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
65
66 <#assign clientProfile = clientProfileList?first>
67 <#assign partnerName = clientProfile.getMarketingNameLong()>
68 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
69 <#assign cdnLogoUrl = propsUtil.get('rackspace.cdn.web.url')>
70 <#assign pbu = clientProfile.getPbu()>
71 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
72 <script>
73 console.log('pbu', '${pbu!''}');
74 console.log('subbu', '${subbu!''}');
75 </script>
76 <#assign optoutData = utilServ.makeCall('crc_DDCSAAOptOut',pbu+'&'+subbu)>
77 <#if (optoutData?size == 0)>
78 <#if (subbu_special?has_content)>
79 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
80 <script>
81 console.log('new subbu', '${subbu_special!''}');
82 </script>
83 <#else>
84 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
85 </#if>
86
87 <#if (fiCardsData?size > 0)>
88 <#assign temp = []>
89 <#assign offerTypeList = []>
90 <#assign index = 0>
91 <#list fiCardsData as fib>
92 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
93 <#assign offerTypeList = offerTypeList + [fib.offerType]>
94 <#assign temp = temp + fiCardsData[index..index]>
95 </#if>
96 <#assign index = index + 1>
97 </#list>
98 <#assign fiCardsData = temp>
99 <#if !(fiCardsData?size > 0)>
100 <script>
101 console.log("empty card/offerType List");
102 //location.href = '${url404}';
103 </script>
104 </#if>
105 <#if ameriprise>
106 <#assign lc_used = mappedLC>
107 <#else>
108 <#assign lc_used = lc>
109 </#if>
110 <div class="content-container content-container-main" title="${partnerName!''}">
111 <header class="jn-header">
112 <div>
113 <a href="${environment}/${tier}/index?bankercode=${bankercode}&ecdma-lc=${lc_used}${ecidExt}"><< Back to Overview</a>
114 </div>
115 <div>
116 <#if url?contains("11t2")>
117 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''}">
118 </#if>
119 <div class="styled-select slate">
120 <select>
121 <#list fiCardsData as fib>
122 <#if ameriprise>
123 <#if (fib.offerType=="101")>
124 <#assign productURL="premier-visa-signature">
125 <#assign productName="Ameriprise Premier Visa Signature">
126 <#elseif (fib.offerType=="103")>
127 <#assign productURL = "visa-signature">
128 <#assign productName = "Ameriprise Visa Signature">
129 </#if>
130 <#else>
131 <#if (fib.offerType=="108" || fib.offerType=="109")>
132 <#assign productURL="consumer-platinum2103">
133 <#assign productName="Platinum Card">
134 <#elseif (fib.offerType=="104")>
135 <#assign productURL = "max-cash">
136 <#assign productName = "Max Cash Preferred Card">
137 <#elseif (fib.offerType=="101" || fib.offerType=="103")>
138 <#assign productURL = "real-rewards">
139 <#assign productName = "Real Rewards Card">
140 <#elseif fib.offerType == "115">
141 <#assign productURL = "secured">
142 <#assign productName = "Secured Card" >
143 <#elseif fib.offerType == "144">
144 <#assign productURL = "smart-business-rewards">
145 <#assign productName = "Smart Business Rewards Card" >
146 <#elseif fib.offerType == "128">
147 <#assign productURL = "business-cashback">
148 <#assign productName = "Business Cash Card" >
149 <#elseif fib.offerType == "143">
150 <#assign productURL = "business-real-rewards">
151 <#assign productName = "Business Real Rewards Card" >
152 <#elseif fib.offerType == "121">
153 <#assign productURL = "business-platinum2103">
154 <#assign productName = "Business Card" >
155 </#if>
156 </#if>
157 <#if url?matches(".*/${productURL}.*")>
158 <option value="${environment}/${tier}/${productURL}?bankercode=${bankercode}&ecdma-lc=${lc_used}${ecidExt}" selected="selected">${productName}</option>
159 <#else>
160 <option value="${environment}/${tier}/${productURL}?bankercode=${bankercode}&ecdma-lc=${lc_used}${ecidExt}">${productName}</option>
161 </#if>
162
163 </#list>
164 </select>
165 </div>
166 </div>
167 </header>
168 </div>
169 <script>
170 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
171 var partnerName = "${partnerName!0}";
172 var metaDesc = "";
173 switch (page) {
174 case "consumer-platinum2103":
175 document.title = "The purchasing power of Zero | "+partnerName+" Platinum Card";
176 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.";
177 break;
178 case "max-cash":
179 document.title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card";
180 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select";
181 break;
182 case "real-rewards":
183 document.title = "Sign up and earn bonus points | "+partnerName+" Real Rewards Card";
184 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase.";
185 break;
186 case "secured":
187 document.title = "Strengthen your finances | "+partnerName+" Secured Card";
188 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
189 break;
190 case "smart-business-rewards":
191 document.title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card";
192 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.";
193 break;
194 case "business-cashback":
195 document.title = "Flexible rewards for your business | "+partnerName+" Business Cash Card";
196 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
197 break;
198 case "business-real-rewards":
199 document.title = "Earn up to 3X points with no caps | "+partnerName+" Business Real Rewards Card";
200 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ;
201 break;
202 case "business-platinum2103":
203 document.title = "Pay down your other credit card balances faster | "+partnerName+" Business Card";
204 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
205 break;
206 case "premier-visa-signature":
207 document.title = "Exclusively for Ameriprise clients | Ameriprise® Premier Visa Signature® Card";
208 metaDesc = "Apply Today for an Ameriprise Financial Credit Card. Earn Rewards Points worth $375 cash value when deposited into an eligible account after spending $3,000 in eligible net purchases within the first 90 days of account opening.";
209 break;
210 case "visa-signature":
211 document.title = "Exclusively for Ameriprise clients | Ameriprise® Visa Signature® Card";
212 metaDesc = "Apply Today for an Ameriprise Financial Credit Card. Earn Rewards Points worth $250 cash value when deposited into an eligible Ameriprise account after spending $2,000 in eligible net purchases within the first 90 days of account opening.";
213 break;
214 }
215 if (metaDesc.length > 0) {
216 var m = document.createElement('meta');
217 m.name = 'description';
218 m.content = metaDesc;
219 document.head.appendChild(m);
220 }
221
222 AUI().ready(function () {
223 jQuery('.styled-select select').change(function () {
224 location.href = this.value;
225 });
226 });
227 </script>
228
229 <#else>
230 <script>
231 console.log("FI Cards Data empty");
232 //location.href = '${url404}';
233 </script>
234 </#if>
235 <#else>
236 <script>
237 console.log("FI opt out");
238 //location.href = '${url404}';
239 </script>
240 </#if>
241<#else>
242 <script>
243 console.log("location code empty");
244 //location.href = '${url404}';
245 </script>
246</#if>
处理模板时发生错误。
The following has evaluated to null or missing: ==> bCode [in template "10153#10191#6716946" at line 74, column 6] ---- 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: #if bCode?starts_with("amp") && (url?... [in template "10153#10191#6716946" at line 74, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign url404 = '/error/404.html' >
5<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
6<#assign environment = url?replace('/11t1.*','','r')>
7<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
8<#assign prcaURL = propsUtil.get('elan.prca.url')>
9
10<#-- check bankercode validity -->
11<#assign useprcaValue = "" >
12<#assign applicationType = "saa" >
13<#if qstringmap["bankercode"]?has_content>
14 <#assign bCode= qstringmap["bankercode"]?first>
15
16 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedApp','0&'+bCode)>
17 <#if fiData?first?has_content>
18 <#assign fi = fiData?first>
19 <#if (fi.projectId == "12" || fi.projectId == "13" || fi.projectId == "14")>
20 <#assign subbu_special = fi.offerId>
21 </#if>
22 </#if>
23 <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
24 <#list bData as b>
25 <#assign lc = b.locationcode >
26 <#assign bName = b.branch >
27 <#assign bPhone = b.businessphone >
28 <#assign boeid = b.oeid?trim>
29 <#assign fName = b.firstname?trim>
30 <#assign lName = b.lastname?trim>
31 <#assign rlc = b.reallocationcode >
32 <#assign mappedLC = b.mappedLocationCode >
33 </#list>
34 <script>
35 console.groupCollapsed("fi data from service call 'crcDDCBankerAssistedAppDetail'");
36 console.log('%clc: ', 'font-weight: bold; color: red;', '${lc}');
37 console.log('bName: ','${bName}')
38 console.log('bPhone: ','${bPhone}')
39 console.log('boeid','${boeid}')
40 console.log('fName: ','${fName}')
41 console.log('lName: ','${lName}')
42 console.log('rlc: ','${rlc}')
43 console.log('mappedLC: ','${mappedLC}')
44 console.groupEnd();
45 </script>
46 <#if qstringmap["ecdma-lc"]?has_content>
47 <#assign lc_url= qstringmap["ecdma-lc"]?first>
48 </#if>
49 <script>
50 console.log('%clc from URL: ', 'font-weight: bold; color: green;', '${lc_url}');
51 </script>
52
53<#else>
54 <script>
55 console.log("MainProductBcode missing");
56 //location.href = '${url404}';
57 </script>
58</#if>
59
60<#assign text_to_apply_source = "vanity url" >
61<#if qstringmap["sms"]?has_content>
62 <#assign sms = 1 >
63 <#assign text_to_apply_source = "sms" >
64</#if>
65<#if qstringmap["qrCode"]?has_content>
66 <#assign text_to_apply_source = "qr code" >
67</#if>
68<#assign campaignId = "" >
69<#assign ecidExt="">
70<#if qstringmap["ecid"]?has_content>
71 <#assign campaignId = qstringmap["ecid"]?first >
72 <#assign ecidExt="&ecid="+qstringmap["ecid"]?first>
73</#if>
74<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
75 <#assign ameriprise = true>
76<#else>
77 <#assign ameriprise = false>
78</#if>
79<#if mappedLC?has_content && !ameriprise>
80<#assign lc = mappedLC >
81</#if>
82
83<#if lc?has_content>
84
85 <#assign firstNameLength = fName?length >
86 <#assign lastNameLength = lName?length >
87 <#if firstNameLength + lastNameLength > 19 >
88 <#if lastNameLength > 18 >
89 <#assign bLName = lName?substring(0,18)>
90 <#else>
91 <#assign bLName = lName>
92 </#if>
93 <#assign maxFirstName = 19 - bLName?length >
94 <#if firstNameLength > maxFirstName >
95 <#assign bFName = fName?substring(0,maxFirstName)>
96 <#else>
97 <#assign bFName = fName>
98 </#if>
99 <#else>
100 <#assign bFName = fName >
101 <#assign bLName = lName >
102 </#if>
103
104
105 <#assign prefix = "00000" >
106 <#assign lcWithPrefix = prefix + lc >
107 <#assign withPrefixLength = lcWithPrefix?length >
108 <#assign startHere = withPrefixLength - 5>
109 <#assign lc = lcWithPrefix?substring(startHere)>
110
111 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
112 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
113
114 <#if clientProfileList?first?has_content>
115 <#assign clientProfile = clientProfileList?first>
116 <#assign partnerName = clientProfile.getMarketingNameLong()>
117 <#assign pbu = clientProfile.getPbu()>
118 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
119
120 <#assign optoutData = utilServ.makeCall('crc_DDCSAAOptOut',pbu+'&'+subbu)>
121 <#if (optoutData?size == 0)>
122 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
123 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
124 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
125 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>
126 <#assign partnerUrl = 'https://' + partnerUrl>
127 </#if>
128 <#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
129 <#if (clientdata?size > 0)>
130 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
131 <#assign cdnLogoUrl = propsUtil.get('rackspace.cdn.web.url')>
132 <#list clientdata as data>
133 <#assign billingCycle=data.BillingCycles>
134 </#list>
135 <#if pbu == "0864054">
136 <#assign override = "berkshire">
137 <#else>
138 <#assign override = " ">
139 </#if>
140
141 <#-- this one should be delete for prod -->
142
143 <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">
144 <#assign logoFileName = pbu + "-" + subbu + ".png">
145
146 <#assign cdnCardArtUrl = propsUtil.get('rackspace.cdn.cardart.url')>
147 <#assign pageClass = secondaryBackgroundImage.cardType.getData()>
148
149 <#if (subbu_special?has_content)>
150 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
151 <#else>
152 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
153 </#if>
154
155
156 <#assign temp = []>
157 <#assign offerTypeList = []>
158 <#assign index = 0>
159 <#list fiCardsData as fib>
160 <#assign useprcaValue = fib.useprca!"">
161 <#if !(offerTypeList?seq_contains(fib.offerType))>
162 <#assign offerTypeList = offerTypeList + [fib.offerType]>
163 <#assign temp = temp + fiCardsData[index..index]>
164 </#if>
165 <#assign index = index + 1>
166 </#list>
167 <#assign fiCardsData = temp>
168 <#if (fiCardsData?size > 0)>
169 <#if (subbu_special?has_content)>
170 <#assign lc_used = fiCardsData?first.WebLocationCode>
171 <#else>
172 <#if ameriprise>
173 <#assign lc_used = lc_url>
174 <#else>
175 <#assign lc_used = mappedLC>
176 </#if>
177 </#if>
178
179 <#list fiCardsData as fib>
180 <#if ameriprise>
181 <#if (fib.offerType=="101")>
182 <#assign productURL="premier-visa-signature">
183 <#assign productName="Premier Visa Signature">
184 <#assign productClass="ameriprise-premier-visa-signature">
185 <#elseif (fib.offerType=="103")>
186 <#assign productURL = "visa-signature">
187 <#assign productName = "Visa Signature">
188 <#assign productClass="ameriprise-visa-signature">
189 </#if>
190 <#else>
191 <#if (fib.offerType=="108") || (fib.offerType=="109")>
192 <#assign productURL="consumer-platinum">
193 <#assign productName="Platinum">
194 <#elseif (fib.offerType=="104")>
195 <#assign productURL = "max-cash">
196 <#assign productName="Max Cash Preferred">
197 <#elseif (fib.offerType=="101") || (fib.offerType=="103")>
198 <#assign productURL = "real-rewards">
199 <#assign productName="Real Rewards">
200 <#elseif fib.offerType == "115">
201 <#assign productURL = "secured">
202 <#assign productName="Secured">
203 <#elseif fib.offerType == "144">
204 <#assign productURL = "smart-business-rewards">
205 <#assign productName="Smart Business Rewards">
206 <#elseif fib.offerType == "128">
207 <#assign productURL = "business-cashback">
208 <#assign productName="Business Cash">
209 <#elseif fib.offerType == "143">
210 <#assign productURL = "business-real-rewards">
211 <#assign productName="Business Real Rewards">
212 <#elseif fib.offerType == "121">
213 <#assign productURL = "business-platinum2103">
214 <#assign productName="Business">
215 </#if>
216 </#if>
217 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
218 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
219 <#assign newSourceCode = fib.sourceCode>
220 <#assign newOfferId = fib.offerId>
221 <#if url?matches(".*/${productURL}.*")>
222 <#assign sdata = utilServ.makeCall('crcDDCGetSchumerBox', newOfferId + '&' + newSourceCode)>
223 <#if (sdata?size > 0)>
224 <#if (productURL=="platinum" && !ameriprise)>
225 <#assign apr = "">
226 <#list sdata as d>
227 <#if (d.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases") && (d.scrapedValue?has_content))>
228 <#assign apr = d.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
229 <script>
230 console.log("scraped data exists");
231 console.log("APR", '${apr}')
232 </script>
233 <#break>
234 </#if>
235 </#list>
236 <script>
237 $(document).ready(function () {
238 var aprText = "${apr}";
239 if (aprText) {
240 var matches= aprText.match(/\d+(\.\d+)?%?/g);
241 var billing_cycle = "";
242 var apr_min = "";
243 var apr_max = "";
244 if (aprText.indexOf("Platinum:") != -1) {
245 billing_cycle = matches[1];
246 apr_min = matches[2];
247 apr_max = matches[3];
248 }
249 if (billing_cycle) {
250 $(".scraped-billing-cycle").html(billing_cycle);
251 }
252 if (apr_min) {
253 $(".scraped-apr-min").html(apr_min);
254 }
255 if (apr_max) {
256 $('.scraped-apr-max').html(apr_max);
257 }
258 }
259 });
260 </script>
261
262 </#if>
263 <#else>
264 <script>
265 console.log("scraped data missing");
266 </script>
267 </#if>
268 <#if ameriprise>
269 <#assign card_art_alt = partnerName + " " + productName + " " + " Card">
270 <#assign rollover_text = partnerName + " " + productName + " " + "Card">
271 <#else>
272 <#assign card_art_alt = partnerName>
273 <#assign rollover_text = partnerName + " " + productName + " " + " Credit Card">
274 <#assign card_text = productName + " Card">
275 </#if>
276 <div class="hero-container ${pageClass} ${productClass!''}" title="${rollover_text!''}">
277 <div class="hero-main">
278 <div class="hero-main-logo" title="${partnerName!''}">
279 <#if partnerUrl?has_content>
280 <a href="${partnerUrl!''}" title="${partnerName!''}"><img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''}"></a>
281 <#else>
282 <a title="${partnerName!''}"><img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''}"></a>
283 </#if>
284 <div class="hero-main-logo-homelink">
285 <#if ameriprise>
286 <a href="${environment}/11t1m/index?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}">Back to Overview</a>
287 <#else>
288 <a href="${environment}/11t1/index?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">Back to Overview</a>
289 </#if>
290 </div>
291 </div>
292 <div class="hero-main-container">
293 <div class="hero-main-offer bg-color-white">
294 <div class="offer-header bg-color-black text-color-white text-bold">${primaryHeadlineText.getData()}</div>
295 <div class="offer-detail">
296 <div class="offer-detail-head">${primaryHeadlineFeature.getData()}</div>
297 <div class="offer-detail-text text-color-default">
298 ${primaryHeadlineFeatureTop.getData()}
299 ${primaryHeadlineFeatureBottom.getData()}
300 </div>
301 <div class="offer-detail-cardArt">
302 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
303 <p>${card_text!''}</p>
304 </div>
305 <#if (fiCardsData?size > 0)>
306 <#if (useprcaValue == "1")>
307 <form class="form1" action='${prcaURL}?locationCode=${lc_used}&offerId=${newOfferId}&preparerType=customer&sourceCode=${newSourceCode}&applicationType=${applicationType}' method="post" id="BAAForm">
308 <label for="appDataBAA" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
309 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA" style="display:none;"></textarea>
310 <input type="submit" data-button-name="cta-button-top" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" value="${ctaText.getData()}" disabled />
311 </form>
312 <#else>
313 <form class="form1" action='${oadURL}?locationCode=${lc_used}&offerId=${newOfferId}&preparerType=customer&sourceCode=${newSourceCode}' method="post" id="BAAForm">
314 <label for="appDataBAA" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
315 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA" style="display:none;"></textarea>
316 <input type="submit" data-button-name="cta-button-top" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" value="${ctaText.getData()}" disabled />
317 </form>
318 </#if>
319 <#else>
320 <#if (useprcaValue == "1")>
321 <form class="form2" action='${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&sourceCode=${sourceCode}&applicationType=${applicationType}' method="post" id="BAAForm">
322 <label for="appDataBAA" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
323 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA" style="display:none;"></textarea>
324 <input type="submit" data-button-name="cta-button-top" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" value="${ctaText.getData()}" disabled />
325 </form>
326 <#else>
327 <form class="form2" action='${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&sourceCode=${sourceCode}' method="post" id="BAAForm">
328 <label for="appDataBAA" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
329 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA" style="display:none;"></textarea>
330 <input type="submit" data-button-name="cta-button-top" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" value="${ctaText.getData()}" disabled />
331 </form>
332 </#if>
333 </#if>
334 </div>
335 </div>
336 </div>
337 </div>
338 <div class="hero-primary-benefits bg-color-black-half-transparent text-color-white">
339 <#if secondaryFeatureText.getData() != "">
340 <#foreach item in secondaryFeatureText.getSiblings()>
341 <div class="primary-benefit">
342 <div class="primary-benefit-wrapper text-color-white">
343 ${item.getData()}
344 </div>
345 </div>
346 </#foreach>
347 </#if>
348 </div>
349 </div>
350 <div class="standard-content-container" title="${rollover_text!''}">
351 <h2 class="learnmore text-color-custom text-bold" onclick="learnmore(event)">
352 LEARN MORE
353 <svg viewBox="0 0 150 100" width="45" height="30">
354 <polyline points="40 40 80 80 120 38" stroke-width="20"
355 stroke-linecap="butt" fill="none" stroke-linejoin="miter"/>
356 </svg>
357 </h2>
358 <h2 class="text-bold" id="more">${secondaryHeadlineText.getData()}</h2>
359 <div class="secondary-benefits">
360 <div class="option">
361 ${additionalInfoGroupA.getData()}
362 <#if pbu != "0892445">
363 <#if (sdata?size > 0)>
364 <div>
365
366 <#if (fib.offerType == "104") >
367
368 <#list sdata as d>
369 <#if (d.scrapedLabel?contains("Annual Percentage Rate") && (d.scrapedValue?has_content))>
370
371 <h3 class="text-color-custom"><strong>APR<sup>*</sup> for Purchases:</strong></h3>
372 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" class="text-color-default" target="_blank">Terms & Conditions</a>
373 </p>
374 <#break>
375 </#if>
376 </#list>
377 <#list sdata as d>
378 <#if (d.scrapedLabel?contains("APR for Balance Transfers") && (d.scrapedValue?has_content))>
379
380 <h3 class="text-color-custom"><strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers</strong></h3>
381 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" class="text-color-default" target="_blank">Terms & Conditions</a>
382 </p>
383
384 <#break>
385 </#if>
386 </#list>
387 <#else>
388
389 <#if (fib.offerType == "115" || fib.offerType == "123")>
390 <h3 class="text-color-custom"><strong>APR for Purchases and Balance Transfers</strong></h3>
391 <#elseif (fib.offerType=="128" || fib.offerType=="143")>
392 <h3 class="text-color-custom"><strong>Annual Fee</strong></h3>
393 <#else>
394 <h3 class="text-color-custom"><strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers</strong></h3>
395 </#if>
396 <#list sdata as d>
397 <#if (fib.offerType=="128" || fib.offerType=="143") >
398 <#if (d.scrapedLabel?contains("Annual Membership Fee") && (d.scrapedValue?has_content))>
399 <#if (fiCardsData?size > 0)>
400 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}"
401 class="text-color-default" target="_blank">Terms & Conditions</a>
402 </p>
403
404 <#else>
405 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}"
406 class="text-color-default" target="_blank">Terms & Conditions</a>
407 </p>
408 </#if>
409 <#break>
410 </#if>
411
412 <#else>
413 <#if (d.scrapedLabel?contains("Annual Percentage Rate") && (d.scrapedValue?has_content))>
414
415 <#if (fiCardsData?size > 0)>
416 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a>
417 </p>
418 <#else>
419 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" class="text-color-default" target="_blank">Terms & Conditions</a>
420 </p>
421 </#if>
422 <#break>
423 </#if>
424 </#if>
425 </#list>
426
427 </#if>
428 </div>
429 </#if>
430 </#if>
431 </div>
432 <div class="option">
433 ${additionalInfoGroupB.getData()}
434 <#if pbu != "0892445">
435 <div>
436 <#if (fiCardsData?size > 0)>
437 <#if (sdata?size > 0)>
438 <#if (fib.offerType=="128" || fib.offerType=="143")>
439 <h3 class="text-color-custom"><strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers</strong></h3>
440 <#else>
441 <h3 class="text-color-custom"><strong>Annual Fee</strong></h3>
442 </#if>
443 <#list sdata as d>
444 <#if (fib.offerType=="128" || fib.offerType=="143")>
445 <#if (d.scrapedLabel?contains("Annual Percentage Rate") && (d.scrapedValue?has_content))>
446
447 <#if (fiCardsData?size > 0)>
448 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}"
449 class="text-color-default" target="_blank">Terms & Conditions</a>
450 </p>
451 <#else>
452 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}"
453 class="text-color-default" target="_blank">Terms & Conditions</a>
454 </p>
455 </#if>
456 <#break>
457 </#if>
458 <#else>
459 <#if (d.scrapedLabel?contains("Annual Membership Fee") && (d.scrapedValue?has_content))>
460
461 <#if (fiCardsData?size > 0)>
462 <p>
463 <#if (fib.offerType == "123")>
464 Annual Fee: ${d.scrapedValue}
465 <#else>
466 ${d.scrapedValue}
467 </#if>
468 <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a>
469 </p>
470 <#else>
471 <p>
472 <#if (fib.offerType == "123")>
473 Annual Fee: ${d.scrapedValue}
474 <#else>
475 ${d.scrapedValue}
476 </#if>
477 <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" class="text-color-default" target="_blank">Terms & Conditions</a>
478 </p>
479 </#if>
480 <#break>
481 </#if>
482 </#if>
483 </#list>
484 </#if>
485 </#if>
486 </div>
487 </#if>
488 </div>
489 </div>
490 </div>
491 <div class="banner-wrapper" title="${rollover_text!''}">
492 <div class="banner bg-color-custom ${override}">
493 <div class="banner-cardArt">
494 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" title="${card_art_alt!''}" srcset="" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
495 </div>
496 <div class="banner-cta">
497 <div class="banner-cta-text text-color-white text-bold">
498 ${optionalCtaFeatureText.getData()}
499 </div>
500 <a id="oadSecButton" data-button-name="cta-button-bottom" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button banner-cta-apply-button text-bold button-bg-color-white text-color-custom">${optionalCtaText.getData()}</a>
501 </div>
502 </div>
503 </div>
504
505
506 </#if>
507 </#list>
508
509 <script>
510 var reportingData = window.reportingData || {};
511 document.addEventListener('DOMContentLoaded', function() {
512 console.log('inside ready');
513 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
514 var hostName = location.hostname;
515
516 function getDomainFromHostname(hostname) {
517 var parts = hostname.split('.');
518 return parts.length === 3 ? parts[1] : parts[0];
519 }
520 var domain = getDomainFromHostname(hostName);
521 var partnerName = "${partnerName!''}";
522
523 var ameriprise = '${ameriprise?string("yes", "no")}';
524 var locationCode = "${rlc!lc}";
525 var eidAmp = "";
526 if (ameriprise == "yes") {
527 var bankercode_amp = '${bCode}';
528 eidAmp = bankercode_amp.substring(3);
529 locationCode ="";
530 }
531
532 $('.jn-button').removeAttr('disabled');
533 $('.jn-button').removeClass('jn-disabled');
534 jQuery('#oadSecButton').on('click', function(e) {
535 jQuery('#BAAForm').submit();
536 });
537
538 jQuery('#BAAForm').on('submit', function(e){
539 e.preventDefault();
540 console.log('in custom submit');
541 var xmlData;
542 if(ameriprise == "yes") {
543 xmlData = '<?xml version="1.0"?>'+
544 "<prefillData>"+
545 "<versionNumber>1.0</versionNumber>"+
546 "<applicationData>"+
547 "<referral>" +
548 "<employeeId>" + eidAmp + "</employeeId>" +
549 "<storeNumber>"+"${bName!'0'}"+"</storeNumber>"+
550 "<divisionNumber></divisionNumber>"+
551 "</referral>" +
552 "<bankerInformation>"+
553 "<locationCode>" + locationCode + "</locationCode>"+
554 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
555 "<employeeID>${boeid!0}</employeeID>"+
556 "<name>" +
557 "<first>${bFName!'0'}</first>" +
558 "<last>${bLName!'0'}</last>" +
559 "</name>"+
560 "<phone>"+
561 "<areaCode>"+areaCode+"</areaCode>"+
562 "<exchange>"+exchangeCode+"</exchange>"+
563 "<number>"+num+"</number>"+
564 "</phone>"+
565 "</bankerInformation>"+
566 "</applicationData>"+
567 "</prefillData>"
568 } else {
569 xmlData = '<?xml version="1.0"?>'+
570 "<prefillData>"+
571 "<versionNumber>1.0</versionNumber>"+
572 "<applicationData>"+
573 "<bankerInformation>"+
574 "<locationCode>" + locationCode + "</locationCode>"+
575 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
576 "<employeeID>${boeid!0}</employeeID>"+
577 "<name>" +
578 "<first>${bFName!'0'}</first>" +
579 "<last>${bLName!'0'}</last>" +
580 "</name>"+
581 "<phone>"+
582 "<areaCode>"+areaCode+"</areaCode>"+
583 "<exchange>"+exchangeCode+"</exchange>"+
584 "<number>"+num+"</number>"+
585 "</phone>"+
586 "</bankerInformation>"+
587 "</applicationData>"+
588 "</prefillData>"
589 }
590 console.log("useprcaValue---->"+${useprcaValue})
591 if('${useprcaValue}' =='1'){
592
593 var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}";
594 var firstName = "${fName!'0'}".trim();
595 var lastName = "${lName!'0'}".trim();
596 var fullName = employeeFullName.trim();
597
598 if (fullName.length <= 19) {
599 employeeFullName = fullName;
600 } else if (firstName.charAt(0) + ' ' + lastName.length <= 19) {
601 employeeFullName = firstName.charAt(0) + ' ' + lastName;
602 } else {
603 employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 17);
604 }
605 var applicationJsonData = {
606 "prefillData": {
607 "versionNumber": "1.0",
608 "applicationData": {
609 "bankerInformation": {
610 "locationCode": locationCode,
611 "originatingBranchId": "${bName!'0'}",
612 "employeeId": "${boeid!0}",
613 "employeeFullName": employeeFullName,
614 "employeePhoneNumber": phoneNum
615 }
616 }
617 }
618 };
619
620 var jsonData = JSON.stringify(applicationJsonData);
621
622 jQuery('#appDataBAA').val(jsonData);
623 }else{
624 jQuery('#appDataBAA').val(xmlData);
625 }
626
627 var buttonName = jQuery('.jn-button').data('button-name');
628 /* SiteCatalyst onClick tracking */
629 reportingData.apply_button = buttonName;
630 AUI().ready(function() {
631 if (window.publisherFW) {
632 window.publisherFW.publishEvent("onClick", reportingData);
633 }
634 });
635
636 this.submit();
637 });
638 var regex = /\d+/g;
639 var bdNumber = "${bPhone!''}";
640 var phoneNum = bdNumber.match(regex);
641 var areaCode = "";
642 var exchangeCode = "";
643 var num = "";
644 if(phoneNum != null) {
645 phoneNum = phoneNum.join("");
646 areaCode = phoneNum.substring(0,3);
647 exchangeCode = phoneNum.substring(3,6);
648 num = phoneNum.substring(6,10);
649 }
650 var product = "";
651 switch(page) {
652 case "consumer-platinum2103":
653 product="Platinum Card"
654 break;
655 case "real-rewards":
656 product="Real Rewards Card"
657 break;
658 case "secured":
659 product="Secured Card"
660 break;
661 case "business-cashback":
662 product="Business Cash Card"
663 break;
664 case "business-real-rewards":
665 product="Business Real Rewards Card"
666 break;
667 case "business-rewards-plus":
668 product="Business Rewards PLUS Card"
669 break;
670 case "premier-visa-signature":
671 product="Premier Visa Signature Card"
672 break;
673 case "business-platinum2103":
674 product="Business"
675 break;
676 case "visa-signature":
677 product="Visa Signature Card"
678 break;
679 default:
680 product = "All Cards";
681 }
682
683 /* update SiteCatalyst data object */
684 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
685 reportingData.location_code = '${rlc!0}';
686 reportingData.product = product;
687 reportingData.site_section = 'credit cards';
688 reportingData.platform = 'microsite';
689 reportingData.partner_name = "${partnerName}";
690 reportingData.Banker_id = '${boeid}';
691 reportingData.Banker_code = '${bCode}';
692 reportingData.visitor_type = 'prospect';
693 reportingData.text_to_apply_source = '${text_to_apply_source}';
694 reportingData.page_type = 'product';
695 reportingData.campaign_id = '${campaignId}';
696
697
698 });
699 </script>
700 <script async>
701 function learnmore(e) {
702 e.preventDefault();
703 var element = document.getElementById("more");
704 element.scrollIntoView({behavior: 'smooth'});
705 }
706 </script>
707 <#else>
708 <script>
709 console.log("FI Cards Data empty");
710 //location.href = '${url404}';
711 </script>
712 </#if>
713 <#else>
714 <script>
715 console.log("not Tier1 Fi");
716 //location.href = '${url404}';
717 </script>
718 </#if>
719 <#else>
720 <script>
721 console.log("Fi opt-out");
722 //location.href = '${url404}';
723 </script>
724 </#if>
725 <#else>
726 <script>
727 console.log("client profile empty");
728 //location.href = '${url404}';
729 </script>
730 </#if>
731</#if>
处理模板时发生错误。
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#7973976" at line 5, column 17] ---- 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 bCode = qstringmap["bankercod... [in template "10153#10191#7973976" at line 5, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
4
5<#assign bCode= qstringmap["bankercode"]?first>
6<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
7<#list bData as b>
8 <#assign lc = b.locationcode >
9 <#assign rLC = b.reallocationcode >
10 <#assign mappedLC = b.mappedLocationCode >
11</#list>
12<#if mappedLC?has_content && !(url?contains("11t1m"))>
13 <#assign lc = mappedLC >
14</#if>
15<#if lc?has_content>
16 <#assign prefix = "00000" >
17 <#assign lcWithPrefix = prefix + lc >
18 <#assign withPrefixLength = lcWithPrefix?length >
19 <#assign startHere = withPrefixLength - 5>
20 <#assign lc = lcWithPrefix?substring(startHere)>
21 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
22 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
23
24 <#assign clientProfile = clientProfileList?first>
25 <#assign partnerName=clientProfile.getMarketingNameLong()>
26</#if>
27
28<div class="content-container" title="${partnerName!''} - Disclaimer">
29 <div class="jn-disclaimer tier3-disclaimer-${class.getData()}">
30 ${content.getData()}
31 </div>
32</div>
处理模板时发生错误。
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#6590291" at line 6, column 17] ---- 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 bCode = qstringmap["bankercod... [in template "10153#10191#6590291" at line 6, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
4<#assign url404 = '/error/404.html'>
5
6<#assign bCode= qstringmap["bankercode"]?first>
7<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
8<#list bData as b>
9 <#assign lc = b.locationcode >
10 <#assign rLC = b.reallocationcode >
11 <#assign mappedLC = b.mappedLocationCode >
12</#list>
13
14<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
15 <#assign ameriprise = true>
16<#else>
17 <#assign ameriprise = false>
18</#if>
19<#if mappedLC?has_content && !ameriprise>
20 <#assign lc = mappedLC >
21</#if>
22
23<#if lc?has_content>
24
25 <#assign prefix = "00000" >
26 <#assign lcWithPrefix = prefix + lc >
27 <#assign withPrefixLength = lcWithPrefix?length >
28 <#assign startHere = withPrefixLength - 5>
29 <#assign lc = lcWithPrefix?substring(startHere)>
30 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
31 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
32
33 <#assign clientProfile = clientProfileList?first>
34 <#assign pbu = clientProfile.getPbu()>
35 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
36 <#assign partnerName=clientProfile.getMarketingNameLong()>
37 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
38 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
39 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
40 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
41 <#-- add protocal if missing -->
42 <#assign partnerUrl = 'https://' + partnerUrl>
43 </#if>
44 <footer class="footer bg-color-black text-color-white">
45 ${footerContent.getData()}
46 </footer>
47
48 <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
49 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
50 <style>
51 #opt-out-button,
52 .modal__btn.learn-more {
53 background: #0C2074;
54 border: 1px solid #0C2074;
55 color: white;
56 text-transform: uppercase;
57 text-decoration: none;
58 font-size: 16px;
59 padding: 0.5rem 2rem;
60 display: inline-block;
61 border-radius: 0;
62 }
63 #opt-out-button:hover,
64 .modal__btn.learn-more:hover {
65 color: white;
66 border-color: #2C76AF !important;
67 background-color: #2C76AF !important;
68 }
69 .modal__btn.learn-more {
70 background: white;
71 border: 1px solid #0C2074;
72 color: #0C2074;
73 }
74 #opt-out-button[disabled="true"] {
75 background-color: rgba(0,0,0,.15);
76 color: rgba(0,0,0,.45);
77 border-color: rgba(0,0,0,.25);
78 }
79 #opt-out-button:hover[disabled="true"] {
80 background-color: rgba(0,0,0,.15) !important;
81 color: rgba(0,0,0,.45) !important;
82 border-color: rgba(0,0,0,.25) !important;
83 }
84 #opt-out-button:focus {
85 outline-style: solid;
86 outline-color: white;
87 outline-offset: -3px;
88 outline-width: 1px;
89 }
90 .opt-out-link svg {
91 width: 30px;
92 height: 14px;
93 width: auto;
94 vertical-align: middle;
95 }
96 .modal__overlay {
97 position: fixed;
98 top: 0;
99 left: 0;
100 right: 0;
101 bottom: 0;
102 background: rgba(0,0,0,0.6);
103 display: flex;
104 justify-content: center;
105 align-items: center;
106 }
107
108 .modal__container {
109 background-color: #fff;
110 padding: 30px;
111 max-width: 500px;
112 max-height: 100vh;
113 border-radius: 4px;
114 overflow-y: auto;
115 box-sizing: border-box;
116 }
117
118 .modal__header {
119 display: flex;
120 justify-content: space-between;
121 align-items: center;
122 }
123
124 .modal__title {
125 margin-top: 0;
126 margin-bottom: 0;
127 font-weight: 600;
128 font-size: 20px;
129 line-height: 1.25;
130 color: #00449e;
131 box-sizing: border-box;
132 }
133
134 .modal__close {
135 background: transparent;
136 border: 1px solid white;
137 padding: 4px 8px;
138 }
139 .modal__close:hover {
140 border: 1px solid black;
141 }
142
143 .modal__header .modal__close:before { content: "\2715"; }
144
145 .modal__content {
146 margin-top: 2rem;
147 margin-bottom: 2rem;
148 line-height: 1.5;
149 }
150
151 @keyframes mmfadeIn {
152 from { opacity: 0; }
153 to { opacity: 1; }
154 }
155
156 @keyframes mmfadeOut {
157 from { opacity: 1; }
158 to { opacity: 0; }
159 }
160
161 @keyframes mmslideIn {
162 from { transform: translateY(15%); }
163 to { transform: translateY(0); }
164 }
165
166 @keyframes mmslideOut {
167 from { transform: translateY(0); }
168 to { transform: translateY(-10%); }
169 }
170
171 .micromodal-slide {
172 display: none;
173 }
174
175 .micromodal-slide.is-open {
176 display: block;
177 }
178
179 .micromodal-slide[aria-hidden="false"] .modal__overlay {
180 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
181 }
182
183 .micromodal-slide[aria-hidden="false"] .modal__container {
184 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
185 }
186
187 .micromodal-slide[aria-hidden="true"] .modal__overlay {
188 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
189 }
190
191 .micromodal-slide[aria-hidden="true"] .modal__container {
192 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
193 }
194
195 .micromodal-slide .modal__container,
196 .micromodal-slide .modal__overlay {
197 will-change: transform;
198 }
199 </style>
200
201 <div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
202 <div class="modal__overlay" tabindex="-1" data-micromodal-close>
203 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
204 <header class="modal__header">
205 <h2 class="modal__title" id="modal-1-title">
206 Your California privacy choices
207 </h2>
208 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
209 </header>
210 <div class="modal__content" id="modal-1-content">
211 <div id="message-no-cookie">
212 <p>
213 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>
214
215 <p> </p>
216
217 <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>
218 </div>
219 <div id="message-with-cookie">
220 <p>You have successfully opted-out.</p>
221 </div>
222 </div>
223 <div class="modal__footer">
224 <a href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a>
225 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
226 </div>
227 </div>
228 </div>
229 </div>
230 <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
231 <script>
232 const fdicNode = document.querySelector('.footer .fdic')
233 </script>
234 <#if url?contains("11t1m")>
235 <script>
236 document.querySelector('.footer .copyright').classList.add("ecdma-footer-client-name-copyright");
237 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
238 </script>
239 <#else>
240 <script>
241 document.querySelector('.footer .copyright').classList.add("ecdma-footer-client-name-copyright");
242 document.querySelector('.footer .fdic').innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
243 var newNode = document.createElement("div");
244 newNode.classList.add("member-agreement");
245 newNode.innerHTML='<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!0}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>';
246 var parent = fdicNode.parentNode;
247 parent.insertBefore(newNode, fdicNode);
248 </script>
249 </#if>
250
251 <#if partnerUrl?has_content>
252 <script>
253 document.querySelector('.copyright .homelink').innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>";
254 </script>
255 </#if>
256 <script>
257 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
258 fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a href="javascript:void(0);" class="opt-out-link text-color-white" 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>');
259 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
260 </script>
261 <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
262 <script>
263 window.getCookieDomain = function() {
264 var hostname = window.location.hostname.split(".");
265 return hostname && hostname.slice(hostname.length - 2).join(".");
266 }
267 window.setToOptOut = function() {
268 if (window.getCookie('privacy_optout')) {
269 document.getElementById('message-no-cookie').style.display = 'none';
270 document.getElementById('message-with-cookie').style.display = 'block';
271 document.getElementById('opt-out-button').setAttribute('disabled', true)
272 } else {
273 document.getElementById('message-no-cookie').style.display = 'block';
274 document.getElementById('message-with-cookie').style.display = 'none';
275 }
276 }
277 window.getCookie = function(name) {
278 var value = '; ' + document.cookie;
279 var parts = value.split('; ' + name + '=');
280 if (parts.length === 2) return parts.pop().split(';').shift();
281 }
282 window.californiaOptOut = function() {
283 if (!window.getCookie('privacy_optout')) {
284 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
285 try {
286 if (window.CustomEvent) {
287 window.dispatchEvent(new CustomEvent('privacy_optout'));
288 } else {
289 var privacyOptoutEvent = document.createEvent('Event');
290 privacyOptoutEvent.initEvent('privacy_optout', true, true);
291 window.dispatchEvent(privacyOptoutEvent);
292 }
293 window.setToOptOut();
294 } catch (err) {
295 console.error(err);
296 }
297 }
298 }
299 MicroModal.init({
300 onShow: window.setToOptOut
301 });
302 AUI().ready(function() {
303 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
304 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
305 if(isBrowserGpcOptOut === true) {
306 window.californiaOptOut();
307 }
308 });
309 </script>
310 <!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->
311</#if>