An error occurred while processing the template.
The following has evaluated to null or missing: ==> (PortletPreferencesLocalService.getPortletPreferences(themeDisplay.getPlid(), portletId)?first) [in template "20116#20152#33020" at line 249, column 53] ---- 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 portletPreferencesXML = saxRe... [in template "20116#20152#33020" at line 249, 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-->
8<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() />
9<#assign themeDisplay = serviceContext.getThemeDisplay() />
10<#assign preview = false/>
11
12<#if (themeDisplay.getURLCurrent()?contains("preview_article_content.jsp")) || (themeDisplay.getURLCurrent()?contains("preview_article_content_template.jsp"))>
13 <#assign preview = true />
14
15 <script data-senna-track="permanent"
16 src="/o/atk-dot-com-theme/js/react/dist/vendor.bundle.js"></script>
17
18 <script data-senna-track="permanent"
19 src="/o/atk-dot-com-theme/js/react/dist/bundle.js"></script>
20
21 <style data-senna-track="temporary" type="text/css">
22 :root {
23 --container-max-sm: 576px;
24 --h4-font-size: 22px;
25 --font-weight-bold: 700;
26 --rounded-pill: 50rem;
27 --navigation-submenu-item-float: left;
28 --display4-weight: 300;
29 --danger: #da1414;
30 --atk-row: absolute;
31 --display2-size: 5.5rem;
32 --body-bg: #f9f9f9;
33 --display2-weight: 300;
34 --display1-weight: 300;
35 --display3-weight: 300;
36 --box-shadow-sm: 0 .125rem .25rem rgba(0, 0, 0, .075);
37 --text-align-hero-text-container: center;
38 --cta-background-color: #F5F5F5;
39 --font-weight-lighter: lighter;
40 --h3-font-size: 36px;
41 --btn-outline-primary-hover-border-color: #0b5fff;
42 --transition-collapse: height .35s ease;
43 --blockquote-small-color: #6b6c7e;
44 --gray-200: #f1f2f5;
45 --btn-secondary-hover-background-color: #f7f8f9;
46 --gray-600: #6b6c7e;
47 --secondary: #6b6c7e;
48 --btn-outline-primary-color: #0b5fff;
49 --btn-link-hover-color: #004ad7;
50 --hr-border-color: rgba(0, 0, 0, .1);
51 --hr-border-margin-y: 1rem;
52 --light: #f1f2f5;
53 --btn-outline-primary-hover-color: #0b5fff;
54 --font-weight-read-more: 400;
55 --btn-secondary-background-color: #fff;
56 --btn-outline-secondary-hover-border-color: transparent;
57 --display3-size: 4.5rem;
58 --primary: #0b5fff;
59 --container-max-md: 768px;
60 --border-radius-sm: 0.1875rem;
61 --display-line-height: 1.2;
62 --font-family-hero-text: 'Graphik Web';
63 --h6-font-size: 0.8125rem;
64 --h2-font-size: 44px;
65 --aspect-ratio-4-to-3: 75%;
66 --font-family-read-more: 'Graphik Web';
67 --spacer-10: 10rem;
68 --font-family-semibold: 'Graphik Web';
69 --font-weight-normal: 400;
70 --dark: #272833;
71 --blockquote-small-font-size: 80%;
72 --h5-font-size: 0.875rem;
73 --blockquote-font-size: 1.25rem;
74 --transition-fade: opacity .15s linear;
75 --display4-size: 3.5rem;
76 --border-radius-lg: 0.375rem;
77 --btn-primary-hover-color: #fff;
78 --display1-size: 6rem;
79 --black: #000;
80 --gray-300: #e7e7ed;
81 --gray-700: #495057;
82 --btn-secondary-border-color: #cdced9;
83 --btn-outline-secondary-hover-color: #272833;
84 --purple: #7823DC;
85 --body-color: #111;
86 --btn-outline-secondary-hover-background-color: rgba(39, 40, 51, 0.03);
87 --font-weight-button-body: 400;
88 --btn-primary-color: #fff;
89 --btn-secondary-color: #6b6c7e;
90 --btn-secondary-hover-border-color: #cdced9;
91 --box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, .175);
92 --container-max-lg: 992px;
93 --btn-outline-primary-border-color: #0b5fff;
94 --aspect-ratio: 100%;
95 --cta-link-hover-color: #000;
96 --body-container: #fff;
97 --cta-link-color: #7823DC;
98 --aspect-ratio-16-to-9: 56.25%;
99 --box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);
100 --white: #fff;
101 --portlet-bg-color: #272833;
102 --warning: #b95000;
103 --info: #2e5aac;
104 --hr-border-width: 1px;
105 --btn-link-color: #0b5fff;
106 --gray-400: #cdced9;
107 --font-weight-hero-text-h4: 100;
108 --gray-800: #393a4a;
109 --font-weight-semibold: 600;
110 --btn-outline-primary-hover-background-color: #f0f5ff;
111 --btn-primary-hover-background-color: #0053f0;
112 --btn-primary-background-color: #0b5fff;
113 --font-weight-heading4: 100;
114 --font-weight-hero-text-h1: 600;
115 --font-weight-heading3: 400;
116 --success: #287d3c;
117 --font-family-heading4: 'Graphik Web';
118 --font-family-heading3: 'Graphik Web';
119 --font-weight-heading2: 400;
120 --font-weight-heading1: 600;
121 --font-size-sm: 0.875rem;
122 --font-family-heading2: 'Graphik Web';
123 --btn-primary-border-color: #0b5fff;
124 --font-family-heading1: 'Graphik Web';
125 --font-family-base: 'Arabic', sans-serif;
126 --spacer-0: 0;
127 --font-family-monospace: 'Arabic', sans-serif;
128 --lead-font-size: 1.25rem;
129 --border-radius: 0.25rem;
130 --spacer-9: 9rem;
131 --font-weight-light: 300;
132 --btn-secondary-hover-color: #272833;
133 --spacer-2: 0.5rem;
134 --font-family-button-body: 'Graphik Web';
135 --spacer-1: 0.25rem;
136 --spacer-4: 1.5rem;
137 --spacer-3: 1rem;
138 --spacer-6: 4.5rem;
139 --spacer-5: 3rem;
140 --spacer-8: 7.5rem;
141 --border-radius-circle: 50%;
142 --spacer-7: 6rem;
143 --font-size-lg: 1.125rem;
144 --aspect-ratio-8-to-3: 37.5%;
145 --font-family-sans-serif: 'Arabic', sans-serif;
146 --gray-100: #f7f8f9;
147 --font-weight-bolder: 900;
148 --container-max-xl: 1280px;
149 --btn-outline-secondary-color: #6b6c7e;
150 --custom-black: #1E1E1E;
151 --gray-500: #a7a9bc;
152 --h1-font-size: 66px;
153 --gray-900: #272833;
154 --text-muted: #a7a9bc;
155 --btn-primary-hover-border-color: transparent;
156 --btn-outline-secondary-border-color: #cdced9;
157 --lead-font-weight: 300;
158 --font-size-base: 0.875rem;
159 }
160
161 .article-breadcrumb
162 a{
163 color: var(--purple) !important;
164 text-decoration: underline !important;
165 text-decoration-color: #E6E6E6 !important;
166 }
167
168 .article-figure
169 img{
170 max-width: 100% !important;
171 }
172
173 #articleDiv
174 {
175 word-wrap:break-word;
176 }
177
178 .buttonBodyContainer:hover
179 a{
180 color: #ffffff !important;
181 }
182
183 .black-to-garnet-author{
184 color: var(--custom-black) !important;
185 text-decoration: underline !important;
186 text-decoration-color: #E6E6E6 !important;
187 }
188
189 .article-square-bio:hover
190 a{
191 color: var(--purple) !important;
192 text-decoration: underline !important;
193 text-decoration-color: #E6E6E6 !important;
194 }
195
196 .atk-article
197 a{
198 color: var(--purple) !important;
199 text-decoration: underline !important;
200 text-decoration-color: #E6E6E6 !important;
201 }
202
203 .atk-article
204 a:hover{
205 text-decoration: none !important;
206 }
207 </style>
208
209</#if>
210
211<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
212<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
213<#assign AssetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")>
214<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
215<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
216<#assign AssetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")/>
217<#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
218<#assign PortletPreferencesLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.PortletPreferencesLocalService")/>
219<#assign PropertyFactoryUtil = serviceLocator.findService("com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil") />
220<#assign GroupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")>
221<#assign LayoutSetService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutSetLocalService")>
222<#assign DynamicQueryFactoryUtil = serviceLocator.findService("com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil") />
223<#assign virtualHostLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.VirtualHostLocalService") />
224<#assign TemplateCustomService = serviceLocator.findService("template.custom.services.TemplateCustomService") />
225<#assign ArticleTemplateCustomService = serviceLocator.findService("template.custom.services.ArticleTemplateCustomService") />
226
227<#assign
228serviceContextThreadLocal = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"]
229themeDisplay = serviceContextThreadLocal.getServiceContext().getThemeDisplay()
230/>
231
232<#assign CurrentJournalArticle = JournalArticleLocalService.getLatestArticle(groupId,.vars['reserved-article-id'].data)>
233<#assign CurrentAssetEntry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle",CurrentJournalArticle.getResourcePrimKey())>
234<#assign AssetLinks=AssetLinkLocalService.getDirectLinks(CurrentAssetEntry.getEntryId()) >
235
236<#assign PropertyFactoryUtil = serviceLocator.findService("com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil") />
237
238<#-- update name here if change asset library name -->
239<#assign assetLibGroup = GroupLocalService.getGroup(themeDisplay.getCompanyId(), "Kearney Global Asset Library") />
240<#if assetLibGroup?? >
241 <#assign assetLibGroupId = assetLibGroup.getGroupId() />
242</#if>
243
244<#assign assetLinkOrder = CurrentJournalArticle.getExpandoBridge().getAttribute("Related Asset Ordering")!"" />
245
246<#if !(preview)>
247<#-- ATK 40 changes start -->
248<#assign portletId = themeDisplay.getPortletDisplay().getId()>
249<#assign portletPreferencesXML = saxReaderUtil.read((PortletPreferencesLocalService.getPortletPreferences(themeDisplay.getPlid(), portletId)?first).getPreferences())>
250
251<#-- Macro used to get specific field text from an Asset Entry -->
252<#macro entryNode document field>
253 <#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??>
254 "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}"
255 <#else>
256 ""
257 </#if>
258</#macro>
259
260<#-- Macro used to get specific portlet preference -->
261<#macro preference prefKey prefIndex defaultValue>
262 <#if portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value")??>
263 "${portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value").getText()?js_string}"<#return>
264 <#else>
265 "${defaultValue?js_string}"<#return>
266 </#if>
267</#macro>
268<#-- ATK 40 changes end -->
269</#if>
270
271<#if (preview)>
272<#-- ATK 40 changes start -->
273<#assign portletId = (PortletPreferencesLocalService.getPortletPreferencesByPlid(themeDisplay.getPlid())?first).getPortletId() >
274<#assign portletPreferencesXML = saxReaderUtil.read((PortletPreferencesLocalService.getPortletPreferencesByPlid(themeDisplay.getPlid())?first).getPreferences())>
275
276<#-- Macro used to get specific field text from an Asset Entry -->
277<#macro entryNode document field>
278 <#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??>
279 "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}"
280 <#else>
281 ""
282 </#if>
283</#macro>
284
285<#-- Macro used to get specific portlet preference -->
286<#macro preference prefKey prefIndex defaultValue>
287 <#if portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value")??>
288 "${portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value").getText()?js_string}"<#return>
289 <#else>
290 "${defaultValue?js_string}"<#return>
291 </#if>
292</#macro>
293<#-- ATK 40 changes end -->
294</#if>
295
296<#-- ATK-659 -->
297<#assign displayDate = "" />
298<#if CurrentJournalArticle.getDisplayDate()?has_content>
299 <#assign displayDate = CurrentJournalArticle.getDisplayDate()?date?string('MMMM dd, yyyy') />
300</#if>
301<#-- schema vars starts -->
302<#assign modifiedDate = "" />
303<#if CurrentJournalArticle.getModifiedDate()?has_content>
304 <#assign modifiedDate = CurrentJournalArticle.getModifiedDate()?date?string('yyyy-MM-dd') />
305</#if>
306<#assign displayDateForSchema = "" />
307<#if CurrentJournalArticle.getDisplayDate()?has_content>
308 <#assign displayDateForSchema = CurrentJournalArticle.getDisplayDate()?date?string('yyyy-MM-dd') />
309</#if>
310<#assign imageurlpartial = "" />
311<#assign imageurlschema = "" />
312<#assign currenturi = "" />
313<#if (ThumbnailSquare.getData())??>
314 <#if (ThumbnailSquare.getData())?contains("?")>
315 <#assign imageurlpartial = (ThumbnailSquare.getData())?keep_before("?") />
316 <#else>
317 <#assign imageurlpartial = ThumbnailSquare.getData() />
318 </#if>
319 <#assign imageurlschema = themeDisplay.getCDNBaseURL() + imageurlpartial />
320</#if>
321<#if themeDisplay.getURLCurrent()?has_content >
322 <#if (themeDisplay.getURLCurrent())?contains("?") >
323 <#assign currenturi = (themeDisplay.getURLCurrent())?keep_before("?") />
324 <#else>
325 <#assign currenturi = (themeDisplay.getURLCurrent()) />
326 </#if>
327</#if>
328<#assign pageurlcurrent = themeDisplay.getCDNBaseURL() + currenturi />
329<#assign answer =''>
330<#if Intro.getData()?has_content >
331 <#assign answer = Intro.getData()/>
332 <#else>
333 <#if Content.getSiblings()?has_content>
334 <#list Content.getSiblings() as cur_Content>
335 <#if (cur_Content.getData())??>
336 <#assign withouthtml = cur_Content.getData()?replace('<[^>]+>','','r') />
337 <#assign withouthtml = withouthtml?replace('\\n+','','r') />
338 <#assign withouthtml = withouthtml?replace('\\t+','','r') />
339 <#assign withouthtml = withouthtml?replace('\\r+','','r') />
340 <#assign withouthtml = withouthtml?replace(' ','','r') />
341 <#assign answer += withouthtml />
342 </#if>
343 </#list>
344 </#if>
345</#if>
346<#-- schema ends -->
347<div id="articleDiv">
348</div>
349
350<script>
351
352 var articleMetadata = {};
353 articleMetadata.slug = "${Slug.getData()?js_string}";
354 articleMetadata.articleTitle = "${ArticleTitle.getData()?js_string}";
355
356 <#if HeroImage??>
357 articleMetadata.heroImage = "${HeroImage.getData()?js_string}";
358 </#if>
359 <#if HeroMobile??>
360 articleMetadata.heroMobile = "${HeroMobile.getData()?js_string}";
361 </#if>
362
363 <#--
364 Set articleMetadata.publicTestArticle to restrict social sharing functionality to a single article.
365 Otherwise, leave commented to allow social sharing on all articles.
366 -->
367 <#--articleMetadata.publicTestArticle = 'test-article-url';-->
368
369
370 <#if SmallerTitle??>
371 articleMetadata.smallerTitle = ${getterUtil.getBoolean(SmallerTitle.getData())?c};
372 <#else>
373 articleMetadata.smallerTitle = false;
374 </#if>
375
376 articleMetadata.subtitle = "${Subtitle.getData()?js_string}";
377 articleMetadata.intro = "${Intro.getData()?js_string}";
378
379 <#assign LandingArticle = false />
380 <#if LandingPage??>
381 articleMetadata.landingPage = '${getterUtil.getBoolean(LandingPage.getData())?c}';
382 <#assign LandingArticle = getterUtil.getBoolean(LandingPage.getData()) />
383 <#else>
384 articleMetadata.landingPage = false;
385 </#if>
386
387 <#if SocialLinks??>
388 articleMetadata.socialLinks = ${getterUtil.getBoolean(SocialLinks.getData())?c};
389 <#else>
390 articleMetadata.socialLinks = true;
391 </#if>
392
393 <#if GraySeparator??>
394 articleMetadata.graySeparator = ${getterUtil.getBoolean(GraySeparator.getData())?c};
395 <#else>
396 articleMetadata.graySeparator = false;
397 </#if>
398
399 <#if ShowParentBreadcrumb?? && LandingPage?? && getterUtil.getBoolean(LandingPage.getData()) == true>
400 articleMetadata.showParentBreadcrumb = ${getterUtil.getBoolean(ShowParentBreadcrumb.getData())?c}
401 <#else>
402 articleMetadata.showParentBreadcrumb = true;
403 </#if>
404
405 <#if BreadcrumbLabel??>
406 articleMetadata.parentBreadcrumbLabel = "${BreadcrumbLabel.getData()?js_string}";
407 </#if>
408
409 <#if BreadcrumbURL??>
410 articleMetadata.parentBreadcrumbURL = "${BreadcrumbURL.getData()?js_string}";
411 </#if>
412
413 <#if Byline??>
414 articleMetadata.byline = "${Byline.getData()?js_string}";
415 </#if>
416
417 <#if FeaturedContributor??>
418 articleMetadata.featuredContributor = "${FeaturedContributor.getData()}"
419 </#if>
420
421 <#if PostArticleSlideShareKey?? && PostArticleSlideShareKey.PostArticleSlideshareContent??>
422 articleMetadata.postArticleSlideshareKey = "${PostArticleSlideShareKey.getData()}"
423
424 articleMetadata.postArticleSlideshareContent = "${PostArticleSlideShareKey.PostArticleSlideshareContent.getData()}"
425 </#if>
426
427 <#if PDF??>
428 articleMetadata.pdf = "${PDF.getData()?js_string}"
429 <#else>
430 articleMetadata.pdf = "";
431 </#if>
432
433 var articleContents = [];
434 <#if Content.getSiblings()?has_content>
435 <#list Content.getSiblings() as cur_Content>
436
437 var images = [];
438
439 <#if cur_Content.PrimaryImage?has_content>
440 <#list cur_Content.PrimaryImage.getSiblings() as cur_PrimaryImage>
441
442 var image = {"imageURL": "${cur_PrimaryImage.getData()?js_string}"};
443
444 <#if cur_Content.PrimaryImage.SlideshowCaption??>
445 image["caption"] = "${cur_PrimaryImage.SlideshowCaption.getData()?js_string}";
446 </#if>
447
448 image["sharingEnabled"] = ${(cur_PrimaryImage.SharingEnabled?? && cur_PrimaryImage.SharingEnabled.getData() == "true")?c};
449
450 images.push(image);
451
452 </#list>
453 </#if>
454
455 articleContents.push({
456 <#if cur_Content.FeatureSlug??>
457 slug: "${cur_Content.FeatureSlug.getData()?js_string}",
458 </#if>
459 <#if cur_Content.TextAlignment??>
460 textAlignment: "${cur_Content.TextAlignment.getData()?js_string}",
461 </#if>
462 content: "${cur_Content.getData()?js_string}",
463 styling: "${cur_Content.stylingSelect.getData()?js_string}",
464 alternateText: "${cur_Content.AlternateText.getData()?js_string}",
465 primaryImage: images,
466 secondaryImage: "${cur_Content.SecondaryMaskImage.getData()?js_string}",
467 buttonText: "${cur_Content.ButtonText.getData()?js_string}",
468 buttonURL: "${cur_Content.ButtonURL.getData()?js_string}",
469 displayDate: "${displayDate}"
470 });
471
472
473 </#list>
474 </#if>
475
476 var bios = [];
477 <#assign articleGroup = GroupLocalService.getGroup(CurrentAssetEntry.getGroupId())
478 guestGroup = GroupLocalService.getFriendlyURLGroup(articleGroup.getCompanyId(), "/guest") />
479 <#--
480 Create list of groups that asset entries live in, so that linked bios can be retrieved by UUID
481 -->
482 <#assign assetLinkGroups = []>
483 <#if AssetLinks?has_content>
484 <#list AssetLinks as assetLink>
485 <#assign linkedAssetEntry = AssetEntryLocalService.getAssetEntry(assetLink.getEntryId2())>
486 <#assign assetLinkGroups = assetLinkGroups + [linkedAssetEntry.getGroupId()]>
487 </#list>
488 </#if>
489
490 //Create asset link ordering
491 var assetOrderArr = [];
492
493 <#list assetLinkOrder?split(",") as assetLinkUUID>
494 <#--
495 Find group which asset link is stored in and assign the resulting asset entry
496 -->
497 <#assign orderAssetEntry = "">
498
499 <#list assetLinkGroups as assetLinkGroupId>
500 <#assign orderAssetEntry = AssetEntryLocalService.fetchEntry(assetLinkGroupId, assetLinkUUID)!"">
501
502 <#if orderAssetEntry != "">
503 <#break />
504 </#if>
505 </#list>
506
507 <#if orderAssetEntry != "">
508 <#assign orderJournalArticle = JournalArticleLocalService.fetchLatestArticle(orderAssetEntry.getClassPK())!"">
509 <#if orderJournalArticle != "">
510 assetOrderArr.push("${orderJournalArticle.getArticleId()}");
511 </#if>
512 </#if>
513 </#list>
514
515 var assetOrderMap = {};
516
517 for(var order=1; order<assetOrderArr.length; order++) {
518 assetOrderMap[assetOrderArr[order-1]] = order;
519 }
520
521 var getAssetOrder = function(uuid) {
522 var order = assetOrderMap[uuid];
523 if(!order) {
524 order = Object.keys(assetOrderMap).length + 1;
525 assetOrderMap[uuid] = order;
526 }
527
528 return order;
529 };
530 <#assign authorlistschema = [] />
531 <#if Authors?? && Authors.getSiblings()?has_content>
532
533 var bioC =0;
534 <#list Authors.getSiblings() as cur_Authors>
535
536 <#if cur_Authors.getData() != "" >
537 <#assign cur_webContent_map = jsonFactoryUtil.createJSONObject(cur_Authors.getData())>
538 <#assign cur_webContent_classPK = cur_webContent_map.getString("classPK")>
539 <#if cur_webContent_classPK??>
540 <#if JournalArticleLocalService.fetchLatestArticle(cur_webContent_classPK?number)??>
541 <#assign articleK = JournalArticleLocalService.fetchLatestArticle(cur_webContent_classPK?number)>
542 <#assign articleKAssetEntry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle",articleK.getResourcePrimKey()) />
543
544 <#if articleKAssetEntry?? && articleKAssetEntry.getAssetRenderer()??>
545 <#assign xml = saxReaderUtil.read(articleKAssetEntry.getAssetRenderer().getArticle().getContentByLocale(themeDisplay.getLocale())) />
546
547
548
549 <#assign xml_fullName = xml.valueOf("//dynamic-element[@name='FullName']/dynamic-content/text()") />
550 <#assign xml_title = xml.valueOf("//dynamic-element[@name='Title']/dynamic-content/text()") />
551 <#assign xml_headshot = TemplateCustomService.getDocumentURL(xml,"CutoutHeadshot",themeDisplay)/>
552
553
554 var bio1 = {};
555 bio1.structureKey=('${articleK.getDDMStructure().getName("en_US")}');
556 bio1.weight= ++bioC;
557 bio1.fullName = '${xml_fullName}';
558 bio1.headshot = '${xml_headshot?js_string}';
559 bio1.title = '${xml_title}';
560 <#if (articleGroup.getLiveGroupId() != 0 ) >
561 <#assign articleK = JournalArticleLocalService.getArticleByUrlTitle(assetLibGroupId, articleK.getUrlTitle()) />
562 </#if>
563 <#assign viewURL = '' />
564
565 <#if articleK.getDDMStructure().getName("en_US") == "Bio Page">
566 <#assign viewURL = themeDisplay.getPortalURL() + "/about/people/bio/" + xml_fullName?lower_case?replace(" ", "-")/>
567 </#if>
568
569 bio1.bioURL = '${viewURL}';
570 bios.push(bio1);
571
572 <#assign viewURLschema = ''/>
573 <#if viewURL?has_content>
574 <#assign viewURLschema = viewURL />
575 </#if>
576 <#assign authordataschema = {"url":viewURLschema, "jobTitle":xml_title, "name":xml_fullName} />
577 <#assign authorlistschema = authorlistschema + [authordataschema] />
578 </#if>
579 </#if>
580 </#if>
581 </#if>
582
583 </#list>
584
585 </#if>
586
587 <#assign oldwaytogetauthourforschema = false>
588 <#if authorlistschema?size == 0>
589 <#assign oldwaytogetauthourforschema = true>
590 </#if>
591
592 if (bios.length == 0){
593 <#if AssetLinks?has_content>
594
595 <#list AssetLinks as assetLink>
596 <#assign linkedAssetEntry = AssetEntryLocalService.getAssetEntry(assetLink.getEntryId2())>
597 <#assign linkedJournalArticle = JournalArticleLocalService.getLatestArticle(linkedAssetEntry.getClassPK())>
598 <#assign xml = saxReaderUtil.read(linkedAssetEntry.getAssetRenderer().getArticle().getContentByLocale(themeDisplay.getLocale())) />
599 <#assign structureKey = linkedJournalArticle.getDDMStructure().getName("en_US") />
600
601 var bio = {};
602
603 <#assign xml_headshot = TemplateCustomService.getDocumentURL(xml,"CutoutHeadshot",themeDisplay)/>
604 <#if structureKey == "Bio Page" || structureKey == "Micro Bio" >
605 <#assign xml_fullName = xml.valueOf("//dynamic-element[@name='FullName']/dynamic-content/text()") />
606 <#assign xml_title = xml.valueOf("//dynamic-element[@name='Title']/dynamic-content/text()") />
607 bio.structureKey=('${structureKey}').trim();
608 bio.weight = getAssetOrder("${linkedJournalArticle.getArticleId()}");
609 bio.fullName = "${xml_fullName}";
610 bio.position = "${xml.valueOf("//dynamic-element[@name='Position']/dynamic-content/text()")?js_string}";
611 bio.title = "${xml_title?js_string}";
612 bio.headshot = "${xml_headshot?js_string}";
613 bio.description = "${xml.valueOf("//dynamic-element[@name='Description']/dynamic-content/text()")?js_string}";
614 bio.linkedInURL = "${xml.valueOf("//dynamic-element[@name='LinkedInURL']/dynamic-content/text()")?js_string}";
615
616 <#assign viewURL = '' />
617 <#if linkedJournalArticle.getDDMStructure().getName("en_US") == "Bio Page">
618 <#assign viewURL = themeDisplay.getPortalURL() + "/about/people/bio/" + xml_fullName?lower_case?replace(" ", "-")/>
619 </#if>
620
621 bio.bioURL = '${viewURL}';
622 bios.push(bio);
623
624 <#assign viewURLschema = ''/>
625 <#if viewURL?has_content>
626 <#assign viewURLschema = viewURL />
627 </#if>
628
629 <#if oldwaytogetauthourforschema>
630 <#assign authordataschema = {"url":viewURLschema, "jobTitle":xml_title, "name":xml_fullName} />
631 <#assign authorlistschema = authorlistschema + [authordataschema] />
632 </#if>
633 </#if>
634 </#list>
635
636 bios.sort(function(bio1, bio2){
637 return bio1.weight - bio2.weight;
638 });
639 </#if>
640
641 }
642 <#assign assetCategories = AssetCategoryLocalService.getAssetEntryAssetCategories(CurrentAssetEntry.getEntryId())>
643
644 var articleCategories = [];
645
646 <#list assetCategories as category>
647 <#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())>
648 <#assign categoryUrl = "#">
649
650 <#list AssetCategoryPropertyLocalService.getCategoryProperties(category.categoryId) as categoryProperty>
651
652 <#if categoryProperty.key == "url">
653 <#assign categoryUrl = categoryProperty.value>
654 </#if>
655 </#list>
656
657 articleCategories.push({
658 id: "${category.categoryId}",
659 name: "${category.name}",
660 url: "${categoryUrl}",
661 vocabularyName: "${categoryVocabulary.getName()?js_string}",
662 });
663 </#list>
664
665 articleMetadata.categories = articleCategories;
666 <#if LayoutSetService.getLayoutSet(articleGroup.getGroupId(), false)??
667 && LayoutSetService.getLayoutSet(articleGroup.getGroupId(), false).getThemeSetting("isMicroSite", "regular")?? >
668 <#assign isMicroSite = (LayoutSetService.getLayoutSet(articleGroup.getGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")>
669 <#else>
670 <#assign isMicroSite = false>
671 </#if>
672
673 articleMetadata.isMicroSite = ${isMicroSite?c};
674 articleMetadata.groupName = "${articleGroup.getName("en_US")?js_string}";
675 articleMetadata.groupFriendlyUrl = "${articleGroup.getFriendlyURL()?js_string}";
676
677 <#if ReadMoreURL??>
678 articleMetadata.readMoreURL = "${ReadMoreURL.getData()?js_string}";
679 <#else>
680 articleMetadata.readMoreURL = "";
681 </#if>
682
683 <#if ReadMoreTextOverride??>
684 articleMetadata.readMoreTextOverride = "${ReadMoreTextOverride.getData()?js_string}";
685 <#else>
686 articleMetadata.readMoreTextOverride = "";
687 </#if>
688
689 <#if ContributorsTitleOverride??>
690 articleMetadata.contributorsTitleOverride = "${ContributorsTitleOverride.getData()?js_string}";
691 <#else>
692 articleMetadata.contributorsTitleOverride = "";
693 </#if>
694
695 <#if ReadMoreOverlay??>
696 articleMetadata.readMoreOverlay = ${getterUtil.getBoolean(ReadMoreOverlay.getData())?c}
697 <#else>
698 articleMetadata.readMoreOverlay = false;
699 </#if>
700
701 var sidebarContents = [];
702 <#assign enableSidebar = false>
703 <#if EnableSidebar??>
704 <#assign enableSidebar = getterUtil.getBoolean(EnableSidebar.getData())>
705 </#if>
706 <#-- Check if Sidebar is enabled or not -->
707 <#if enableSidebar == true>
708
709 <#assign listingOfArticles = false>
710 <#assign singleAssetWithImage = false>
711 <#assign richTextSection = false>
712 <#assign listView = false>
713 <#if EnableSidebar.ListingOfArticles??>
714 <#assign listingOfArticles = getterUtil.getBoolean(EnableSidebar.ListingOfArticles.getData())>
715 </#if>
716 <#if EnableSidebar.SingleAssetWithImage??>
717 <#assign singleAssetWithImage = getterUtil.getBoolean(EnableSidebar.SingleAssetWithImage.getData())>
718 </#if>
719 <#if EnableSidebar.RichTextSection??>
720 <#assign richTextSection = getterUtil.getBoolean(EnableSidebar.RichTextSection.getData())>
721 </#if>
722 <#if EnableSidebar.ListView??>
723 <#assign listView = getterUtil.getBoolean(EnableSidebar.ListView.getData())>
724 </#if>
725 <#-- If Asset publisher listing of articles is enabled -->
726 <#if listingOfArticles == true>
727 <#assign listOfArticlesTitles = "Related">
728 <#if EnableSidebar.ListingOfArticles.ListingOfArticlesTitle.getData()?has_content>
729 <#assign listOfArticlesTitles = EnableSidebar.ListingOfArticles.ListingOfArticlesTitle.getData()>
730 </#if>
731 <#assign manualArticlesEntries = {}>
732 <#if EnableSidebar.ListingOfArticles.SelectSidebarArticles??>
733 <#assign manualArticlesEntries = ArticleTemplateCustomService.getManualArticleList(EnableSidebar.ListingOfArticles.SelectSidebarArticles.getSiblings())>
734 </#if>
735 var manualArticlesEntry = [];
736 <#if manualArticlesEntries?size > 0 >
737 <#list manualArticlesEntries as curEntry>
738 <#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())>
739 <#assign viewURL = TemplateCustomService.getSidebarArticleViewURL(themeDisplay,jArt,assetLibGroup)/>
740 var articleEntry = {"articleTitle": "${TemplateCustomService.getSidebarArticleTitle(themeDisplay,jArt,assetLibGroup)}","articleURL":"${viewURL}"};
741 manualArticlesEntry.push(articleEntry);
742 </#list>
743 <#else>
744 <#assign noOfFeatureArticle = "3">
745 <#if EnableSidebar.ListingOfArticles.NoOfArticlesDisplayed.getData() != "0">
746 <#assign noOfFeatureArticle = EnableSidebar.ListingOfArticles.NoOfArticlesDisplayed.getData()>
747 </#if>
748 <#assign manualArticlesEntries = ArticleTemplateCustomService.getRelatedArticles(CurrentAssetEntry.getEntryId(), noOfFeatureArticle, "Any")>
749 <#list manualArticlesEntries as curEntry>
750 <#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())>
751 <#assign viewURL = TemplateCustomService.getSidebarArticleViewURL(themeDisplay,jArt,assetLibGroup)/>
752 var articleEntry = {"articleTitle": "${TemplateCustomService.getSidebarArticleTitle(themeDisplay,jArt,assetLibGroup)}","articleURL":"${viewURL}"};
753 manualArticlesEntry.push(articleEntry);
754 </#list>
755 </#if>
756 sidebarContents.push({
757 listingOfArticlesTitle:"${listOfArticlesTitles}",
758 manualArticles:manualArticlesEntry,
759 componentType:"listingOfArticles"
760
761 });
762 </#if>
763 <#-- Single Asset Image article -->
764 <#if singleAssetWithImage == true>
765 <#assign learnMoreText = "Learn more">
766 <#assign enableTNSImage = true>
767 <#assign enableSlug = true>
768 <#if (EnableSidebar.SingleAssetWithImage.SingleAssetWithImageArticle.LearnMoreButtonText.getData())??>
769 <#assign learnMoreText = EnableSidebar.SingleAssetWithImage.SingleAssetWithImageArticle.LearnMoreButtonText.getData()/>
770 </#if>
771 <#if EnableSidebar.SingleAssetWithImage.SingleAssetWithImageArticle.EnableTNSImage??>
772 <#assign enableTNSImage = getterUtil.getBoolean(EnableSidebar.SingleAssetWithImage.SingleAssetWithImageArticle.EnableTNSImage.getData())/>
773 </#if>
774 <#if EnableSidebar.SingleAssetWithImage.SingleAssetWithImageArticle.EnableSlug??>
775 <#assign enableSlug = getterUtil.getBoolean(EnableSidebar.SingleAssetWithImage.SingleAssetWithImageArticle.EnableSlug.getData())>
776 </#if>
777 <#assign singleAssetArticleData = jsonFactoryUtil.createJSONObject(EnableSidebar.SingleAssetWithImage.SingleAssetWithImageArticle.getData())/>
778 <#if singleAssetArticleData?has_content>
779 <#assign singleAssetArticle = ArticleTemplateCustomService.getManualArticle(EnableSidebar.SingleAssetWithImage.SingleAssetWithImageArticle.getData())>
780 <#assign jArt = JournalArticleLocalService.getLatestArticle(singleAssetArticle.getClassPK())>
781 <#assign document = saxReaderUtil.read(jArt.getContentByLocale(themeDisplay.getLocale()))>
782 <#assign structureName = jArt.getDDMStructure().getName("en_US")>
783 var componentType = "FEATURED_ARTICLE";
784 var title = <@entryNode document=document field="ArticleTitle"/>;
785 var subtitle = <@entryNode document=document field="Subtitle"/>;
786 var description = <@entryNode document=document field="Description"/>;
787 if (description == ""){
788 description = <@entryNode document=document field="Intro"/>;
789 }
790 var slug = <@entryNode document=document field="Slug"/>;
791 var linkTargetOverride = <@entryNode document=document field="LinkTargetOverride"/>;
792 if(linkTargetOverride == "" || linkTargetOverride == null){
793 linkTargetOverride = <@entryNode document=document field="LinkURL"/>;
794 }
795 <#assign articleGroup = GroupLocalService.getGroup(jArt.getGroupId())>
796 <#if LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false)??&& LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular")??>
797 <#assign isMicroSite = (LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")>
798 <#else>
799 <#assign isMicroSite = false>
800 </#if>
801 var image = '${TemplateCustomService.getDocumentURL(document,"ThumbnailSquare",themeDisplay)}';
802 if (null == image || "" == image) {
803 image = '${TemplateCustomService.getDocumentURL(document,"Thumbnail",themeDisplay)}';
804 }
805 if (null == image) {
806 image = "";
807 }
808 var singleAssetComponent = {
809 slug: slug,
810 title: title,
811 subtitle: subtitle,
812 description: description,
813 image: image.trim(),
814 groupFriendlyUrl: '${articleGroup.getFriendlyURL()}',
815 isMicrosite: ${isMicroSite?c},
816 linkTargetOverride: linkTargetOverride
817 }
818 sidebarContents.push({
819 singleAssetData:singleAssetComponent,
820 componentType:"singleAsset",
821 learnMoreTextValue:'${learnMoreText}',
822 enableSlugValue:${enableSlug?c},
823 enableTNSImageValue:${enableTNSImage?c}
824 });
825 </#if>
826 </#if>
827 <#-- Rich Text Section -->
828 <#if richTextSection == true>
829 var richTextSectionData = [];
830 <#if EnableSidebar.RichTextSection.RichTextSectionContent.getSiblings()?has_content>
831 <#list EnableSidebar.RichTextSection.RichTextSectionContent.getSiblings() as richTextData>
832 <#if (richTextData.getData())??>
833 <#assign richTextSection = richTextData.getData()>
834 richTextSectionData.push({
835 richTextSectionContent: '${richTextSection?js_string}'
836 });
837 </#if>
838 </#list>
839 </#if>
840
841 sidebarContents.push({
842 richTextContentData : richTextSectionData,
843 componentType:"richTextContent"
844 });
845 </#if>
846 <#-- List View -->
847 <#if listView == true>
848 var listViewComponentData = [];
849 <#assign listViewTitle = "Related">
850 <#assign displayListViewTitle = false>
851 <#if (EnableSidebar.ListView.ListViewTitle.getData())??>
852 <#assign listViewTitle = EnableSidebar.ListView.ListViewTitle.getData()>
853 </#if>
854 <#if (EnableSidebar.ListView.ListViewTitle.getData())??>
855 <#assign displayListViewTitle = getterUtil.getBoolean(EnableSidebar.ListView.ListViewTitle.DisplayListViewTitle.getData())>
856 </#if>
857 <#if EnableSidebar.ListView.ListViewText.getSiblings()?has_content>
858 <#list EnableSidebar.ListView.ListViewText.getSiblings() as listViewData>
859 <#assign listView = listViewData.getData()>
860 <#assign listlink = listViewData.ListViewLink.getData()>
861 listViewComponentData.push({
862 listViewTitle: '${listView}',
863 listViewLink: '${listlink}',
864 });
865 </#list>
866 </#if>
867 sidebarContents.push({
868 listViewData:listViewComponentData,
869 componentType:"listView",
870 listViewTitleValue:'${listViewTitle}',
871 displayListViewTitleValue: ${displayListViewTitle?c}
872 });
873 </#if>
874
875 </#if>
876
877 <#-- ATK - 902 Changes Start -->
878 ATK.isArticlePage = 'false';
879 <#if LandingArticle == false >
880 <#if themeDisplay.getURLCurrent()?contains("/article/") || themeDisplay.getURLCurrent()?contains("/-/") >
881 ATK.isArticlePage = 'true';
882 </#if>
883 </#if>
884 <#-- ATK - 902 Changes Over -->
885
886 ATK.React.App.Article('articleDiv', articleMetadata, articleContents, bios, sidebarContents);
887
888 // Run embedded scripts after article renders.
889 for (var i in articleContents) {
890
891 var re = /<script>(.+)<\/script>/gi;
892 var thisExtractedScript = ['', ''];
893
894 while (null != (thisExtractedScript = re.exec(articleContents[i].content))) {
895 window.eval(thisExtractedScript[1]);
896 }
897 }
898
899</script>
900<hr class="after-25-px-phone" style="width: 1000px; display: none;" id="hrfeatureArticle">
901<div id="articleAdtDiv_${portletId}" style="margin-top: 50px;margin-bottom: 50px;">
902</div>
903<script>
904<#assign enableRelatedInsights = false>
905
906<#if EnableRelatedInsights??>
907 <#assign enableRelatedInsights = getterUtil.getBoolean(EnableRelatedInsights.getData())>
908</#if>
909<#if enableRelatedInsights == true>
910<#assign multiArtBehavior = "Two Wide">
911<#assign gridTitle = "Also of interest">
912<#assign noOfFeatureArticle = "2">
913<#assign featureDisplayType = "Image Left">
914
915<#assign fullWidthDisplay = "false">
916<#assign greyBackground = "false">
917<#assign extraSpacer = "None">
918<#assign seeAllLink = "">
919<#assign seeAllLinkText = "">
920<#assign greyBackground = "false">
921<#assign extraSpacer = "None">
922<#assign autoplay = "false">
923<#assign featureDisplayButtonType = "Visible">
924<#assign featureDisplayButtonText = "">
925
926<#if GridTitle??>
927 <#assign gridTitle = GridTitle.getData()>
928</#if>
929<#if gridTitle?has_content>
930 <#-- ATK-712: Code Start -->
931 <#if gridTitle?matches("Related insights") || gridTitle?matches("Related Insights")>
932 <#assign gridTitle = "Also of interest">
933 </#if>
934 <#-- ATK-712: Code End -->
935<#else>
936 <#assign gridTitle = "Also of interest">
937</#if>
938<#if MultipleArticleBehavior??>
939 <#assign multiArtBehavior = MultipleArticleBehavior.getData()>
940</#if>
941<#if multiArtBehavior?has_content>
942<#else>
943 <#assign multiArtBehavior = "Two Wide">
944</#if>
945<#if NoOfFeatureArticles??>
946 <#assign noOfFeatureArticle = NoOfFeatureArticles.getData()>
947</#if>
948<#if noOfFeatureArticle?has_content>
949<#else>
950 <#assign noOfFeatureArticle = "2">
951</#if>
952
953<#if portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='featureDisTypeRelatedInsights']/value")??>
954 <#assign featureDisplayType = portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='featureDisTypeRelatedInsights']/value").getText()?js_string>
955</#if>
956
957<#assign jaEntries = {}>
958<#if RelatedInsightsArticles??>
959 <#assign jaEntries = ArticleTemplateCustomService.getManualArticleList(RelatedInsightsArticles.getSiblings())>
960</#if>
961
962<#if jaEntries?size == 0 >
963 <#assign jaEntries = ArticleTemplateCustomService.getRelatedArticles(CurrentAssetEntry.getEntryId(), noOfFeatureArticle, "Any")>
964</#if>
965
966<#if jaEntries?size == 0 >
967 <#assign gridTitle = " ">
968<#else>
969 $('#hrfeatureArticle').css('display','block');
970</#if>
971
972var entries = [];
973 <#if jaEntries?size > 0 >
974 <#list jaEntries as curEntry>
975
976 <#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())>
977 <#assign document = saxReaderUtil.read(jArt.getContentByLocale(themeDisplay.getLocale()))>
978
979 <#assign structureName = jArt.getDDMStructure().getName("en_US")>
980
981
982 var componentType = "FEATURED_ARTICLE";
983
984 var title = <@entryNode document=document field="ArticleTitle"/>;
985
986 var subtitle = <@entryNode document=document field="Subtitle"/>;
987
988 var description = <@entryNode document=document field="Description"/>;
989 if (description == ""){
990 description = <@entryNode document=document field="Intro"/>;
991 }
992
993 var slug = <@entryNode document=document field="Slug"/>;
994
995 <#assign articleGroup = GroupLocalService.getGroup(jArt.getGroupId())>
996
997 <#if LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false)??
998 && LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular")?? >
999 <#assign isMicroSite = (LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")>
1000 <#else>
1001 <#assign isMicroSite = false>
1002 </#if>
1003
1004 var image = '${TemplateCustomService.getDocumentURL(document,"ThumbnailSquare",themeDisplay)}';
1005 if (null == image || "" == image || ${(fullWidthDisplay == "true")?c}) {
1006 image = '${TemplateCustomService.getDocumentURL(document,"Thumbnail",themeDisplay)}';
1007 }
1008 if (null == image) {
1009 image = "";
1010 }
1011
1012 var componentData = {
1013 locale: "${locale}",
1014 structureName: "${structureName}",
1015 displayType: "${featureDisplayType}",
1016 slug: slug,
1017 title: title,
1018 subtitle: subtitle,
1019 description: description,
1020 image: image.trim(),
1021 groupFriendlyUrl: '${articleGroup.getFriendlyURL()}',
1022 isMicrosite: ${isMicroSite?c},
1023 multiArtBehavior: '${multiArtBehavior}',
1024 featureDisplayButtonText: '${featureDisplayButtonText}',
1025 featureDisplayButtonType: '${featureDisplayButtonType}',
1026 componentType: componentType
1027 };
1028 <#if structureName == "Article">
1029
1030 var linkTargetOverride = <@entryNode document=document field="LinkTargetOverride"/>;
1031
1032 if (linkTargetOverride !== ""){
1033 componentData.link = linkTargetOverride;
1034 } else {
1035 <#assign assetCategories = AssetCategoryLocalService.getAssetEntryAssetCategories(curEntry.getEntryId())>
1036
1037 var articleCategories = [];
1038
1039 <#list assetCategories as category>
1040 <#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())>
1041 <#assign categoryUrl = "#">
1042
1043 <#list AssetCategoryPropertyLocalService.getCategoryProperties(category.categoryId) as categoryProperty>
1044
1045 <#if categoryProperty.key == "url">
1046 <#assign categoryUrl = categoryProperty.value>
1047 </#if>
1048 </#list>
1049
1050 articleCategories.push({
1051 id: "${category.categoryId}",
1052 name: "${category.name}",
1053 url: "${categoryUrl}",
1054 vocabularyName: "${categoryVocabulary.getTitle(locale)}",
1055 });
1056
1057 </#list>
1058
1059
1060 componentData.categories = articleCategories;
1061 componentData.urlTitle = "${jArt.getUrlTitle()?js_string}";
1062 }
1063
1064 var byline = <@entryNode document=document field="Byline"/>;
1065 if (byline != null && byline != ""){
1066 componentData.byline = [];
1067 };
1068 </#if>
1069 entries.push(componentData);
1070 </#list>
1071 </#if>
1072
1073var componentVoiceSearch = "article";
1074var extraProps = {
1075 multiArtBehavior: "${multiArtBehavior}",
1076 gridTitle: "${gridTitle}",
1077 fullWidthDisplay: "${fullWidthDisplay}",
1078 greyBackground: "${greyBackground}",
1079 extraSpacer: "${extraSpacer}",
1080 seeAllLink: "${seeAllLink}",
1081 seeAllLinkText: "${seeAllLinkText}",
1082 componentVoiceSearch: componentVoiceSearch
1083 };
1084 ATK.React.Component.FeaturedMultiDisplay("articleAdtDiv_${portletId?js_string}", extraProps, entries);
1085</#if>
1086</script>
1087
1088<#compress>
1089<#if Slug.getData()?lower_case == "article" >
1090 <script id ="article-structured-data" type="application/ld+json">
1091 {
1092 "@context": "https://schema.org",
1093 "@type": "Article",
1094 "dateModified" : "${modifiedDate}",
1095 "datePublished": "${displayDateForSchema}",
1096 <#if (ArticleTitle.getData())?has_content>"headline": "${ArticleTitle.getData()?json_string}",</#if>
1097 <#if answer?has_content>"description" : "${answer?json_string}",</#if>
1098 <#if imageurlschema?has_content>"image" : "${imageurlschema}",</#if>
1099 "mainEntityOfPage": {
1100 "@type": "WebPage",
1101 "@id": "${pageurlcurrent}"
1102 },
1103 "author" : [
1104 <#if (authorlistschema?size > 0)>
1105 <#list authorlistschema as author>
1106 {
1107 "@type" : "Person",
1108 <#list author as cur_author_key, cur_author_value>
1109 <#if cur_author_key=="url" && cur_author_value?has_content>"${cur_author_key}" : "${cur_author_value}",</#if>
1110 <#if cur_author_key=="jobTitle" && cur_author_value?has_content>"${cur_author_key}" : "${cur_author_value}",</#if>
1111 <#if cur_author_key=="name" && cur_author_value?has_content>"${cur_author_key}" : "${cur_author_value}"</#if>
1112
1113 </#list>
1114 }<#if (author?index != (authorlistschema?size)-1)>,</#if>
1115 </#list>
1116 </#if>
1117 ],
1118 "publisher": {
1119 "@type": "Organization",
1120 "@id": "https://www.kearney.com#organization"
1121 }
1122 }
1123 </script>
1124<#elseif Slug.getData()?lower_case == "question and answer" >
1125 <script id ="answer-structured-data" type="application/ld+json">
1126 {
1127 "@context": "https://schema.org",
1128 "@type": "FAQPage",
1129 "mainEntity": [{
1130 "@type": "Question",
1131 "name": "${ArticleTitle.getData()?json_string}",
1132 "acceptedAnswer": {
1133 "@type": "Answer",
1134 <#if answer?has_content>"text" : "${answer?json_string}",</#if>
1135 "author" : [
1136 <#if (authorlistschema?size > 0)>
1137 <#list authorlistschema as author>
1138 {
1139 "@type" : "Person",
1140 <#list author as cur_author_key, cur_author_value>
1141 <#if cur_author_key=="url" && cur_author_value?has_content>"${cur_author_key}" : "${cur_author_value}",</#if>
1142 <#if cur_author_key=="jobTitle" && cur_author_value?has_content>"${cur_author_key}" : "${cur_author_value}",</#if>
1143 <#if cur_author_key=="name" && cur_author_value?has_content>"${cur_author_key}" : "${cur_author_value}"</#if>
1144
1145 </#list>
1146 }<#if (author?index != (authorlistschema?size)-1)>,</#if>
1147 </#list>
1148 </#if>
1149 ]
1150 }
1151 }]
1152 }
1153 </script>
1154 </#if>
1155 </#compress>