Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> bCode [in template "10154#10192#18372589" at line 14, column 70] ---- 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 fiData = utilServ.makeCall("c... [in template "10154#10192#18372589" at line 14, column 1] ----
1<#assign uniqueID = randomNamespace />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign environment = url?replace('/11t2/index.*','','r')>
5<#assign projectIds = ["12", "13", "14", "15", "16"]>
6<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! >
7
8<#if qstringmap["bankercode"]?has_content>
9 <#assign bCode= qstringmap["bankercode"]?first>
10 <#assign bCode = htmlUtil.escape(bCode)>
11 <#assign bCode = htmlUtil.escapeJS(bCode)>
12</#if>
13
14<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
15<#if fiData?first?has_content>
16 <#assign fi = fiData?first>
17 <#if projectIds?seq_index_of(fi.projectId) != -1>
18 <#assign subbu_special = fi.offerId>
19 </#if>
20</#if>
21
22
23<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
24<#list bData as b>
25 <#assign lc = b.locationcode >
26 <#assign rLC = b.reallocationcode >
27 <#assign mappedLC = b.mappedLocationCode >
28</#list>
29
30<#if mappedLC?has_content>
31 <#assign lc = mappedLC >
32</#if>
33
34<#if lc?has_content>
35 <#assign prefix = "00000" >
36 <#assign lcWithPrefix = prefix + lc >
37 <#assign withPrefixLength = lcWithPrefix?length >
38 <#assign startHere = withPrefixLength - 5>
39 <#assign lc = lcWithPrefix?substring(startHere)>
40</#if>
41
42<#if qstringmap["ecid"]?has_content>
43 <#assign ecidExt = qstringmap["ecid"]?first>
44 <#assign ecidExt = htmlUtil.escape(ecidExt)>
45 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
46 <#assign ecidExt = "&ecid=" + ecidExt>
47<#else>
48 <#assign ecidExt="">
49</#if>
50
51
52<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
53<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
54<#assign clientProfile = clientProfileList?first>
55<#assign pbu = clientProfile.getPbu()>
56<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
57<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
58<#assign partnerName = clientProfile.getMarketingNameLong()>
59
60<#if (subbu_special?has_content)>
61 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&' + pbu + '&' + subbu_special)>
62<#else>
63 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&' + pbu + '&' + subbu)>
64</#if>
65
66<#assign personalBusinessOfferTypes = utilServ.makeCall('SAA_DistinctCardOffers', '0')>
67
68<#assign personalOfferTypes = []>
69<#assign businessOfferTypes = []>
70
71<#list personalBusinessOfferTypes as pbOfferType>
72 <#if pbOfferType.groupname?has_content && pbOfferType.offertype?has_content>
73 <#if pbOfferType.groupname == "Personal">
74 <#assign personalOfferTypes += [pbOfferType.offertype]>
75 <#elseif pbOfferType.groupname == "Business">
76 <#assign businessOfferTypes += [pbOfferType.offertype]>
77 </#if>
78 </#if>
79</#list>
80
81
82<#assign productTypeValue = "">
83<#if productType.getData()?has_content>
84 <#assign productKey = productType.getData()>
85 <#assign productTypeValue = productType.optionsMap[productKey]>
86
87</#if>
88
89<#assign personalCards = []>
90<#assign businessCards = []>
91<#assign finalList = []>
92<#assign index = 0>
93
94<#list fiCardsData as fib>
95 <#if (fib.offerType?has_content)>
96 <#if (personalOfferTypes?seq_contains(fib.offerType))>
97 <#assign personalCards = personalCards + fiCardsData[index..index]>
98 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
99 <#assign businessCards = businessCards + fiCardsData[index..index]>
100 </#if>
101 </#if>
102 <#assign index = index + 1>
103</#list>
104
105
106<#if productTypeValue == "Personal">
107 <#list personalCards as personalCard>
108 <#if product.getSiblings()?has_content>
109 <#list product.getSiblings() as productItem>
110 <#if personalCard.offerType == productItem.productOfferType.getData()>
111 <#assign finalList = finalList + [personalCard]>
112 </#if>
113 </#list>
114 </#if>
115 </#list>
116<#elseif productTypeValue == "Business">
117 <#list businessCards as businessCard>
118 <#if product.getSiblings()?has_content>
119 <#list product.getSiblings() as productItem>
120 <#if businessCard.offerType == productItem.productOfferType.getData()>
121 <#assign finalList = finalList + [businessCard]>
122 </#if>
123 </#list>
124 </#if>
125 </#list>
126</#if>
127
128<#macro renderCards finalListMacro>
129 <#assign count = 0>
130 <#list finalListMacro as result>
131 <#if count < 3>
132 <#if product.getSiblings()?has_content>
133 <#list product.getSiblings() as productItem>
134 <#if result.offerType == productItem.productOfferType.getData()>
135
136 <#assign productOfferTypeValue = product.productOfferType.optionsMap[productItem.productOfferType.getData()]>
137 <#assign productOfferType = productOfferTypeValue?substring(productOfferTypeValue?index_of(" - ") + 3)!''>
138
139 <div class="card">
140 <div class="card__content">
141
142 <div class="card__content-left">
143 <#assign cardArtImage = cdnCardArtUrl + "/" + result.filename + ".png" >
144 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + result.filename + ".jpg" >
145 <#assign cardArtImageAltText = partnerName + " " + productOfferType>
146 <img class="card__image" src="${cardArtImage!''}" alt="${cardArtImageAltText}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
147
148 <#if (productItem.learnMoreURL.getData())??>
149 <a class="card__learn-more" href="${environment}${productItem.learnMoreURL.getData()!''}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}" rel="noopener noreferrer">
150 Learn More <span class="sr-only">about ${productOfferType?upper_case!}</span>
151 </a>
152 </#if>
153
154 </div>
155
156
157 <div class="card__content-right">
158 <h3 class="product-offer-type">
159 ${productOfferType?upper_case!}
160
161 <#if (productItem.cardNameFootnotes.getData())??>
162 <sup>${productItem.cardNameFootnotes.getData()}</sup>
163 </#if>
164 </h3>
165
166 <#if (productItem.offerCopy.getData())??>
167 <div class="offer-copy">
168 ${productItem.offerCopy.getData()}
169 </div>
170 </#if>
171
172 </div>
173 </div>
174 </div>
175
176 </#if>
177 </#list>
178 </#if>
179 <#assign count = count + 1>
180 </#if>
181 </#list>
182</#macro>
183
184<#if (finalList?? && finalList?has_content && finalList?size > 1)>
185 <#assign count = 0>
186 <#assign countGlider = 0>
187 <div class="${productTypeValue}-featured-cards saa-featured-cards-2024 <#if productTypeValue == 'Business'>hide</#if>" id="${uniqueID}">
188 <h2 id="featured-glider-label" class="super-head">FEATURED CREDIT CARD OFFERS</h2>
189 <div class="card-container">
190 <@renderCards finalListMacro=finalList />
191 </div>
192 <div class="featured-glider-container" aria-roledescription="carousel" aria-labelledby="featured-glider-label">
193 <div id="featured-glider-slides" class="featured-glider">
194 <@renderCards finalListMacro=finalList />
195 </div>
196 <button aria-label="Previous slide" class="glider-prev" aria-controls="featured-glider-slides"></button>
197 <button aria-label="Next slide" class="glider-next" aria-controls="featured-glider-slides"></button>
198 <div role="tablist" class="dots"></div>
199 </div>
200 </div>
201</#if>
202<style>
203 #content .saa-featured-cards-2024 {
204 max-width: 1336px;
205 padding: 0 20px;
206 margin: 0 auto;
207 }
208 @media (min-width: 1376px) {
209 #content .saa-featured-cards-2024 {
210 margin-top: 30px;
211 }
212 }
213 #content .saa-featured-cards-2024 .featured-glider-container {
214 display: block !important;
215 position: relative;
216 margin-bottom: 20px;
217 }
218 #content .saa-featured-cards-2024 .featured-glider-container .card {
219 flex: 375px;
220 }
221 @media (min-width: 1200px) {
222 #content .saa-featured-cards-2024 .featured-glider-container {
223 display: none !important;
224 }
225 }
226 #content .saa-featured-cards-2024 .featured-glider {
227 padding-top: 40px;
228 margin-bottom: 15px;
229 overflow-x: hidden;
230 }
231 #content .saa-featured-cards-2024 .card-container {
232 display: flex;
233 gap: 30px;
234 flex-wrap: nowrap;
235 justify-content: space-between;
236 margin-top: 40px;
237 margin-bottom: 60px;
238 display: none !important;
239 justify-content: center;
240 }
241 @media (min-width: 1200px) {
242 #content .saa-featured-cards-2024 .card-container {
243 display: flex !important;
244 }
245 }
246 #content .saa-featured-cards-2024 .card {
247 background-color: var(--ecdma-bg-color);
248 border-radius: 10px;
249 padding: 0 20px 15px 20px;
250 margin: 0 20px;
251 flex: 33%;
252 flex-grow: 0;
253 visibility: unset !important;
254 }
255 @media (min-width: 1200px) {
256 #content .saa-featured-cards-2024 .card {
257 margin: 0;
258 }
259 }
260 #content .saa-featured-cards-2024 .card__content {
261 display: flex;
262 height: 100%;
263 }
264 #content .saa-featured-cards-2024 .card__content-left {
265 display: flex;
266 flex-direction: column;
267 margin-right: 20px;
268 justify-content: space-between;
269 height: 100%;
270 }
271 #content .saa-featured-cards-2024 .card__content-right {
272 flex: 1;
273 margin-top: 20px;
274 }
275 #content .saa-featured-cards-2024 .card__image {
276 border-radius: 12px;
277 width: 100%;
278 height: auto;
279 border-radius: 8px;
280 max-width: 112px !important;
281 max-height: 112px;
282 margin-top: -10px;
283 object-fit: contain;
284 }
285 #content .saa-featured-cards-2024 .card__image--vertical {
286 margin-top: -20px;
287 }
288 #content .saa-featured-cards-2024 .product-offer-type {
289 margin-bottom: 6px;
290 color: white;
291 letter-spacing: 1px;
292 font-size: 13px;
293 font-weight: 400;
294 line-height: 1.5;
295 }
296 #content .saa-featured-cards-2024 .product-offer-type sup {
297 font-size: 10px;
298 line-height: 13px;
299 }
300 #content .saa-featured-cards-2024 .offer-copy {
301 color: white;
302 }
303 #content .saa-featured-cards-2024 .card__learn-more {
304 background-color: #fff;
305 border: 1px solid white;
306 color: var(--ecdma-text-color);
307 font-size: 13px;
308 cursor: pointer;
309 text-decoration: none;
310 text-align: center;
311 text-transform: capitalize;
312 line-height: 15px;
313 margin-top: 5px;
314 min-width: 112px;
315 height: 35px;
316 line-height: 35px;
317 }
318 #content .saa-featured-cards-2024 .card__learn-more:hover {
319 background-color: var(--ecdma-hover-color);
320 color: #fff;
321 }
322 #content .saa-featured-cards-2024 .card__learn-more:focus {
323 outline: 1px solid white;
324 outline-offset: 3px;
325 }
326</style>
327<script>
328/* This template is added to a single page multiple times. iife keeps glider/vars from overriding each other */
329(() => {
330 let featuredGlider = null;
331 if(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider')) {
332 featuredGlider = new Glider(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider'), {
333 slidesToShow: 'auto',
334 itemWidth: 375,
335 slidesToScroll: 1,
336 scrollLockDelay: 100,
337 draggable: true,
338 scrollLock: true,
339 arrows: {
340 prev: '#${uniqueID}.saa-featured-cards-2024 .glider-prev',
341 next: '#${uniqueID}.saa-featured-cards-2024 .glider-next'
342 },
343 dots: '#${uniqueID}.saa-featured-cards-2024 .dots',
344 });
345 }
346 const images = document.querySelectorAll('#${uniqueID}.saa-featured-cards-2024 .card__image');
347 images.forEach(img => {
348 const width = img.naturalWidth;
349 const height = img.naturalHeight;
350 if(height > width) {
351 img.classList.add('card__image--vertical');
352 }
353 });
354
355 AUI().ready(() => {
356 /* Make the slider the correct size after the theme and everything is loaded*/
357 if(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider')){
358 featuredGlider.refresh(false);
359 }
360
361 const productTypeValue = '${productTypeValue}';
362 const thisTabSelector = productTypeValue === "Personal"? '#tab-Personal' : '#tab-Business';
363 /* If the resize the screen and one of the featured card glider is hidden. The hidden glider dose not resize. On show of glider resize it. */
364 document.querySelectorAll(thisTabSelector).forEach(tab => {
365 tab.onclick = () => {
366 setTimeout(() => {featuredGlider.refresh(false);}, 0);
367 };
368 });
369 })
370})();
371</script>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> bCode [in template "10154#10192#18372589" at line 14, column 70] ---- 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 fiData = utilServ.makeCall("c... [in template "10154#10192#18372589" at line 14, column 1] ----
1<#assign uniqueID = randomNamespace />
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()>
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign environment = url?replace('/11t2/index.*','','r')>
5<#assign projectIds = ["12", "13", "14", "15", "16"]>
6<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! >
7
8<#if qstringmap["bankercode"]?has_content>
9 <#assign bCode= qstringmap["bankercode"]?first>
10 <#assign bCode = htmlUtil.escape(bCode)>
11 <#assign bCode = htmlUtil.escapeJS(bCode)>
12</#if>
13
14<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
15<#if fiData?first?has_content>
16 <#assign fi = fiData?first>
17 <#if projectIds?seq_index_of(fi.projectId) != -1>
18 <#assign subbu_special = fi.offerId>
19 </#if>
20</#if>
21
22
23<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
24<#list bData as b>
25 <#assign lc = b.locationcode >
26 <#assign rLC = b.reallocationcode >
27 <#assign mappedLC = b.mappedLocationCode >
28</#list>
29
30<#if mappedLC?has_content>
31 <#assign lc = mappedLC >
32</#if>
33
34<#if lc?has_content>
35 <#assign prefix = "00000" >
36 <#assign lcWithPrefix = prefix + lc >
37 <#assign withPrefixLength = lcWithPrefix?length >
38 <#assign startHere = withPrefixLength - 5>
39 <#assign lc = lcWithPrefix?substring(startHere)>
40</#if>
41
42<#if qstringmap["ecid"]?has_content>
43 <#assign ecidExt = qstringmap["ecid"]?first>
44 <#assign ecidExt = htmlUtil.escape(ecidExt)>
45 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
46 <#assign ecidExt = "&ecid=" + ecidExt>
47<#else>
48 <#assign ecidExt="">
49</#if>
50
51
52<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
53<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
54<#assign clientProfile = clientProfileList?first>
55<#assign pbu = clientProfile.getPbu()>
56<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
57<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
58<#assign partnerName = clientProfile.getMarketingNameLong()>
59
60<#if (subbu_special?has_content)>
61 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&' + pbu + '&' + subbu_special)>
62<#else>
63 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&' + pbu + '&' + subbu)>
64</#if>
65
66<#assign personalBusinessOfferTypes = utilServ.makeCall('SAA_DistinctCardOffers', '0')>
67
68<#assign personalOfferTypes = []>
69<#assign businessOfferTypes = []>
70
71<#list personalBusinessOfferTypes as pbOfferType>
72 <#if pbOfferType.groupname?has_content && pbOfferType.offertype?has_content>
73 <#if pbOfferType.groupname == "Personal">
74 <#assign personalOfferTypes += [pbOfferType.offertype]>
75 <#elseif pbOfferType.groupname == "Business">
76 <#assign businessOfferTypes += [pbOfferType.offertype]>
77 </#if>
78 </#if>
79</#list>
80
81
82<#assign productTypeValue = "">
83<#if productType.getData()?has_content>
84 <#assign productKey = productType.getData()>
85 <#assign productTypeValue = productType.optionsMap[productKey]>
86
87</#if>
88
89<#assign personalCards = []>
90<#assign businessCards = []>
91<#assign finalList = []>
92<#assign index = 0>
93
94<#list fiCardsData as fib>
95 <#if (fib.offerType?has_content)>
96 <#if (personalOfferTypes?seq_contains(fib.offerType))>
97 <#assign personalCards = personalCards + fiCardsData[index..index]>
98 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
99 <#assign businessCards = businessCards + fiCardsData[index..index]>
100 </#if>
101 </#if>
102 <#assign index = index + 1>
103</#list>
104
105
106<#if productTypeValue == "Personal">
107 <#list personalCards as personalCard>
108 <#if product.getSiblings()?has_content>
109 <#list product.getSiblings() as productItem>
110 <#if personalCard.offerType == productItem.productOfferType.getData()>
111 <#assign finalList = finalList + [personalCard]>
112 </#if>
113 </#list>
114 </#if>
115 </#list>
116<#elseif productTypeValue == "Business">
117 <#list businessCards as businessCard>
118 <#if product.getSiblings()?has_content>
119 <#list product.getSiblings() as productItem>
120 <#if businessCard.offerType == productItem.productOfferType.getData()>
121 <#assign finalList = finalList + [businessCard]>
122 </#if>
123 </#list>
124 </#if>
125 </#list>
126</#if>
127
128<#macro renderCards finalListMacro>
129 <#assign count = 0>
130 <#list finalListMacro as result>
131 <#if count < 3>
132 <#if product.getSiblings()?has_content>
133 <#list product.getSiblings() as productItem>
134 <#if result.offerType == productItem.productOfferType.getData()>
135
136 <#assign productOfferTypeValue = product.productOfferType.optionsMap[productItem.productOfferType.getData()]>
137 <#assign productOfferType = productOfferTypeValue?substring(productOfferTypeValue?index_of(" - ") + 3)!''>
138
139 <div class="card">
140 <div class="card__content">
141
142 <div class="card__content-left">
143 <#assign cardArtImage = cdnCardArtUrl + "/" + result.filename + ".png" >
144 <#assign cardArtImageAlt = cdnCardArtUrl + "/" + result.filename + ".jpg" >
145 <#assign cardArtImageAltText = partnerName + " " + productOfferType>
146 <img class="card__image" src="${cardArtImage!''}" alt="${cardArtImageAltText}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
147
148 <#if (productItem.learnMoreURL.getData())??>
149 <a class="card__learn-more" href="${environment}${productItem.learnMoreURL.getData()!''}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}" rel="noopener noreferrer">
150 Learn More <span class="sr-only">about ${productOfferType?upper_case!}</span>
151 </a>
152 </#if>
153
154 </div>
155
156
157 <div class="card__content-right">
158 <h3 class="product-offer-type">
159 ${productOfferType?upper_case!}
160
161 <#if (productItem.cardNameFootnotes.getData())??>
162 <sup>${productItem.cardNameFootnotes.getData()}</sup>
163 </#if>
164 </h3>
165
166 <#if (productItem.offerCopy.getData())??>
167 <div class="offer-copy">
168 ${productItem.offerCopy.getData()}
169 </div>
170 </#if>
171
172 </div>
173 </div>
174 </div>
175
176 </#if>
177 </#list>
178 </#if>
179 <#assign count = count + 1>
180 </#if>
181 </#list>
182</#macro>
183
184<#if (finalList?? && finalList?has_content && finalList?size > 1)>
185 <#assign count = 0>
186 <#assign countGlider = 0>
187 <div class="${productTypeValue}-featured-cards saa-featured-cards-2024 <#if productTypeValue == 'Business'>hide</#if>" id="${uniqueID}">
188 <h2 id="featured-glider-label" class="super-head">FEATURED CREDIT CARD OFFERS</h2>
189 <div class="card-container">
190 <@renderCards finalListMacro=finalList />
191 </div>
192 <div class="featured-glider-container" aria-roledescription="carousel" aria-labelledby="featured-glider-label">
193 <div id="featured-glider-slides" class="featured-glider">
194 <@renderCards finalListMacro=finalList />
195 </div>
196 <button aria-label="Previous slide" class="glider-prev" aria-controls="featured-glider-slides"></button>
197 <button aria-label="Next slide" class="glider-next" aria-controls="featured-glider-slides"></button>
198 <div role="tablist" class="dots"></div>
199 </div>
200 </div>
201</#if>
202<style>
203 #content .saa-featured-cards-2024 {
204 max-width: 1336px;
205 padding: 0 20px;
206 margin: 0 auto;
207 }
208 @media (min-width: 1376px) {
209 #content .saa-featured-cards-2024 {
210 margin-top: 30px;
211 }
212 }
213 #content .saa-featured-cards-2024 .featured-glider-container {
214 display: block !important;
215 position: relative;
216 margin-bottom: 20px;
217 }
218 #content .saa-featured-cards-2024 .featured-glider-container .card {
219 flex: 375px;
220 }
221 @media (min-width: 1200px) {
222 #content .saa-featured-cards-2024 .featured-glider-container {
223 display: none !important;
224 }
225 }
226 #content .saa-featured-cards-2024 .featured-glider {
227 padding-top: 40px;
228 margin-bottom: 15px;
229 overflow-x: hidden;
230 }
231 #content .saa-featured-cards-2024 .card-container {
232 display: flex;
233 gap: 30px;
234 flex-wrap: nowrap;
235 justify-content: space-between;
236 margin-top: 40px;
237 margin-bottom: 60px;
238 display: none !important;
239 justify-content: center;
240 }
241 @media (min-width: 1200px) {
242 #content .saa-featured-cards-2024 .card-container {
243 display: flex !important;
244 }
245 }
246 #content .saa-featured-cards-2024 .card {
247 background-color: var(--ecdma-bg-color);
248 border-radius: 10px;
249 padding: 0 20px 15px 20px;
250 margin: 0 20px;
251 flex: 33%;
252 flex-grow: 0;
253 visibility: unset !important;
254 }
255 @media (min-width: 1200px) {
256 #content .saa-featured-cards-2024 .card {
257 margin: 0;
258 }
259 }
260 #content .saa-featured-cards-2024 .card__content {
261 display: flex;
262 height: 100%;
263 }
264 #content .saa-featured-cards-2024 .card__content-left {
265 display: flex;
266 flex-direction: column;
267 margin-right: 20px;
268 justify-content: space-between;
269 height: 100%;
270 }
271 #content .saa-featured-cards-2024 .card__content-right {
272 flex: 1;
273 margin-top: 20px;
274 }
275 #content .saa-featured-cards-2024 .card__image {
276 border-radius: 12px;
277 width: 100%;
278 height: auto;
279 border-radius: 8px;
280 max-width: 112px !important;
281 max-height: 112px;
282 margin-top: -10px;
283 object-fit: contain;
284 }
285 #content .saa-featured-cards-2024 .card__image--vertical {
286 margin-top: -20px;
287 }
288 #content .saa-featured-cards-2024 .product-offer-type {
289 margin-bottom: 6px;
290 color: white;
291 letter-spacing: 1px;
292 font-size: 13px;
293 font-weight: 400;
294 line-height: 1.5;
295 }
296 #content .saa-featured-cards-2024 .product-offer-type sup {
297 font-size: 10px;
298 line-height: 13px;
299 }
300 #content .saa-featured-cards-2024 .offer-copy {
301 color: white;
302 }
303 #content .saa-featured-cards-2024 .card__learn-more {
304 background-color: #fff;
305 border: 1px solid white;
306 color: var(--ecdma-text-color);
307 font-size: 13px;
308 cursor: pointer;
309 text-decoration: none;
310 text-align: center;
311 text-transform: capitalize;
312 line-height: 15px;
313 margin-top: 5px;
314 min-width: 112px;
315 height: 35px;
316 line-height: 35px;
317 }
318 #content .saa-featured-cards-2024 .card__learn-more:hover {
319 background-color: var(--ecdma-hover-color);
320 color: #fff;
321 }
322 #content .saa-featured-cards-2024 .card__learn-more:focus {
323 outline: 1px solid white;
324 outline-offset: 3px;
325 }
326</style>
327<script>
328/* This template is added to a single page multiple times. iife keeps glider/vars from overriding each other */
329(() => {
330 let featuredGlider = null;
331 if(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider')) {
332 featuredGlider = new Glider(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider'), {
333 slidesToShow: 'auto',
334 itemWidth: 375,
335 slidesToScroll: 1,
336 scrollLockDelay: 100,
337 draggable: true,
338 scrollLock: true,
339 arrows: {
340 prev: '#${uniqueID}.saa-featured-cards-2024 .glider-prev',
341 next: '#${uniqueID}.saa-featured-cards-2024 .glider-next'
342 },
343 dots: '#${uniqueID}.saa-featured-cards-2024 .dots',
344 });
345 }
346 const images = document.querySelectorAll('#${uniqueID}.saa-featured-cards-2024 .card__image');
347 images.forEach(img => {
348 const width = img.naturalWidth;
349 const height = img.naturalHeight;
350 if(height > width) {
351 img.classList.add('card__image--vertical');
352 }
353 });
354
355 AUI().ready(() => {
356 /* Make the slider the correct size after the theme and everything is loaded*/
357 if(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider')){
358 featuredGlider.refresh(false);
359 }
360
361 const productTypeValue = '${productTypeValue}';
362 const thisTabSelector = productTypeValue === "Personal"? '#tab-Personal' : '#tab-Business';
363 /* If the resize the screen and one of the featured card glider is hidden. The hidden glider dose not resize. On show of glider resize it. */
364 document.querySelectorAll(thisTabSelector).forEach(tab => {
365 tab.onclick = () => {
366 setTimeout(() => {featuredGlider.refresh(false);}, 0);
367 };
368 });
369 })
370})();
371</script>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> lc [in template "10154#10192#460248067" at line 38, column 34] ---- 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 lcWithPrefix = prefix + lc [in template "10154#10192#460248067" at line 38, column 1] ----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()>
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign projectIds = ["12", "13", "14", "15", "16"]>
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! >
5
6<#if qstringmap["bankercode"]?has_content>
7 <#assign bCode= qstringmap["bankercode"]?first>
8 <#assign bCode= htmlUtil.escapeJS(bCode)>
9 <#assign bCode= htmlUtil.escape(bCode)>
10 <#assign isEmployee = false>
11
12 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
13 <#if fiData?first?has_content>
14 <#assign fi = fiData?first>
15 <#if projectIds?seq_index_of(fi.projectId) != -1>
16 <#assign subbu_special = fi.offerId>
17 </#if>
18
19 <#if fi.projectType == "emp">
20 <#assign isEmployee = true>
21 </#if>
22 </#if>
23
24 <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
25 <#list bData as b>
26 <#assign lc = b.locationcode >
27 <#assign bName = b.branch >
28 <#assign bPhone = b.businessphone >
29 <#assign boeid = b.oeid?trim>
30 <#assign fName = b.firstname?trim>
31 <#assign lName = b.lastname?trim>
32 <#assign rLC = b.reallocationcode >
33 <#assign mappedLC = b.mappedLocationCode >
34 </#list>
35</#if>
36
37<#assign prefix = "00000" >
38<#assign lcWithPrefix = prefix + lc >
39<#assign withPrefixLength = lcWithPrefix?length >
40<#assign startHere = withPrefixLength - 5>
41<#assign lc = lcWithPrefix?substring(startHere)>
42
43
44<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
45<#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
46<#assign clientProfile = clientProfileList?first>
47<#assign pbu = clientProfile.getPbu()>
48<#assign subbu = clientProfile.getSUBBRANDBUNBR()>
49
50<#if (subbu_special?has_content)>
51 <#assign fiCardsDataWT = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
52<#else>
53 <#assign fiCardsDataWT = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
54</#if>
55
56<#assign personalBusinessWT = utilServ.makeCall('SAA_PillGrouping', '0')>
57<#assign personalWT = []>
58<#assign businessWT = []>
59
60<#list personalBusinessWT as pbWT>
61 <#if pbWT.groupName?has_content && pbWT.offerType?has_content && pbWT.pillName?has_content> <#if pbWT.groupName == "Personal">
62 <#assign personalWT += [pbWT]>
63
64 <#elseif pbWT.groupName == "Business">
65 <#assign businessWT += [pbWT]>
66
67 </#if>
68 </#if>
69</#list>
70
71
72<#assign fiPersonalRaw = personalWT?filter(personalPill -> fiCardsDataWT?filter(fib -> personalPill.offerType == fib.offerType)?size > 0)>
73<#assign fiBusinessRaw = businessWT?filter(businessPill -> fiCardsDataWT?filter(fib -> businessPill.offerType == fib.offerType)?size > 0)>
74
75<#assign fiPersonalWT = []>
76<#list fiPersonalRaw as item>
77 <#if !(fiPersonalWT?map(it -> it.offerType)?seq_contains(item.offerType))>
78 <#assign fiPersonalWT += [item]>
79 </#if>
80</#list>
81
82<#assign fiBusinessWT = []>
83<#list fiBusinessRaw as item>
84 <#if !(fiBusinessWT?map(it -> it.offerType)?seq_contains(item.offerType))>
85 <#assign fiBusinessWT += [item]>
86 </#if>
87</#list>
88
89<#assign fiPersonalSizeWT = fiPersonalWT?size />
90<#assign fiBusinessSizeWT = fiBusinessWT?size />
91
92<#assign hasTabs = entries?has_content>
93<#assign PersonalTab = "Personal">
94<#assign BusinessTab = "Business">
95
96<#if hasTabs>
97 <div class="saa-tabs-2024-feature">
98 <#if (fiPersonalSizeWT > 0 && fiBusinessSizeWT > 0 && !isEmployee) >
99 <div role="tablist" class="card-type-tabs" aria-label="Choose a credit card type to explore details">
100
101 <button
102 id="tab-Personal"
103 role="tab"
104 class="card-type-tabs__button"
105 aria-selected="true"
106 aria-controls="content-Personal"
107 data-tab="content-Personal">
108 ${PersonalTab}
109 </button>
110
111 <button
112 id="tab-Business"
113 role="tab"
114 class="card-type-tabs__button"
115 aria-selected="false"
116 aria-controls="content-Business"
117 data-tab="content-Business">
118 ${BusinessTab}
119 </button>
120
121 </div>
122 </#if>
123 <div class="all-card-types-content">
124 <#if (fiPersonalSizeWT > 0)>
125 <div
126 id="content-Personal"
127 class="card-type-content"
128 role="tabpanel"
129 aria-labelledby="tab-Personal"
130 style="display: block;">
131
132 <#list entries as entry>
133 <#if entry_index == 0>
134 <#assign assetRenderer = entry.getAssetRenderer() />
135 <@liferay_journal["journal-article"]
136 articleId=assetRenderer.getAssetObject().articleId
137 ddmTemplateKey=assetRenderer.getAssetObject().ddmTemplateKey
138 groupId=assetRenderer.getAssetObject().groupId />
139 </#if>
140 </#list>
141 </div>
142 </#if>
143 <#if (fiBusinessSizeWT > 0 && !isEmployee)>
144 <div
145 id="content-Business"
146 class="card-type-content"
147 role="tabpanel"
148 aria-labelledby="tab-Business"
149 style="display: none;">
150
151 <#list entries as entry>
152 <#if entry_index == 1>
153 <#assign assetRenderer = entry.getAssetRenderer() />
154 <@liferay_journal["journal-article"]
155 articleId=assetRenderer.getAssetObject().articleId
156 ddmTemplateKey=assetRenderer.getAssetObject().ddmTemplateKey
157 groupId=assetRenderer.getAssetObject().groupId />
158 </#if>
159 </#list>
160 </div>
161 </#if>
162 </div>
163 </div>
164</#if>
165
166<script>
167 AUI().ready(() => {
168 if(${fiPersonalSizeWT} > 0) {
169 hideOrShowDisclaimers("Personal");
170 } else {
171 hideOrShowDisclaimers("Business");
172 }
173 });
174 function setPillAndSelectToDefault() {
175 const buttons = document.querySelectorAll('.saa-tabs-2024 .card-feature-pills__button');
176 buttons.forEach(button => {
177 button.classList.remove('active');
178 button.setAttribute('aria-selected', 'false');
179 });
180
181 buttons.forEach(button => {
182 if (button.getAttribute('data-pill') === 'All Cards') {
183 button.classList.add('active');
184 button.setAttribute('aria-selected', 'true');
185 }
186 });
187
188 const cardFeatureSelect = document.querySelectorAll('.saa-tabs-2024 .card-feature-select' );
189 cardFeatureSelect.forEach(select=> {
190 if(select.value) {
191 select.value = 'All Cards';
192 }
193 });
194 }
195 document.addEventListener("DOMContentLoaded", function () {
196 const tabs = document.querySelectorAll(".card-type-tabs__button");
197 const tabContents = document.querySelectorAll(".card-type-content");
198
199 tabs.forEach((tab) => {
200 tab.addEventListener("click", () => {
201
202 tabs.forEach((t) => t.setAttribute("aria-selected", "false"));
203
204 tabContents.forEach((content) => {
205 content.style.display = "none";
206 });
207
208 tab.setAttribute("aria-selected", "true");
209
210 const targetContent = document.getElementById(tab.dataset.tab);
211 targetContent.style.display = "block";
212
213 const productType = tab.textContent.trim(); // Get the tab label as the product type
214 widgetButtonSlection(productType);
215 });
216 });
217 });
218
219 function widgetButtonSlection( productType) {
220 hideOrShowFeaturedCards(productType);
221 hideOrShowDisclaimers(productType);
222 hideAllPillSections();
223 document.getElementById("allcards-container-"+productType).style.display = "block";
224 setPillAndSelectToDefault();
225 }
226
227 function hideAllPillSections() {
228 document.getElementById("allcards-container-Personal").style.display = "none";
229 document.getElementById("cashback-container-Personal").style.display = "none";
230 document.getElementById("points-container-Personal").style.display = "none";
231 document.getElementById("travel-container-Personal").style.display = "none";
232 document.getElementById("noannualfee-container-Personal").style.display = "none";
233 document.getElementById("buildcredit-container-Personal").style.display = "none";
234 document.getElementById("lowintrorate-container-Personal").style.display = "none";
235
236 document.getElementById("allcards-container-Business").style.display = "none";
237 document.getElementById("cashback-container-Business").style.display = "none";
238 document.getElementById("points-container-Business").style.display = "none";
239 document.getElementById("travel-container-Business").style.display = "none";
240 document.getElementById("noannualfee-container-Business").style.display = "none";
241 document.getElementById("buildcredit-container-Business").style.display = "none";
242 document.getElementById("lowintrorate-container-Business").style.display = "none";
243 }
244
245 function hideOrShowFeaturedCards(type) {
246 const personalFeaturedCards = document.querySelector('.Personal-featured-cards');
247 const businessFeaturedCards = document.querySelector('.Business-featured-cards');
248
249 if (type === "Personal") {
250 if (personalFeaturedCards) {
251 personalFeaturedCards.classList.remove('hide');
252 }
253 if (businessFeaturedCards) {
254 businessFeaturedCards.classList.add('hide');
255 }
256 } else if (type === "Business") {
257 if (businessFeaturedCards) {
258 businessFeaturedCards.classList.remove('hide');
259 }
260 if (personalFeaturedCards) {
261 personalFeaturedCards.classList.add('hide');
262 }
263 }
264 }
265
266 function hideOrShowDisclaimers(type) {
267 const personalDisclaimers = document.querySelector('.tier1-disclaimer-landing-consumer');
268 const businessDisclaimers = document.querySelector('.tier1-disclaimer-landing-business');
269 if (type === "Personal") {
270 if (personalDisclaimers) {
271 personalDisclaimers.classList.remove('hide');
272 }
273 if (businessDisclaimers) {
274 businessDisclaimers.classList.add('hide');
275 }
276 } else if (type === "Business") {
277 if (businessDisclaimers) {
278 businessDisclaimers.classList.remove('hide');
279 }
280 if (personalDisclaimers) {
281 personalDisclaimers.classList.add('hide');
282 }
283 }
284 }
285</script>
286
287<style>
288 .saa-tabs-2024-feature {
289 max-width: 1336px;
290 margin: 0 20px;
291 }
292 @media (min-width: 1376px) {
293 .saa-tabs-2024-feature {
294 margin: 0 auto;
295 }
296 }
297 .card-type-tabs {
298 display: flex;
299 justify-content: flex-start;
300 border-bottom: 1px solid #cccccc;
301 }
302
303 .card-type-tabs__button {
304 align-items: center;
305 background-color: transparent;
306 border: none;
307 border-bottom: 4px solid transparent;
308 color: #333;
309 display: flex;
310 flex-direction: column;
311 justify-content: center;
312 padding: 10px 30px;
313 text-align: center;
314 font-size: 20px;
315 font-weight: 700;
316 line-height: 25px;
317 margin-bottom: -1px;
318 flex: 1;
319 }
320 @media (min-width: 992px) {
321 .card-type-tabs__button {
322 flex: 0;
323 }
324 }
325 .card-type-tabs__button:focus {
326 outline: 1px solid #173989;
327 }
328 .card-type-tabs__button[aria-selected="true"] {
329 color: var(--ecdma-text-color);
330 border-bottom: 4px solid var(--ecdma-text-color);
331 }
332 .card-type-tabs__button:hover {
333 color: var(--ecdma-hover-color);
334 border-bottom: 4px solid var(--ecdma-hover-color);
335 }
336
337 .all-card-types-content {
338 }
339
340 .card-type-content {
341 display: none;
342 }
343
344 .card-type-content[style="display: block;"] {
345 display: block !important;
346 }
347
348</style>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10154#10192#18386847" 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 "10154#10192#18386847" 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 bCode = htmlUtil.escape(bCode)>
7<#assign bCode = htmlUtil.escapeJS(bCode)>
8
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
10<#list bData as b>
11 <#assign lc = b.locationcode >
12 <#assign rLC = b.reallocationcode >
13 <#assign mappedLC = b.mappedLocationCode >
14</#list>
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
16 <#assign ameriprise = true>
17<#else>
18 <#assign ameriprise = false>
19</#if>
20<#if mappedLC?has_content && !ameriprise>
21 <#assign lc = mappedLC >
22</#if>
23
24
25<#if lc?has_content>
26 <#assign prefix = "00000" >
27 <#assign lcWithPrefix = prefix + lc >
28 <#assign withPrefixLength = lcWithPrefix?length >
29 <#assign startHere = withPrefixLength - 5>
30 <#assign lc = lcWithPrefix?substring(startHere)>
31 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
32 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
33
34 <#assign clientProfile = clientProfileList?first>
35 <#assign partnerName=clientProfile.getMarketingNameLong()>
36
37 <#assign pbu = clientProfile.getPbu()>
38 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
39 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
40 <#assign isEmployee = false>
41
42 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
43 <#if fiData?first?has_content>
44 <#assign fi = fiData?first>
45 <#if fi.projectType == "emp">
46 <#assign isEmployee = true>
47 </#if>
48 </#if>
49
50 <#assign fultonBankpbu = "0727491">
51 <#if pbu == fultonBankpbu>
52 <style>
53 #hideFultonInfo {
54 display: none;
55 }
56 </style>
57 </#if>
58
59
60 <#if (fiCardsData?size > 0) >
61 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
62
63 <#if (cardProvider?size > 0)>
64 <#-- This will be V for visa or M for mastercard. -->
65 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
66 <#else>
67 <script>
68 console.log("No card provider(Visa/Master Card) found for disclaimer");
69 </script>
70 </#if>
71
72 <div class="page-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer">
73 <div class="page-disclaimer__content">
74 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerAssociatedBank.getData()?has_content>
75 <#if isEmployee && employeeDisclaimerAssociatedBank?has_content>
76 ${employeeDisclaimerAssociatedBank.getData()}
77 <#else>
78 ${disclaimerAssociatedBank.getData()}
79 </#if>
80 <#else>
81 <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
82 ${employeeDisclaimersVisa.getData()}
83 <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
84 ${employeeDisclaimersMasterCard.getData()}>
85 <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
86 ${disclaimersVisa.getData()}
87 <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
88 ${disclaimersMasterCard.getData()}
89 </#if>
90 </#if>
91 </div>
92 </div>
93 </#if>
94<#else>
95 <script>
96 console.log("No lc for disclaimer");
97 </script>
98</#if>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10154#10192#18386847" 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 "10154#10192#18386847" 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 bCode = htmlUtil.escape(bCode)>
7<#assign bCode = htmlUtil.escapeJS(bCode)>
8
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
10<#list bData as b>
11 <#assign lc = b.locationcode >
12 <#assign rLC = b.reallocationcode >
13 <#assign mappedLC = b.mappedLocationCode >
14</#list>
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
16 <#assign ameriprise = true>
17<#else>
18 <#assign ameriprise = false>
19</#if>
20<#if mappedLC?has_content && !ameriprise>
21 <#assign lc = mappedLC >
22</#if>
23
24
25<#if lc?has_content>
26 <#assign prefix = "00000" >
27 <#assign lcWithPrefix = prefix + lc >
28 <#assign withPrefixLength = lcWithPrefix?length >
29 <#assign startHere = withPrefixLength - 5>
30 <#assign lc = lcWithPrefix?substring(startHere)>
31 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
32 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
33
34 <#assign clientProfile = clientProfileList?first>
35 <#assign partnerName=clientProfile.getMarketingNameLong()>
36
37 <#assign pbu = clientProfile.getPbu()>
38 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
39 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
40 <#assign isEmployee = false>
41
42 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
43 <#if fiData?first?has_content>
44 <#assign fi = fiData?first>
45 <#if fi.projectType == "emp">
46 <#assign isEmployee = true>
47 </#if>
48 </#if>
49
50 <#assign fultonBankpbu = "0727491">
51 <#if pbu == fultonBankpbu>
52 <style>
53 #hideFultonInfo {
54 display: none;
55 }
56 </style>
57 </#if>
58
59
60 <#if (fiCardsData?size > 0) >
61 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
62
63 <#if (cardProvider?size > 0)>
64 <#-- This will be V for visa or M for mastercard. -->
65 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
66 <#else>
67 <script>
68 console.log("No card provider(Visa/Master Card) found for disclaimer");
69 </script>
70 </#if>
71
72 <div class="page-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer">
73 <div class="page-disclaimer__content">
74 <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && disclaimerAssociatedBank.getData()?has_content>
75 <#if isEmployee && employeeDisclaimerAssociatedBank?has_content>
76 ${employeeDisclaimerAssociatedBank.getData()}
77 <#else>
78 ${disclaimerAssociatedBank.getData()}
79 </#if>
80 <#else>
81 <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
82 ${employeeDisclaimersVisa.getData()}
83 <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
84 ${employeeDisclaimersMasterCard.getData()}>
85 <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
86 ${disclaimersVisa.getData()}
87 <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
88 ${disclaimersMasterCard.getData()}
89 </#if>
90 </#if>
91 </div>
92 </div>
93 </#if>
94<#else>
95 <script>
96 console.log("No lc for disclaimer");
97 </script>
98</#if>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10154#10192#18386837" at line 14, 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 "10154#10192#18386837" at line 14, column 1] ----
1<#--
2Web content templates are used to lay out the fields defined in a web
3content structure.
4
5Please use the left panel to quickly add commonly used variables.
6Autocomplete is also available and can be invoked by typing "${".
7--><#assign aDateTime = .now>
8<#assign currentYear = aDateTime?string.yyyy>
9<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
10<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
11<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
12<#assign url404 = '/error/404.html'>
13
14<#assign bCode= qstringmap["bankercode"]?first>
15<#assign bCode = htmlUtil.escape(bCode)>
16<#assign bCode = htmlUtil.escapeJS(bCode)>
17
18<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
19<#list bData as b>
20 <#assign lc = b.locationcode >
21 <#assign rLC = b.reallocationcode >
22 <#assign mappedLC = b.mappedLocationCode >
23</#list>
24
25<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
26 <#assign ameriprise = true>
27<#else>
28 <#assign ameriprise = false>
29</#if>
30<#if mappedLC?has_content && !ameriprise>
31 <#assign lc = mappedLC >
32</#if>
33
34<#if lc?has_content>
35
36 <#assign prefix = "00000" >
37 <#assign lcWithPrefix = prefix + lc >
38 <#assign withPrefixLength = lcWithPrefix?length >
39 <#assign startHere = withPrefixLength - 5>
40 <#assign lc = lcWithPrefix?substring(startHere)>
41<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
42 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
43
44 <#assign clientProfile = clientProfileList?first>
45 <#assign pbu = clientProfile.getPbu()>
46 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
47 <#assign partnerName=clientProfile.getMarketingNameLong()>
48 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
49 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
50 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
51 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
52 <#-- add protocal if missing -->
53 <#assign partnerUrl = 'https://' + partnerUrl>
54 </#if>
55 <footer class="page-footer">
56 <div class="page-footer__content">
57 ${footerContent.getData()}
58 </div>
59 </footer>
60
61 <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
62 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
63 <style>
64 #opt-out-button,
65 .modal__btn.learn-more {
66 background: #0C2074;
67 border: 1px solid #0C2074;
68 color: white;
69 text-transform: uppercase;
70 text-decoration: none;
71 font-size: 16px;
72 padding: 0.5rem 2rem;
73 display: inline-block;
74 border-radius: 0;
75 }
76 #opt-out-button:hover,
77 .modal__btn.learn-more:hover {
78 color: white;
79 border-color: #2C76AF !important;
80 background-color: #2C76AF !important;
81 }
82 .modal__btn.learn-more {
83 background: white;
84 border: 1px solid #0C2074;
85 color: #0C2074;
86 }
87 #opt-out-button[disabled="true"] {
88 background-color: rgba(0,0,0,.15);
89 color: rgba(0,0,0,.45);
90 border-color: rgba(0,0,0,.25);
91 }
92 #opt-out-button:hover[disabled="true"] {
93 background-color: rgba(0,0,0,.15) !important;
94 color: rgba(0,0,0,.45) !important;
95 border-color: rgba(0,0,0,.25) !important;
96 }
97 #opt-out-button:focus {
98 outline-style: solid;
99 outline-color: white;
100 outline-offset: -3px;
101 outline-width: 1px;
102 }
103 .opt-out-link svg {
104 width: 30px;
105 height: 14px;
106 width: auto;
107 vertical-align: middle;
108 }
109 .modal__overlay {
110 position: fixed;
111 top: 0;
112 left: 0;
113 right: 0;
114 bottom: 0;
115 background: rgba(0,0,0,0.6);
116 display: flex;
117 justify-content: center;
118 align-items: center;
119 }
120
121 .modal__container {
122 background-color: #fff;
123 padding: 30px;
124 max-width: 500px;
125 max-height: 100vh;
126 border-radius: 4px;
127 overflow-y: auto;
128 box-sizing: border-box;
129 }
130
131 .modal__header {
132 display: flex;
133 justify-content: space-between;
134 align-items: center;
135 }
136
137 .modal__title {
138 margin-top: 0;
139 margin-bottom: 0;
140 font-weight: 600;
141 font-size: 20px;
142 line-height: 1.25;
143 color: #00449e;
144 box-sizing: border-box;
145 }
146
147 .modal__close {
148 background: transparent;
149 border: 1px solid white;
150 padding: 4px 8px;
151 }
152 .modal__close:hover {
153 border: 1px solid black;
154 }
155
156 .modal__header .modal__close:before { content: "\2715"; }
157
158 .modal__content {
159 margin-top: 2rem;
160 margin-bottom: 2rem;
161 line-height: 1.5;
162 }
163
164 @keyframes mmfadeIn {
165 from { opacity: 0; }
166 to { opacity: 1; }
167 }
168
169 @keyframes mmfadeOut {
170 from { opacity: 1; }
171 to { opacity: 0; }
172 }
173
174 @keyframes mmslideIn {
175 from { transform: translateY(15%); }
176 to { transform: translateY(0); }
177 }
178
179 @keyframes mmslideOut {
180 from { transform: translateY(0); }
181 to { transform: translateY(-10%); }
182 }
183
184 .micromodal-slide {
185 display: none;
186 }
187
188 .micromodal-slide.is-open {
189 display: block;
190 }
191
192 .micromodal-slide[aria-hidden="false"] .modal__overlay {
193 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
194 }
195
196 .micromodal-slide[aria-hidden="false"] .modal__container {
197 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
198 }
199
200 .micromodal-slide[aria-hidden="true"] .modal__overlay {
201 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
202 }
203
204 .micromodal-slide[aria-hidden="true"] .modal__container {
205 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
206 }
207
208 .micromodal-slide .modal__container,
209 .micromodal-slide .modal__overlay {
210 will-change: transform;
211 }
212 </style>
213
214 <div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
215 <div class="modal__overlay" tabindex="-1" data-micromodal-close>
216 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
217 <header class="modal__header">
218 <h2 class="modal__title" id="modal-1-title">
219 Your California privacy choices
220 </h2>
221 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
222 </header>
223 <div class="modal__content" id="modal-1-content">
224 <div id="message-no-cookie">
225 <p>
226 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>
227
228 <p> </p>
229
230 <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>
231 </div>
232 <div id="message-with-cookie">
233 <p>You have successfully opted-out.</p>
234 </div>
235 </div>
236 <div class="modal__footer">
237 <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>
238 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
239 </div>
240 </div>
241 </div>
242 </div>
243 <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
244 <script>
245 const fdicNode = document.querySelector('.page-footer .fdic');
246 </script>
247 <script>
248 const copyrightNode = document.querySelector('.page-footer .copyright');
249 if (copyrightNode) {
250 copyrightNode.innerHTML = '© Elan Financial Services ' + ${currentYear};
251 }
252
253 </script>
254 <#if url?contains("11t1m")>
255 <script>
256 copyrightNode.classList.add("ecdma-footer-client-name-copyright");
257 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
258 </script>
259 <#else>
260 <script>
261 copyrightNode.classList.add("ecdma-footer-client-name-copyright");
262 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
263 var newNode = document.createElement("div");
264 newNode.classList.add("member-agreement");
265 newNode.innerHTML='<a class="text-color-white" href="https://onboarding.elancreditcard.com/usl/generic/credit-card/application/card-member-agreements?locationCode=${lc!0}" target="_blank">Cardmember Agreements</a>';
266 var parent = fdicNode.parentNode;
267 parent.insertBefore(newNode, fdicNode);
268 </script>
269 </#if>
270
271 <#if partnerUrl?has_content>
272 <script>
273 const homeLink = document.querySelector('.copyright .homelink');
274 if(homeLink) {
275 homeLink.innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>";
276 }
277 </script>
278 </#if>
279
280 <script>
281 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
282 fdicNode.insertAdjacentHTML('afterend', '<div class="opt-out-container"><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>');
283 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
284 </script>
285 <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
286
287 <script>
288 window.getCookieDomain = function() {
289 var hostname = window.location.hostname.split(".");
290 return hostname && hostname.slice(hostname.length - 2).join(".");
291 }
292 window.setToOptOut = function() {
293 if (window.getCookie('privacy_optout')) {
294 document.getElementById('message-no-cookie').style.display = 'none';
295 document.getElementById('message-with-cookie').style.display = 'block';
296 document.getElementById('opt-out-button').setAttribute('disabled', true)
297 } else {
298 document.getElementById('message-no-cookie').style.display = 'block';
299 document.getElementById('message-with-cookie').style.display = 'none';
300 }
301 }
302 window.getCookie = function(name) {
303 var value = '; ' + document.cookie;
304 var parts = value.split('; ' + name + '=');
305 if (parts.length === 2) return parts.pop().split(';').shift();
306 }
307 window.californiaOptOut = function() {
308 if (!window.getCookie('privacy_optout')) {
309 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
310 try {
311 if (window.CustomEvent) {
312 window.dispatchEvent(new CustomEvent('privacy_optout'));
313 } else {
314 var privacyOptoutEvent = document.createEvent('Event');
315 privacyOptoutEvent.initEvent('privacy_optout', true, true);
316 window.dispatchEvent(privacyOptoutEvent);
317 }
318 window.setToOptOut();
319 } catch (err) {
320 console.error(err);
321 }
322 }
323 }
324 MicroModal.init({
325 onShow: window.setToOptOut
326 });
327 AUI().ready(function() {
328 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
329 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
330 if(isBrowserGpcOptOut === true) {
331 window.californiaOptOut();
332 }
333 });
334 </script>
335 <!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->
336
337</#if>