Menu Display

Asset Publisher

Meet us at an event - Introduction - NL

Meet us

Take a look at our upcoming events below, where you’ll get to meet Kearneys and to experience working as a Strategy Consultant. Also, find more information about the opportunity for an internship at Kearney Amsterdam below, as well as the contact information of our recruiter.

Interested in joining Kearney?

Asset Publisher

An error occurred while processing the template.
The following has evaluated to null or missing:
==> serviceLocator.findService("template.custom.services.TemplateCustomService")  [in template "20116#20152#510999" at line 49, 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 TemplateCustomService = servi...  [in template "20116#20152#510999" at line 49, column 1]
----
1<#-- 
2Application display templates can be used to modify the look of a 
3specific application. 
4 
5Please use the left panel to quickly add commonly used variables. 
6Autocomplete is also available and can be invoked by typing "${". 
7--> 
8 
9<#assign DLFileEntryLocalService = serviceLocator.findService( 
10"com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
11<#assign DLFolderLocalService = serviceLocator.findService( 
12"com.liferay.document.library.kernel.service.DLFolderLocalService")> 
13<#assign JournalArticleLocalService = serviceLocator.findService( 
14"com.liferay.journal.service.JournalArticleLocalService")> 
15<#assign GroupLocalService = serviceLocator.findService( 
16"com.liferay.portal.kernel.service.GroupLocalService")> 
17<#assign LayoutSetService = serviceLocator.findService( 
18"com.liferay.portal.kernel.service.LayoutSetLocalService")> 
19<#assign AssetCategoryLocalService = serviceLocator.findService( 
20"com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
21<#assign AssetVocabularyLocalService = serviceLocator.findService( 
22"com.liferay.asset.kernel.service.AssetVocabularyLocalService")> 
23<#assign AssetCategoryPropertyLocalService = serviceLocator.findService( 
24"com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")/> 
25<#assign PropertyFactoryUtil = serviceLocator.findService( 
26"com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil") /> 
27 
28<#assign portletId = themeDisplay.getPortletDisplay().getId()> 
29<#assign locale = themeDisplay.getLocale()> 
30<#assign PortletPreferencesLocalService = serviceLocator.findService( 
31"com.liferay.portal.kernel.service.PortletPreferencesLocalService")/> 
32 
33<#-- 
347.4 Upgrade start - portlet perferences would not be stored as xml, see https://github.com/liferay/liferay-portal/blob/master/readme/BREAKING_CHANGES.markdown#what-changed-11 
35 
36assign portletPreferencesXML = saxReaderUtil.read((PortletPreferencesLocalService.getPortletPreferences(themeDisplay.getPlid(), portletId)?first).getPreferences()) 
37--> 
38 
39<#assign plid = themeDisplay.getPlid()> 
40 
41<#assign portletPreferences = PortletPreferencesLocalService.getPortletPreferences(plid, portletId)?first /> 
42 
43<#assign preferences = PortletPreferencesLocalService.fetchPreferences(portletPreferences.getCompanyId(), portletPreferences.getOwnerId(), portletPreferences.getOwnerType(), plid, portletId) /> 
44<#assign imageSaturationFilter = themeDisplay.getLayout().getExpandoBridge().getAttribute("Add-Image-Saturation-Filter")!false /> 
45<#-- 
467.4 Upgrade end 
47--> 
48 
49<#assign TemplateCustomService = serviceLocator.findService("template.custom.services.TemplateCustomService") /> 
50 
51<#-- Macro used to get specific field text from an Asset Entry --> 
52<#macro entryNode document field> 
53    <#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??> 
54    "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}" 
55    <#else> 
56    "" 
57    </#if> 
58</#macro> 
59 
60<#-- Macro used to get specific portlet preference --> 
61 
62<#-- 7.4 Upgrade question: where do we need this macro? --> 
63 
64<#macro preference prefKey prefIndex defaultValue> 
65    <#if portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value")??> 
66    "${portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value").getText()?js_string}"<#return> 
67    <#else> 
68    "${defaultValue?js_string}"<#return> 
69    </#if> 
70</#macro> 
71 
72<div id="articleAdtDiv_${portletId}"></div> 
73<script> 
74    <#if preferences.getValue("useSmallerHeadings", "false")?js_string == "true"> 
75        <#assign overrideHeadingSize = "heading3 mobile-heading2"> 
76    </#if> 
77 
78    <#assign multiArtBehavior = preferences.getValue("multiArticleBehavior", "Vertical Stack")?js_string> 
79 
80    <#assign fullWidthDisplay = preferences.getValue("fullWidthDisplay", "false")?js_string> 
81 
82    <#assign featureDisplayType = preferences.getValue("featureDisplayType", "Image Left")?js_string> 
83 
84    <#assign greyBackground = preferences.getValue("greyBackground", "false")?js_string> 
85 
86    <#assign extraSpacer = preferences.getValue("extraSpacer", "None")?js_string> 
87 
88    <#assign autoplay = preferences.getValue("autoPlay", "false")?js_string> 
89 
90    <#assign seeAllLink = preferences.getValue("seeAllLink", "")?js_string> 
91 
92    <#assign seeAllLinkText = preferences.getValue("seeAllLinkText", "")?js_string> 
93 
94    <#assign featureDisplayButtonType = preferences.getValue("featureDisplayButtonType", "Visible")?js_string> 
95 
96    <#assign featureDisplayButtonText = preferences.getValue("featureDisplayButtonText", "")?js_string> 
97 
98    <#assign gridTitle = preferences.getValue("gridTitle", "")?js_string> 
99 
100	var entries = []; 
101 
102	<#if entries?has_content> 
103        <#list entries as curEntry> 
104 
105            <#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())> 
106            <#assign document = saxReaderUtil.read(jArt.getContentByLocale(themeDisplay.getLocale()))> 
107 
108            <#assign structureName = jArt.getDDMStructure().getName("en_US")> 
109 
110 
111            var componentType = "FEATURED_ARTICLE"; 
112            var voiceSearch = "featured-article"; 
113 
114            var title = <@entryNode document=document field="ArticleTitle"/>; 
115 
116            var subtitle = <@entryNode document=document field="Subtitle"/>; 
117 
118            var description = <@entryNode document=document field="Description"/>; 
119            if (description == ""){ 
120				description = <@entryNode document=document field="Intro"/>; 
121
122 
123            var slug = <@entryNode document=document field="Slug"/>; 
124 
125            <#assign articleGroup = GroupLocalService.getGroup(jArt.getGroupId())> 
126 
127            <#if LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false)?? 
128            && LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular")?? > 
129                <#assign isMicroSite = (LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")> 
130            <#else> 
131                <#assign isMicroSite = false> 
132            </#if> 
133 
134            var imageFileEntryId = 0; 
135            var imageFileName = ""; 
136            var image = '${TemplateCustomService.getDocumentFileDetails(document,"ThumbnailSquare",themeDisplay)}'; 
137            <#-- ATK-1338 Start --> 
138            if((${(fullWidthDisplay == "true")?c}) && (!(${multiArtBehavior?matches("Carousel")?c}))) { 
139				image = '${TemplateCustomService.getDocumentFileDetails(document,"Thumbnail",themeDisplay)}';             
140
141            <#-- ATK-1338 Over --> 
142            if (null == image || "" == image) { 
143				image = '${TemplateCustomService.getDocumentFileDetails(document,"Thumbnail",themeDisplay)}'; 
144
145            if (null == image) { 
146				image = ""; 
147
148	     
149			if ((image) || image != "") {  
150				var [imageFileEntryId, restString] = image.split('+++++'); 
151				var [imageFileName, image] = restString.split('*****'); 
152			}	 
153 
154            var componentData = { 
155				locale: "${locale}", 
156				structureName: "${structureName}", 
157				displayType: "${featureDisplayType}", 
158				slug: slug, 
159				title: title, 
160				subtitle: subtitle, 
161				description: description, 
162				image: image.trim(), 
163				imageFileEntryId: imageFileEntryId, 
164				imageFileName: imageFileName, 
165				imageSaturationFilter: "${imageSaturationFilter?c}", 
166				groupFriendlyUrl: '${articleGroup.getFriendlyURL()}', 
167				isMicrosite: ${isMicroSite?c}, 
168				multiArtBehavior: '${multiArtBehavior}', 
169                featureDisplayButtonText: '${featureDisplayButtonText}', 
170                featureDisplayButtonType: '${featureDisplayButtonType}', 
171				componentType: componentType, 
172				voiceSearch: voiceSearch 
173			}; 
174 
175            <#if structureName == "Video"> 
176 
177                componentData.displayType = "Video"; 
178                componentData.link = <@entryNode document=document field="LinkURL"/>; 
179                componentData.videoUrl = <@entryNode document=document field="VideoURL"/>; 
180 
181            <#elseif structureName == "Article"> 
182 
183                var linkTargetOverride = <@entryNode document=document field="LinkTargetOverride"/>; 
184 
185                if (linkTargetOverride !== ""){ 
186					componentData.link = linkTargetOverride; 
187				} else { 
188                    <#assign assetCategories = AssetCategoryLocalService.getCategories(curEntry.getClassNameId(), curEntry.getClassPK())> 
189 
190					var articleCategories = []; 
191 
192                    <#list assetCategories as category> 
193                        <#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())> 
194                        <#assign categoryUrl = "#"> 
195 
196                        <#list AssetCategoryPropertyLocalService.getCategoryProperties(category.categoryId) as categoryProperty> 
197 
198                            <#if categoryProperty.key == "url"> 
199                                <#assign categoryUrl = categoryProperty.value> 
200                            </#if> 
201                        </#list> 
202	 
203                        articleCategories.push({ 
204							id: "${category.categoryId}", 
205							name: "${category.name}", 
206							url: "${categoryUrl}", 
207							vocabularyName: "${categoryVocabulary.getTitle(locale)}", 
208						}); 
209				    
210                    </#list> 
211 
212 
213					componentData.categories = articleCategories; 
214					componentData.urlTitle = "${jArt.getUrlTitle()?js_string}"; 
215
216 
217                var byline = <@entryNode document=document field="Byline"/>; 
218                if (byline != null && byline != ""){ 
219					componentData.byline = []; 
220				}; 
221 
222            <#elseif structureName == "External Article"> 
223 
224 
225 
226            <#-- All External Articles should display at /media-center/article, so populate categories accordingly --> 
227			<#-- var articleCategories = []; 
228                articleCategories.push({ 
229					id: "0", 
230					name: "Media Center", 
231					url: "media-center", 
232					vocabularyName: "Topics", 
233				}); 
234                articleCategories.push({ 
235					id: "1", 
236					name: "Article", 
237					url: "article", 
238					vocabularyName: "Article Type", 
239				}); 
240 
241                componentData.categories = articleCategories; 
242                componentData.urlTitle = "${jArt.getUrlTitle()?js_string}"; --> 
243 
244				componentData.link = <@entryNode document=document field="LinkURL"/>; 
245				componentData.isExternal = true; 
246 
247                var bylineSegments = []; 
248                var pubName = <@entryNode document=document field="PublicationName"/>; 
249 
250                if (pubName != null && pubName != ""){ 
251					bylineSegments.push(pubName); 
252					componentData.italicizeFirstByline = true; 
253				}; 
254 
255            <#--bylineSegments.push(<@entryNode document=document field="PublicationDate"/>); --> 
256                componentData.byline = bylineSegments; 
257 
258            <#elseif structureName == "Link"> 
259 
260                componentData.link = <@entryNode document=document field="LinkURL"/>; 
261                componentData.isExternal = true; 
262 
263                var bylineSegments = []; 
264 
265                <#assign linkja = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK()) > 
266                <#assign linkdocument = saxReaderUtil.read(linkja.getContent())> 
267                <#assign linknodes = document.selectNodes("/root/dynamic-element[@name='BylineSegment']/dynamic-content")> 
268 
269                <#list linknodes as curN> 
270                    bylineSegments.push("${curN.getText()?js_string}"); 
271                </#list> 
272 
273                componentData.byline = bylineSegments; 
274                componentData.italicizeFirstByline = true; 
275 
276            </#if> 
277 
278            entries.push(componentData); 
279        </#list> 
280    </#if> 
281 
282	<#if multiArtBehavior == "Carousel"> 
283        var carouselProps = { 
284			entries: entries, 
285			gridTitle: "${gridTitle}", 
286			fullWidthDisplay: ${(fullWidthDisplay == "true")?c}, 
287			greyBackground: "${greyBackground}", 
288			autoplay: ${(autoplay == "true")?c} 
289		}; 
290 
291        ATK.React.Component.Carousel("articleAdtDiv_${portletId?js_string}", carouselProps); 
292    <#else> 
293    	var componentVoiceSearch = "featured-article"; 
294        var extraProps = { 
295			multiArtBehavior: "${multiArtBehavior}", 
296			gridTitle: "${gridTitle}", 
297			fullWidthDisplay: "${fullWidthDisplay}", 
298			greyBackground: "${greyBackground}", 
299			extraSpacer: "${extraSpacer}", 
300			seeAllLink: "${seeAllLink}", 
301			seeAllLinkText: "${seeAllLinkText}", 
302			componentVoiceSearch: componentVoiceSearch 
303		}; 
304        ATK.React.Component.FeaturedMultiDisplay("articleAdtDiv_${portletId?js_string}", extraProps, entries); 
305    </#if> 
306 
307</script> 

Asset Publisher

An error occurred while processing the template.
The following has evaluated to null or missing:
==> serviceLocator.findService("template.custom.services.TemplateCustomService")  [in template "20116#20152#33020" at line 247, 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 TemplateCustomService = servi...  [in template "20116#20152#33020" at line 247, 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<#-- ATK-1068 Styles Start --> 
9<style>  
10 @media (min-width: 1025px) { 
11  .articleAdtDiv { 
12			margin-top: -20px !important; 
13			margin-bottom: 50px !important; 
14
15
16 
17@media (max-width: 1024px) { 
18	.articleAdtDiv { 
19			margin-bottom: 50px !important; 
20
21
22</style> 
23<#-- ATK-1068 Styles End --> 
24<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() /> 
25<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
26<#assign themeDisplay = serviceContext.getThemeDisplay() /> 
27<#assign preview = false/> 
28 
29<#if (themeDisplay.getURLCurrent()?contains("preview_article_content.jsp")) || (themeDisplay.getURLCurrent()?contains("preview_article_content_template.jsp"))> 
30    <#assign preview = true />     
31     
32    <script data-senna-track="permanent" 
33				src="/o/atk-dot-com-theme/js/react/dist/vendor.bundle.js"></script> 
34	 
35	<script data-senna-track="permanent" 
36				src="/o/atk-dot-com-theme/js/react/dist/bundle.js"></script> 
37				 
38	<style data-senna-track="temporary" type="text/css"> 
39	:root { 
40		--container-max-sm: 576px; 
41		--h4-font-size: 22px; 
42		--font-weight-bold: 700; 
43		--rounded-pill: 50rem; 
44		--navigation-submenu-item-float: left; 
45		--display4-weight: 300; 
46		--danger: #da1414; 
47		--atk-row: absolute; 
48		--display2-size: 5.5rem; 
49		--body-bg: #f9f9f9; 
50		--display2-weight: 300; 
51		--display1-weight: 300; 
52		--display3-weight: 300; 
53		--box-shadow-sm: 0 .125rem .25rem rgba(0, 0, 0, .075); 
54		--text-align-hero-text-container: center; 
55		--cta-background-color: #F5F5F5; 
56		--font-weight-lighter: lighter; 
57		--h3-font-size: 36px; 
58		--btn-outline-primary-hover-border-color: #0b5fff; 
59		--transition-collapse: height .35s ease; 
60		--blockquote-small-color: #6b6c7e; 
61		--gray-200: #f1f2f5; 
62		--btn-secondary-hover-background-color: #f7f8f9; 
63		--gray-600: #6b6c7e; 
64		--secondary: #6b6c7e; 
65		--btn-outline-primary-color: #0b5fff; 
66		--btn-link-hover-color: #004ad7; 
67		--hr-border-color: rgba(0, 0, 0, .1); 
68		--hr-border-margin-y: 1rem; 
69		--light: #f1f2f5; 
70		--btn-outline-primary-hover-color: #0b5fff; 
71		--font-weight-read-more: 400; 
72		--btn-secondary-background-color: #fff; 
73		--btn-outline-secondary-hover-border-color: transparent; 
74		--display3-size: 4.5rem; 
75		--primary: #0b5fff; 
76		--container-max-md: 768px; 
77		--border-radius-sm: 0.1875rem; 
78		--display-line-height: 1.2; 
79		--font-family-hero-text: 'Graphik Web'; 
80		--h6-font-size: 0.8125rem; 
81		--h2-font-size: 44px; 
82		--aspect-ratio-4-to-3: 75%; 
83		--font-family-read-more: 'Graphik Web'; 
84		--spacer-10: 10rem; 
85		--font-family-semibold: 'Graphik Web'; 
86		--font-weight-normal: 400; 
87		--dark: #272833; 
88		--blockquote-small-font-size: 80%; 
89		--h5-font-size: 0.875rem; 
90		--blockquote-font-size: 1.25rem; 
91		--transition-fade: opacity .15s linear; 
92		--display4-size: 3.5rem; 
93		--border-radius-lg: 0.375rem; 
94		--btn-primary-hover-color: #fff; 
95		--display1-size: 6rem; 
96		--black: #000; 
97		--gray-300: #e7e7ed; 
98		--gray-700: #495057; 
99		--btn-secondary-border-color: #cdced9; 
100		--btn-outline-secondary-hover-color: #272833; 
101		--purple: #7823DC; 
102		--body-color: #111; 
103		--btn-outline-secondary-hover-background-color: rgba(39, 40, 51, 0.03); 
104		--font-weight-button-body: 400; 
105		--btn-primary-color: #fff; 
106		--btn-secondary-color: #6b6c7e; 
107		--btn-secondary-hover-border-color: #cdced9; 
108		--box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, .175); 
109		--container-max-lg: 992px; 
110		--btn-outline-primary-border-color: #0b5fff; 
111		--aspect-ratio: 100%; 
112		--cta-link-hover-color: #000; 
113		--body-container: #fff; 
114		--cta-link-color: #7823DC; 
115		--aspect-ratio-16-to-9: 56.25%; 
116		--box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15); 
117		--white: #fff; 
118		--portlet-bg-color: #272833; 
119		--warning: #b95000; 
120		--info: #2e5aac; 
121		--hr-border-width: 1px; 
122		--btn-link-color: #0b5fff; 
123		--gray-400: #cdced9; 
124		--font-weight-hero-text-h4: 100; 
125		--gray-800: #393a4a; 
126		--font-weight-semibold: 600; 
127		--btn-outline-primary-hover-background-color: #f0f5ff; 
128		--btn-primary-hover-background-color: #0053f0; 
129		--btn-primary-background-color: #0b5fff; 
130		--font-weight-heading4: 100; 
131		--font-weight-hero-text-h1: 600; 
132		--font-weight-heading3: 400; 
133		--success: #287d3c; 
134		--font-family-heading4: 'Graphik Web'; 
135		--font-family-heading3: 'Graphik Web'; 
136		--font-weight-heading2: 400; 
137		--font-weight-heading1: 600; 
138		--font-size-sm: 0.875rem; 
139		--font-family-heading2: 'Graphik Web'; 
140		--btn-primary-border-color: #0b5fff; 
141		--font-family-heading1: 'Graphik Web'; 
142		--font-family-base: 'Arabic', sans-serif; 
143		--spacer-0: 0; 
144		--font-family-monospace: 'Arabic', sans-serif; 
145		--lead-font-size: 1.25rem; 
146		--border-radius: 0.25rem; 
147		--spacer-9: 9rem; 
148		--font-weight-light: 300; 
149		--btn-secondary-hover-color: #272833; 
150		--spacer-2: 0.5rem; 
151		--font-family-button-body: 'Graphik Web'; 
152		--spacer-1: 0.25rem; 
153		--spacer-4: 1.5rem; 
154		--spacer-3: 1rem; 
155		--spacer-6: 4.5rem; 
156		--spacer-5: 3rem; 
157		--spacer-8: 7.5rem; 
158		--border-radius-circle: 50%; 
159		--spacer-7: 6rem; 
160		--font-size-lg: 1.125rem; 
161		--aspect-ratio-8-to-3: 37.5%; 
162		--font-family-sans-serif: 'Arabic', sans-serif; 
163		--gray-100: #f7f8f9; 
164		--font-weight-bolder: 900; 
165		--container-max-xl: 1280px; 
166		--btn-outline-secondary-color: #6b6c7e; 
167		--custom-black: #1E1E1E; 
168		--gray-500: #a7a9bc; 
169		--h1-font-size: 66px; 
170		--gray-900: #272833; 
171		--text-muted: #a7a9bc; 
172		--btn-primary-hover-border-color: transparent; 
173		--btn-outline-secondary-border-color: #cdced9; 
174		--lead-font-weight: 300; 
175		--font-size-base: 0.875rem; 
176
177	 
178	.article-breadcrumb 
179	a{ 
180	    color: var(--purple) !important; 
181        text-decoration: underline !important; 
182        text-decoration-color: #E6E6E6 !important; 
183
184	 
185	.article-figure 
186	 img{ 
187        max-width: 100% !important; 
188
189     
190    #articleDiv 
191
192        word-wrap:break-word; 
193
194     
195    .buttonBodyContainer:hover 
196     a{ 
197        color: 	#ffffff !important; 
198
199     
200    .black-to-garnet-author{ 
201        color: var(--custom-black) !important; 
202        text-decoration: underline !important; 
203        text-decoration-color: #E6E6E6 !important; 
204    }     
205     
206    .article-square-bio:hover 
207     a{     
208        color: var(--purple) !important; 
209        text-decoration: underline !important; 
210        text-decoration-color: #E6E6E6 !important; 
211
212         
213    .atk-article 
214     a{     
215        color: var(--purple) !important; 
216        text-decoration: underline !important; 
217        text-decoration-color: #E6E6E6 !important; 
218
219         
220    .atk-article 
221     a:hover{     
222	       text-decoration: none !important; 
223
224    </style> 
225		 
226</#if> 
227 
228<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
229<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")> 
230<#-- 
2317.4 Upgrade start 
232--> 
233<#assign AssetLinkLocalService = serviceLocator.findService("com.liferay.asset.link.service.AssetLinkLocalService")> 
234<#-- 
2357.4 Upgrade end 
236--> 
237<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")> 
238<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService")> 
239<#assign AssetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")/> 
240<#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
241<#assign PortletPreferencesLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.PortletPreferencesLocalService")/> 
242<#assign PropertyFactoryUtil = serviceLocator.findService("com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil") /> 
243<#assign GroupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")> 
244<#assign LayoutSetService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutSetLocalService")> 
245<#assign DynamicQueryFactoryUtil = serviceLocator.findService("com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil") /> 
246<#assign virtualHostLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.VirtualHostLocalService") /> 
247<#assign TemplateCustomService = serviceLocator.findService("template.custom.services.TemplateCustomService") /> 
248<#assign ArticleTemplateCustomService = serviceLocator.findService("template.custom.services.ArticleTemplateCustomService") /> 
249<#assign DynamicPDFGenerationCustomService = serviceLocator.findService("template.custom.services.DynamicPDFGenerationCustomService") /> 
250 
251<#assign 
252serviceContextThreadLocal = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"] 
253themeDisplay = serviceContextThreadLocal.getServiceContext().getThemeDisplay() 
254/> 
255<#assign imageSaturationFilter = themeDisplay.getLayout().getExpandoBridge().getAttribute("Add-Image-Saturation-Filter")!false /> 
256 
257<#assign CurrentJournalArticle = JournalArticleLocalService.getLatestArticle(groupId,.vars['reserved-article-id'].data)> 
258<#assign CurrentAssetEntry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle",CurrentJournalArticle.getResourcePrimKey())> 
259<#assign AssetLinks=AssetLinkLocalService.getDirectLinks(CurrentAssetEntry.getEntryId()) > 
260 
261<#assign PropertyFactoryUtil = serviceLocator.findService("com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil") /> 
262 
263<#-- update name here if change asset library name --> 
264<#assign assetLibGroup = GroupLocalService.getGroup(themeDisplay.getCompanyId(), "Kearney Global Asset Library") /> 
265<#if assetLibGroup?? > 
266	<#assign assetLibGroupId = assetLibGroup.getGroupId() /> 
267</#if> 
268     
269<#assign assetLinkOrder = CurrentJournalArticle.getExpandoBridge().getAttribute("Related Asset Ordering")!"" /> 
270 
271<#-- 
2727.4 Upgrade start 
273--> 
274<#assign plid = themeDisplay.getPlid()> 
275<#-- 
2767.4 Upgrade end 
277--> 
278<#if !(preview)> 
279<#-- ATK 40 changes start --> 
280	<#assign portletId = themeDisplay.getPortletDisplay().getId()> 
281 
282	<#assign portletPreferences = PortletPreferencesLocalService.getPortletPreferences(plid, portletId)?first /> 
283 
284	<#assign preferences = PortletPreferencesLocalService.fetchPreferences(portletPreferences.getCompanyId(), portletPreferences.getOwnerId(), portletPreferences.getOwnerType(), plid, portletId) /> 
285 
286<#-- Macro used to get specific field text from an Asset Entry --> 
287<#macro entryNode document field> 
288    <#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??> 
289    "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}" 
290    <#else> 
291    "" 
292    </#if> 
293</#macro> 
294 
295<#-- Macro used to get specific portlet preference --> 
296<#macro preference prefKey prefIndex defaultValue> 
297    <#if portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value")??> 
298    "${portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value").getText()?js_string}"<#return> 
299    <#else> 
300    "${defaultValue?js_string}"<#return> 
301    </#if> 
302</#macro> 
303<#-- ATK 40 changes end --> 
304</#if> 
305 
306<#if (preview)> 
307<#-- ATK 40 changes start --> 
308 
309	<#assign portletId = (PortletPreferencesLocalService.getPortletPreferencesByPlid(themeDisplay.getPlid())?first).getPortletId() > 
310 
311	<#assign portletPreferences = PortletPreferencesLocalService.getPortletPreferences(plid, portletId)?first /> 
312 
313	<#assign preferences = PortletPreferencesLocalService.fetchPreferences(portletPreferences.getCompanyId(), portletPreferences.getOwnerId(), portletPreferences.getOwnerType(), plid, portletId) /> 
314 
315<#-- Macro used to get specific field text from an Asset Entry --> 
316<#macro entryNode document field> 
317    <#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??> 
318    "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}" 
319    <#else> 
320    "" 
321    </#if> 
322</#macro> 
323 
324<#-- Macro used to get specific portlet preference --> 
325<#macro preference prefKey prefIndex defaultValue> 
326    <#if portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value")??> 
327    "${portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value").getText()?js_string}"<#return> 
328    <#else> 
329    "${defaultValue?js_string}"<#return> 
330    </#if> 
331</#macro> 
332<#-- ATK 40 changes end --> 
333</#if> 
334 
335<#-- ATK-659 --> 
336<#assign displayDate = "" /> 
337<#if CurrentJournalArticle.getDisplayDate()?has_content> 
338    <#assign displayDate = CurrentJournalArticle.getDisplayDate()?date?string('MMMM dd, yyyy') /> 
339</#if> 
340<#--  schema vars starts  --> 
341<#assign modifiedDate = "" /> 
342<#if CurrentJournalArticle.getModifiedDate()?has_content> 
343    <#assign modifiedDate = CurrentJournalArticle.getModifiedDate()?date?string('yyyy-MM-dd') /> 
344</#if> 
345<#assign displayDateForSchema = "" /> 
346<#if CurrentJournalArticle.getDisplayDate()?has_content> 
347    <#assign displayDateForSchema = CurrentJournalArticle.getDisplayDate()?date?string('yyyy-MM-dd') /> 
348</#if> 
349 
350<#assign imageurlschema = "" /> 
351<#assign currenturi = "" /> 
352<#if (ThumbnailSquare.getData())??> 
353    <#if (ThumbnailSquare.getData())?contains("?")> 
354        <#assign imageurlschema = (ThumbnailSquare.getData())?keep_before("?") /> 
355    <#else> 
356        <#assign imageurlschema =  ThumbnailSquare.getData() />     
357    </#if>     
358     
359</#if> 
360<#if themeDisplay.getURLCurrent()?has_content > 
361    <#if (themeDisplay.getURLCurrent())?contains("?") > 
362        <#assign currenturi = (themeDisplay.getURLCurrent())?keep_before("?") /> 
363    <#else> 
364        <#assign currenturi = (themeDisplay.getURLCurrent()) /> 
365    </#if> 
366</#if>     
367<#assign pageurlcurrent = themeDisplay.getCDNBaseURL() + currenturi /> 
368<#assign answer =''> 
369<#if Intro.getData()?has_content > 
370	    <#assign answer = htmlUtil.unescape(Intro.getData())/> 
371	 <#else> 
372	    <#if Content.getSiblings()?has_content> 
373	        <#list Content.getSiblings() as cur_Content> 
374		        <#if (cur_Content.getData())??> 
375		            <#assign withouthtml = htmlUtil.unescape(cur_Content.getData())?replace('<[^>]+>','','r') /> 
376		            <#assign withouthtml = withouthtml?replace('\\n+','','r') /> 
377		            <#assign withouthtml = withouthtml?replace('\\t+','','r') /> 
378		            <#assign withouthtml = withouthtml?replace('\\r+','','r') /> 
379		            <#assign withouthtml = withouthtml?replace('&nbsp;','','r') /> 
380			        <#assign answer += withouthtml /> 
381		        </#if> 
382	        </#list> 
383        </#if> 
384</#if> 
385<#assign hasExternalHeroBanner = false /> 
386<#assign externalHeroBannerImageURL = "" /> 
387<#assign externalHeroBannerTitle = "" /> 
388<#assign externalHeroBannerSubTitle = "" /> 
389<#if HeroImage?? && HeroImage.getData() == ""> 
390	<#assign externalHeroBannerData = ArticleTemplateCustomService.getHeroBannerData(plid, assetLibGroup.getGroupId(), themeDisplay) /> 
391	<#assign hasExternalHeroBanner = externalHeroBannerData.hasExternalHeroBanner /> 
392	<#assign externalHeroBannerImageURL = externalHeroBannerData.externalHeroBannerImageURL /> 
393	<#assign externalHeroBannerTitle = externalHeroBannerData.externalHeroBannerTitle /> 
394	<#assign externalHeroBannerSubTitle = externalHeroBannerData.externalHeroBannerSubTitle /> 
395</#if> 
396<#--  schema ends --> 
397<div id="articleDiv"> 
398</div> 
399 
400<script> 
401 
402	var articleMetadata = {}; 
403	articleMetadata.slug = "${(htmlUtil.unescape(Slug.getData()))?js_string}"; 
404	articleMetadata.articleTitle = "${(htmlUtil.unescape(ArticleTitle.getData()))?js_string}"; 
405	 
406	<#assign heroImageId = "" /> 
407	<#assign heroImageFileName = "" /> 
408	<#assign heroMobileImageId = "" /> 
409	<#assign heroMobileImageFileName = "" /> 
410 
411	<#if HeroImage??> 
412	    articleMetadata.heroImage = "${HeroImage.getData()?js_string}"; 
413	    <#assign parts = HeroImage.getData()?split("/")!"">     
414	    <#if HeroImage.getAttribute("title")??> 
415	    	<#assign heroImageFileName = HeroImage.getAttribute("title")/> 
416	    <#else>	 
417			<#assign heroImageFileName = parts[4]!"" /> 
418		</#if> 
419		<#if HeroImage.getAttribute("fileEntryId")??> 
420		<#assign heroImageId = HeroImage.getAttribute("fileEntryId") /> 
421		<#else> 
422			<#attempt> 
423				<#assign heroImageId = DLFileEntryLocalService.getFileEntryByFileName(parts[2]?number, parts[3]?number, heroImageFileName).getFileEntryId()!"" /> 
424			<#recover> 
425				<#if HeroImage.getAttribute("uuid")?? > 
426					<#assign heroImageUuid = HeroImage.getAttribute("uuid")> 
427				</#if> 
428				<#if HeroImage.getAttribute("groupId")??>	 
429					<#assign heroImageGroupId = HeroImage.getAttribute("groupId")?number> 
430				</#if>	 
431				<#if heroImageUuid?has_content && heroImageGroupId != 0 > 
432					<#attempt> 
433						<#assign fileEntry = DLFileEntryLocalService.getDLFileEntryByUuidAndGroupId(heroImageUuid,heroImageGroupId) /> 
434					<#recover> 
435						<#assign fileEntry = "" /> 
436					</#attempt>	 
437					<#if fileEntry?? && fileEntry?has_content> 
438						<#assign heroImageId = fileEntry.getFileEntryId() /> 
439					</#if> 
440				</#if> 
441			</#attempt> 
442		</#if> 
443		articleMetadata.imageFileEntryId = "${heroImageId}"; 
444		articleMetadata.imageName = "${heroImageFileName}"; 
445		articleMetadata.imageSaturationFilter = "${imageSaturationFilter?c}"; 
446	</#if> 
447	<#if HeroMobile??> 
448	    articleMetadata.heroMobile = "${HeroMobile.getData()?js_string}"; 
449	    <#assign partsMobile = HeroMobile.getData()?split("/")!""> 
450	    <#if HeroMobile.getAttribute("title")??> 
451	    	<#assign heroMobileImageFileName = HeroMobile.getAttribute("title")/> 
452	    <#else>	 
453	    	<#assign heroMobileImageFileName = partsMobile[4]!"" />	 
454		</#if> 
455		<#if HeroMobile.getAttribute("fileEntryId")??> 
456			<#assign heroMobileImageId = HeroMobile.getAttribute("fileEntryId")> 
457		<#else> 
458			<#attempt> 
459				<#assign heroMobileImageId = DLFileEntryLocalService.getFileEntryByFileName(partsMobile[2]?number, partsMobile[3]?number, heroMobileImageFileName).getFileEntryId()!"" /> 
460			<#recover> 
461				<#if HeroMobile.getAttribute("uuid")??> 
462					<#assign heroMobileUuid = HeroMobile.getAttribute("uuid")> 
463				</#if> 
464				<#if HeroMobile.getAttribute("groupId")??>	 
465					<#assign heroMobileGroupId = HeroMobile.getAttribute("groupId")?number> 
466				</#if>	 
467				<#if heroMobileUuid?? && heroMobileGroupId??> 
468					<#attempt> 
469						<#assign heroMobileImageId = DLFileEntryLocalService.getDLFileEntryByUuidAndGroupId(heroMobileUuid,heroMobileGroupId).getFileEntryId()!"" /> 
470					<#recover> 
471						<#assign heroMobileImageId = 0 /> 
472					</#attempt> 
473				</#if> 
474			</#attempt>		 
475		</#if> 
476		articleMetadata.mobileImageFileEntryId = "${heroMobileImageId}"; 
477		articleMetadata.mobileImageName = "${heroMobileImageFileName}"; 
478		articleMetadata.imageSaturationFilter = "${imageSaturationFilter?c}"; 
479	</#if> 
480 
481	<#-- 
482	Set articleMetadata.publicTestArticle to restrict social sharing functionality to a single article. 
483	Otherwise, leave commented to allow social sharing on all articles. 
484	--> 
485	<#--articleMetadata.publicTestArticle = 'test-article-url';--> 
486 
487 
488	<#if BiggerTitle??> 
489    articleMetadata.biggerTitle = ${getterUtil.getBoolean(BiggerTitle.getData())?c}; 
490	<#else> 
491    articleMetadata.biggerTitle = false; 
492	</#if> 
493 
494	articleMetadata.subtitle = "${(htmlUtil.unescape(Subtitle.getData()))?js_string}"; 
495	 
496	<#assign introData = htmlUtil.unescape(Intro.getData())> 
497	<#if !introData?contains("l2it-audio-player")> 
498	<#if AddArticleAudio??> 
499		<#assign addarticleaudio = getterUtil.getBoolean(AddArticleAudio.getData())> 
500	<#else> 
501		<#assign addarticleaudio = false> 
502	</#if> 
503	<#if addarticleaudio == true> 
504		<#assign articleaudiotext = '<div id="l2it-audio-player"></div>' > 
505		<#assign introData = introData + articleaudiotext> 
506	</#if> 
507	</#if> 
508	 
509	articleMetadata.intro = "${introData?js_string}"; 
510 
511	<#assign LandingArticle = false /> 
512	<#if LandingPage??> 
513            articleMetadata.landingPage = '${getterUtil.getBoolean(LandingPage.getData())?c}'; 
514            <#assign LandingArticle =  getterUtil.getBoolean(LandingPage.getData()) /> 
515	<#else> 
516            articleMetadata.landingPage = false; 
517	</#if> 
518 
519	<#if SocialLinks??> 
520		<#if SocialLinks.getData() == ""> 
521			articleMetadata.socialLinks = true; 
522		<#else> 
523    		articleMetadata.socialLinks = ${getterUtil.getBoolean(SocialLinks.getData())?c}; 
524		</#if>	 
525	<#else> 
526    	articleMetadata.socialLinks = false; 
527	</#if> 
528	 
529	<#if GraySeparator??> 
530		<#if GraySeparator.getData() == ""> 
531			articleMetadata.graySeparator = true;	 
532		<#else>		 
533			articleMetadata.graySeparator = ${getterUtil.getBoolean(GraySeparator.getData())?c}; 
534		</#if>    	 
535	<#else> 
536    	articleMetadata.graySeparator = false; 
537	</#if> 
538 
539	<#if ShowParentBreadcrumb?? && LandingPage?? && getterUtil.getBoolean(LandingPage.getData()) == true> 
540        articleMetadata.showParentBreadcrumb = ${getterUtil.getBoolean(ShowParentBreadcrumb.getData())?c} 
541	<#else> 
542            articleMetadata.showParentBreadcrumb = true; 
543	</#if> 
544 
545    <#if BreadcrumbLabel??> 
546        articleMetadata.parentBreadcrumbLabel = "${(htmlUtil.unescape(BreadcrumbLabel.getData()))?js_string}"; 
547	</#if> 
548 
549    <#if BreadcrumbURL??> 
550        articleMetadata.parentBreadcrumbURL = "${BreadcrumbURL.getData()?js_string}"; 
551	</#if> 
552 
553	<#if Byline??> 
554	articleMetadata.byline = "${(htmlUtil.unescape(Byline.getData()))?js_string}"; 
555	</#if> 
556 
557	<#if FeaturedContributor??> 
558    articleMetadata.featuredContributor = "${htmlUtil.unescape(FeaturedContributor.getData())}" 
559	</#if> 
560 
561	<#-- Removed as of ATK-1208 -- No longer needed -- Legacy --> 
562	<#--   
563	<#if PostArticleSlideShareKey?? && PostArticleSlideShareKey.PostArticleSlideshareContent??> 
564    articleMetadata.postArticleSlideshareKey = "${PostArticleSlideShareKey.getData()}" 
565 
566    articleMetadata.postArticleSlideshareContent = "${PostArticleSlideShareKey.PostArticleSlideshareContent.getData()}" 
567	</#if> 
568	--> 
569 
570	var articleContents = []; 
571	<#if Content.getSiblings()?has_content> 
572		<#list Content.getSiblings() as cur_Content> 
573 
574        var images = []; 
575 
576			<#if cur_Content.PrimaryImage?has_content> 
577				<#list cur_Content.PrimaryImage.getSiblings() as cur_PrimaryImage> 
578				<#assign contentImageName = "" /> 
579				<#assign contentImageFileEntryId = "" /> 
580				 
581				<#if cur_PrimaryImage.getData() != ""> 
582					<#assign cur_PrimaryImageParts = cur_PrimaryImage.getData()?split("/")!"" /> 
583					<#if cur_PrimaryImage.getAttribute("title")??> 
584						<#assign contentImageName = cur_PrimaryImage.getAttribute("title") /> 
585					<#else> 
586						<#assign contentImageName = cur_PrimaryImageParts[4]!"" /> 
587					</#if> 
588					<#if cur_PrimaryImage.getAttribute("fileEntryId")??> 
589						<#assign contentImageFileEntryId = cur_PrimaryImage.getAttribute("fileEntryId") /> 
590					<#else> 
591						<#attempt> 
592            				<#assign contentImageFileEntryId = DLFileEntryLocalService.getFileEntryByFileName(cur_PrimaryImageParts[2]?number, cur_PrimaryImageParts[3]?number, contentImageName).getFileEntryId()!"" /> 
593        				<#recover> 
594        					<#if cur_PrimaryImage.getAttribute("uuid")??> 
595        						<#assign curImageUuid = cur_PrimaryImage.getAttribute("uuid")/> 
596        					</#if> 
597        					<#if cur_PrimaryImage.getAttribute("groupId")??> 
598        						<#assign curImageGroupId = cur_PrimaryImage.getAttribute("groupId")?number /> 
599        					</#if>	 
600        					<#if curImageUuid?? && curImageGroupId??> 
601            					<#assign contentImageFileEntryId = DLFileEntryLocalService.getDLFileEntryByUuidAndGroupId(curImageUuid,curImageGroupId).getFileEntryId()!"" /> 
602            				</#if> 
603        				</#attempt> 
604        			</#if>					 
605				</#if> 
606				 
607                var image = {"imageURL": "${cur_PrimaryImage.getData()?js_string}", "imageFileEntryId": "${contentImageFileEntryId}", "imageFileName":"${contentImageName}", "imageSaturationFilter":"${imageSaturationFilter?c}"}; 
608 
609					<#if cur_Content.PrimaryImage.SlideshowCaption??> 
610                        image["caption"] = "${(htmlUtil.unescape(cur_PrimaryImage.SlideshowCaption.getData()))?js_string}"; 
611					</#if> 
612 
613                    image["sharingEnabled"] = ${(cur_PrimaryImage.SharingEnabled?? && cur_PrimaryImage.SharingEnabled.getData() == "true")?c}; 
614 
615                images.push(image); 
616 
617				</#list> 
618			</#if> 
619 
620        articleContents.push({ 
621            <#if cur_Content.FeatureSlug??> 
622			slug: "${cur_Content.FeatureSlug.getData()?js_string}", 
623			</#if> 
624			<#if cur_Content.TextAlignment??> 
625			textAlignment: "${cur_Content.TextAlignment.getData()?js_string}", 
626			</#if> 
627			content: "${(htmlUtil.unescape(cur_Content.getData()))?js_string}", 
628			styling: "${cur_Content.stylingSelect.getData()?js_string}", 
629			alternateText: "${(htmlUtil.unescape(cur_Content.AlternateText.getData()))?js_string}", 
630			primaryImage: images, 
631			secondaryImage: "${cur_Content.SecondaryMaskImage.getData()?js_string}", 
632			buttonText: "${(htmlUtil.unescape(cur_Content.ButtonText.getData()))?js_string}", 
633			buttonURL: "${cur_Content.ButtonURL.getData()?js_string}", 
634			displayDate: "${displayDate}" 
635		}); 
636 
637 
638		</#list> 
639	</#if> 
640	 
641	var bios = []; 
642	<#assign articleGroup = GroupLocalService.getGroup(CurrentAssetEntry.getGroupId()) 
643		guestGroup = GroupLocalService.getFriendlyURLGroup(articleGroup.getCompanyId(), "/guest") /> 
644	<#-- 
645		Create list of groups that asset entries live in, so that linked bios can be retrieved by UUID 
646	--> 
647	<#assign assetLinkGroups = []> 
648	<#if AssetLinks?has_content> 
649		<#list AssetLinks as assetLink> 
650			<#assign linkedAssetEntry = AssetEntryLocalService.getAssetEntry(assetLink.getEntryId2())> 
651			<#assign assetLinkGroups = assetLinkGroups + [linkedAssetEntry.getGroupId()]> 
652		</#list> 
653	</#if> 
654 
655	//Create asset link ordering 
656	var assetOrderArr = []; 
657 
658	<#list assetLinkOrder?split(",") as assetLinkUUID> 
659		<#-- 
660			Find group which asset link is stored in and assign the resulting asset entry 
661		--> 
662		<#assign orderAssetEntry = ""> 
663 
664		<#list assetLinkGroups as assetLinkGroupId> 
665			<#assign orderAssetEntry = AssetEntryLocalService.fetchEntry(assetLinkGroupId, assetLinkUUID)!""> 
666 
667			<#if orderAssetEntry != ""> 
668				<#break /> 
669			</#if> 
670		</#list> 
671 
672		<#if orderAssetEntry != ""> 
673			<#assign orderJournalArticle = JournalArticleLocalService.fetchLatestArticle(orderAssetEntry.getClassPK())!""> 
674            <#if orderJournalArticle != ""> 
675	            assetOrderArr.push("${orderJournalArticle.getArticleId()}"); 
676            </#if> 
677		</#if> 
678	</#list> 
679 
680	var assetOrderMap = {}; 
681 
682	for(var order=1; order<assetOrderArr.length; order++) { 
683		assetOrderMap[assetOrderArr[order-1]] = order; 
684
685 
686	var getAssetOrder = function(uuid) { 
687		var order = assetOrderMap[uuid]; 
688		if(!order) { 
689			order = Object.keys(assetOrderMap).length + 1; 
690			assetOrderMap[uuid] = order; 
691
692 
693		return order; 
694	}; 
695	<#assign authorlistschema = [] /> 
696	<#assign authorListForPdf = [] /> 
697 
698	<#if Authors?? && Authors.getSiblings()?has_content> 
699         
700        var bioC =0; 
701        	<#list Authors.getSiblings() as cur_Authors> 
702        	      
703        		<#if  cur_Authors.getData() != "" > 
704            	    <#assign cur_webContent_map = jsonFactoryUtil.createJSONObject(cur_Authors.getData())> 
705                    <#assign cur_webContent_classPK = cur_webContent_map.getString("classPK")> 
706                    <#if cur_webContent_classPK??> 
707            		    <#if JournalArticleLocalService.fetchLatestArticle(cur_webContent_classPK?number)?? && !JournalArticleLocalService.fetchLatestArticle(cur_webContent_classPK?number).isExpired()> 
708		                    <#assign articleK = JournalArticleLocalService.fetchLatestArticle(cur_webContent_classPK?number)> 
709	            		    <#assign articleKAssetEntry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle",articleK.getResourcePrimKey()) /> 
710	            		  
711		            		<#if articleKAssetEntry?? && articleKAssetEntry.getAssetRenderer()??> 
712								<#assign xml = saxReaderUtil.read(articleKAssetEntry.getAssetRenderer().getArticle().getContentByLocale(themeDisplay.getLocale())) /> 
713			            		  
714			            		  
715			            		   
716			            		 <#assign xml_fullName = xml.valueOf("//dynamic-element[@name='FullName']/dynamic-content/text()") /> 
717			            		 <#assign xml_title = xml.valueOf("//dynamic-element[@name='Title']/dynamic-content/text()") /> 
718			            		 <#assign xml_headshotImage = TemplateCustomService.getDocumentFileDetails(xml,"CutoutHeadshot",themeDisplay)/> 
719			            		              
720					            <#-- Split on '*****' to separate the ID+filename part and the URL --> 
721					            <#assign headshotxmlImageDetailParts = xml_headshotImage?split("*****")!""> 
722										 
723					            <#-- Extract the left and right parts --> 
724					            <#assign headshotxmlLeftPart = headshotxmlImageDetailParts[0]!""> 
725					            <#assign xml_headshotImage = headshotxmlImageDetailParts[1]!""> 
726										 
727					            <#-- From the left part, split on '+++++' to get the ID --> 
728					            <#assign headshotxmlImageFileEntryId = headshotxmlLeftPart?split("+++++")[0]!""> 
729					            <#assign headshotxmlImageFileName = headshotxmlLeftPart?split("+++++")[1]!""> 
730			            		  
731			            		 <#if xml_headshotImage?contains("&download=")> 
732			            		      <#assign xml_headshotImage = xml_headshotImage?keep_before("&download=")> 
733			            		 </#if>      
734			            		 
735			            		  
736			            		  var bio1 = {}; 
737			                      bio1.structureKey=('${articleK.getDDMStructure().getName("en_US")}'); 
738			                      bio1.weight=  ++bioC; 
739			            		  bio1.fullName = '${(htmlUtil.unescape(xml_fullName))?js_string}'; 
740			            		  bio1.headshot = '${xml_headshotImage?js_string}'; 
741			            		  bio1.imageFileEntryId = '${headshotxmlImageFileEntryId?js_string}'; 
742			            		  bio1.imageFileName = '${headshotxmlImageFileName?js_string}'; 
743			            		  bio1.imageSaturationFilter = '${imageSaturationFilter?c}', 
744			            		  bio1.title = '${xml_title}'; 
745				            	  <#if (articleGroup.getLiveGroupId() != 0 ) >	 
746										<#assign articleK = JournalArticleLocalService.getArticleByUrlTitle(assetLibGroupId, articleK.getUrlTitle()) />	 
747								  </#if>	 
748								  <#assign viewURL = '' /> 
749								 
750								 <#if articleK.getDDMStructure().getName("en_US") == "Bio Page"> 
751								 	 <#assign viewURL = TemplateCustomService.getArticleViewURL(articleK.getArticleId(),assetLibGroup,articleK.getGroupId(),themeDisplay,guestGroup.getGroupId())/> 
752								 	 <#if !(viewURL?has_content)> 
753								 	 	<#assign viewURL = themeDisplay.getPortalURL() + "/about/people/bio/" + xml_fullName?lower_case?replace(" ", "-")/> 
754								 	 </#if> 
755								 </#if> 
756								 
757								bio1.bioURL = '${viewURL}';	 
758								bios.push(bio1); 
759								<#assign authorListForPdf = [xml_fullName + "::::::::" + xml_title + "++++++++" + viewURL + ";;;;;;;;" +  headshotxmlImageFileEntryId] + authorListForPdf /> 
760								<#assign viewURLschema = ''/> 
761								<#if viewURL?has_content> 
762								    <#assign viewURLschema =  viewURL /> 
763								</#if> 
764								<#assign authordataschema = {"url":viewURLschema, "jobTitle":xml_title, "name":xml_fullName} /> 
765			            		<#assign authorlistschema = authorlistschema + [authordataschema] /> 
766							 </#if>            		 	 
767						</#if>	 
768					</#if> 
769            	</#if> 
770        		   
771        	</#list> 
772        	 
773    </#if> 
774	 
775	<#assign oldwaytogetauthourforschema = false> 
776	<#if authorlistschema?size == 0> 
777		<#assign oldwaytogetauthourforschema = true> 
778	</#if>		 
779	 
780    if (bios.length == 0){ 
781		<#assign authorCounter = authorListForPdf?size /> 
782		<#if AssetLinks?has_content> 
783 
784			<#list AssetLinks as assetLink> 
785				<#assign linkedAssetEntry = AssetEntryLocalService.getAssetEntry(assetLink.getEntryId2())> 
786				<#assign linkedJournalArticle = JournalArticleLocalService.getLatestArticle(linkedAssetEntry.getClassPK())> 
787				<#assign xml = saxReaderUtil.read(linkedAssetEntry.getAssetRenderer().getArticle().getContentByLocale(themeDisplay.getLocale())) /> 
788				<#assign structureKey =  linkedJournalArticle.getDDMStructure().getName("en_US") /> 
789				 
790			var bio = {}; 
791			 
792            <#assign xml_headshotDetails = TemplateCustomService.getDocumentFileDetails(xml,"CutoutHeadshot",themeDisplay)/> 
793             
794            <#-- Split on '*****' to separate the ID+filename part and the URL --> 
795            <#assign headshotImageDetailParts = xml_headshotDetails?split("*****")!""> 
796					 
797            <#-- Extract the left and right parts --> 
798            <#assign headshotLeftPart = headshotImageDetailParts[0]!""> 
799            <#assign xml_headshot = headshotImageDetailParts[1]!""> 
800					 
801            <#-- From the left part, split on '+++++' to get the ID --> 
802            <#assign headshotImageFileEntryId = headshotLeftPart?split("+++++")[0]!""> 
803            <#assign headshotImageFileName = headshotLeftPart?split("+++++")[1]!""> 
804             
805            																								 
806            <#if xml_headshot?contains("&download=")> 
807                 <#assign xml_headshot = xml_headshot?keep_before("&download=")> 
808            </#if>					 
809			<#if structureKey == "Bio Page" || structureKey == "Micro Bio" > 
810						<#assign xml_fullName = xml.valueOf("//dynamic-element[@name='FullName']/dynamic-content/text()") /> 
811						<#assign xml_title = xml.valueOf("//dynamic-element[@name='Title']/dynamic-content/text()") /> 
812						bio.structureKey=('${structureKey}').trim(); 
813						bio.weight = getAssetOrder("${linkedJournalArticle.getArticleId()}"); 									 
814						bio.fullName = "${(htmlUtil.unescape(xml_fullName))?js_string}"; 
815						bio.position = "${xml.valueOf("//dynamic-element[@name='Position']/dynamic-content/text()")?js_string}"; 
816						bio.title = "${xml_title?js_string}"; 
817						bio.headshot = "${xml_headshot?js_string}"; 
818						bio.imageFileEntryId = "${headshotImageFileEntryId?js_string}"; 
819						bio.imageFileName = "${headshotImageFileName?js_string}"; 
820						bio.imageSaturationFilter ='${imageSaturationFilter?c}', 
821						bio.description = "${xml.valueOf("//dynamic-element[@name='Description']/dynamic-content/text()")?js_string}"; 
822						bio.linkedInURL = "${xml.valueOf("//dynamic-element[@name='LinkedInURL']/dynamic-content/text()")?js_string}"; 
823						 
824						<#assign viewURL = '' /> 
825						<#if linkedJournalArticle.getDDMStructure().getName("en_US") == "Bio Page"> 
826								<#assign viewURL = themeDisplay.getPortalURL() + "/about/people/bio/" + xml_fullName?lower_case?replace(" ", "-")/> 
827						</#if> 
828										 
829						bio.bioURL = '${viewURL}';	 
830						bios.push(bio); 
831 
832						<#if authorCounter == 0> 
833							<#assign authorListForPdf = [xml_fullName + "::::::::" + xml_title + "++++++++" + viewURL + ";;;;;;;;" +  headshotImageFileEntryId] + authorListForPdf /> 
834						</#if> 
835								 
836						<#assign viewURLschema = ''/> 
837						<#if viewURL?has_content> 
838						    <#assign viewURLschema =  viewURL /> 
839						</#if> 
840						 
841						<#if oldwaytogetauthourforschema> 
842							<#assign authordataschema = {"url":viewURLschema, "jobTitle":xml_title, "name":xml_fullName} /> 
843							<#assign authorlistschema = authorlistschema + [authordataschema] /> 
844						</#if>	 
845				</#if> 
846			</#list> 
847 
848			bios.sort(function(bio1, bio2){ 
849				return bio1.weight - bio2.weight; 
850			}); 
851		</#if> 
852 
853
854	<#assign assetCategories = AssetCategoryLocalService.getCategories(CurrentAssetEntry.getClassNameId(), CurrentAssetEntry.getClassPK())> 
855 
856	var articleCategories = []; 
857 
858	<#list assetCategories as category> 
859		<#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())> 
860		<#assign categoryUrl = "#"> 
861 
862		<#list AssetCategoryPropertyLocalService.getCategoryProperties(category.categoryId) as categoryProperty> 
863 
864			<#if categoryProperty.key == "url"> 
865				<#assign categoryUrl = categoryProperty.value> 
866			</#if> 
867		</#list> 
868 
869    articleCategories.push({ 
870		id: "${category.categoryId}", 
871		name: "${category.name}", 
872		url: "${categoryUrl}", 
873		vocabularyName: "${categoryVocabulary.getName()?js_string}", 
874	}); 
875	</#list> 
876 
877	articleMetadata.categories = articleCategories; 
878	<#if LayoutSetService.getLayoutSet(articleGroup.getGroupId(), false)?? 
879	&& LayoutSetService.getLayoutSet(articleGroup.getGroupId(), false).getThemeSetting("isMicroSite", "regular")?? > 
880		<#assign isMicroSite = (LayoutSetService.getLayoutSet(articleGroup.getGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")> 
881	<#else> 
882		<#assign isMicroSite = false> 
883	</#if> 
884	 
885    <#-- ATK-1384 -- 240212 is groupid for Microsite --> 
886    <#assign siteName = "Kearney"> 
887    <#if GroupLocalService.getGroup(themeDisplay.getScopeGroupId()).getParentGroupId() == 240212> 
888    	<#assign siteName = GroupLocalService.getGroup(themeDisplay.getScopeGroupId()).getName("en_US")?cap_first /> 
889    </#if>	 
890 
891	articleMetadata.isMicroSite = ${isMicroSite?c}; 
892	articleMetadata.groupName = "${articleGroup.getName("en_US")?js_string}"; 
893	articleMetadata.siteName = "${siteName?js_string}"; 
894	articleMetadata.groupFriendlyUrl = "${articleGroup.getFriendlyURL()?js_string}"; 
895 
896	<#if ReadMoreURL??> 
897    articleMetadata.readMoreURL = "${ReadMoreURL.getData()?js_string}"; 
898	<#else> 
899    articleMetadata.readMoreURL = ""; 
900	</#if> 
901 
902	<#if ReadMoreTextOverride??> 
903    articleMetadata.readMoreTextOverride = "${(htmlUtil.unescape(ReadMoreTextOverride.getData()))?js_string}"; 
904	<#else> 
905    articleMetadata.readMoreTextOverride = ""; 
906	</#if> 
907 
908	<#if ContributorsTitleOverride??> 
909    articleMetadata.contributorsTitleOverride = "${(htmlUtil.unescape(ContributorsTitleOverride.getData()))?js_string}"; 
910	<#else> 
911    articleMetadata.contributorsTitleOverride = ""; 
912	</#if> 
913 
914	<#if ReadMoreOverlay??> 
915            articleMetadata.readMoreOverlay = ${getterUtil.getBoolean(ReadMoreOverlay.getData())?c} 
916	<#else> 
917            articleMetadata.readMoreOverlay = false; 
918	</#if> 
919	 
920	var sidebarContents = []; 
921	<#assign enableSidebar = false> 
922	<#if EnableSidebar??> 
923		<#assign enableSidebar = getterUtil.getBoolean(EnableSidebar.getData())> 
924	</#if> 
925	<#-- Check if Sidebar is enabled or not --> 
926	<#if enableSidebar == true> 
927	      
928	     <#assign listingOfArticles = false> 
929	     <#assign singleAssetWithImage = false> 
930	     <#assign richTextSection = false> 
931	     <#assign listView = false> 
932	     <#if EnableSidebar.ListingOfArticles??>  
933	     	 <#assign listingOfArticles = getterUtil.getBoolean(EnableSidebar.ListingOfArticles.getData())> 
934	     </#if> 
935	     <#if EnableSidebar.SingleAssetWithImage??> 
936	     	 <#assign singleAssetWithImage = getterUtil.getBoolean(EnableSidebar.SingleAssetWithImage.getData())> 
937	     </#if> 
938	     <#if EnableSidebar.RichTextSection??> 
939	     	<#assign richTextSection = getterUtil.getBoolean(EnableSidebar.RichTextSection.getData())> 
940	     </#if> 
941	     <#if EnableSidebar.ListView??> 
942	     	<#assign listView = getterUtil.getBoolean(EnableSidebar.ListView.getData())>	 
943	     </#if> 
944	      
945	     <#-- Web content with Link Structure -- ATK-1208 --> 
946         <#if PostArticleSlideShareKeyFieldSet.PostArticleSlideShareKeyFieldSetFieldSet.PostArticleSlideshareContent?has_content> 
947	       <#assign linkAssetArticle = ArticleTemplateCustomService.getManualArticle(PostArticleSlideShareKeyFieldSet.PostArticleSlideShareKeyFieldSetFieldSet.PostArticleSlideshareContent.getData())!"null" /> 
948		   <#if !linkAssetArticle?matches("null")>		 	 
949			  <#assign jArt = JournalArticleLocalService.getLatestArticle(linkAssetArticle.getClassPK())> 
950          	  <#assign document = saxReaderUtil.read(jArt.getContentByLocale(themeDisplay.getLocale()))> 
951              <#assign structureName = jArt.getDDMStructure().getName("en_US")> 
952              <#if structureName?matches("Link")> 
953	              var articleSidebarRichText = <@entryNode document=document field="ArticleSidebarRichText"/>; 
954	              var linkWebContentData = { 
955            		  articleSidebarRichText: articleSidebarRichText 
956
957            	  sidebarContents.push({ 
958            		  linkWebContentData:linkWebContentData, 
959            		  componentType:"linkWebContent" 
960            	  }); 
961              </#if> 
962		   </#if> 
963         </#if> 
964	      
965	     <#-- If Asset publisher listing of articles is enabled --> 
966	     <#if listingOfArticles == true> 
967			 
968	     	<#assign listOfArticlesTitles = "Related"> 
969			<#if EnableSidebarFieldSet.EnableSidebarFieldSetFieldSet.ListingOfArticlesFieldSet.ListingOfArticlesFieldSetFieldSet.getSiblings()?has_content> 
970				<#list EnableSidebarFieldSet.EnableSidebarFieldSetFieldSet.ListingOfArticlesFieldSet.ListingOfArticlesFieldSetFieldSet.getSiblings() as assetArticleListEntry> 
971					<#if assetArticleListEntry.ListingOfArticlesTitle.getData()?has_content> 
972						<#assign listOfArticlesTitles = htmlUtil.unescape(assetArticleListEntry.ListingOfArticlesTitle.getData())> 
973					</#if> 	 
974					<#assign manualArticlesEntries = {}> 	 
975					<#if assetArticleListEntry.SelectSidebarArticles??> 
976						<#assign manualArticlesEntries = ArticleTemplateCustomService.getManualArticleList(assetArticleListEntry.SelectSidebarArticles.getSiblings())>  
977					</#if> 
978					var manualArticlesEntry = []; 
979					<#if manualArticlesEntries?size &gt; 0 > 
980							<#list manualArticlesEntries as curEntry> 
981								<#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())> 
982								<#assign viewURL = TemplateCustomService.getSidebarArticleViewURL(themeDisplay,jArt,assetLibGroup)/> 
983								var articleEntry = {"articleTitle": "${TemplateCustomService.getSidebarArticleTitle(themeDisplay,jArt,assetLibGroup)}","articleURL":"${viewURL}"}; 
984								manualArticlesEntry.push(articleEntry);      	  	             	  	        
985							</#list> 
986					<#else> 
987							<#assign noOfFeatureArticle = "3"> 
988							<#if assetArticleListEntry.NoOfArticlesDisplayed.getData() != "0"> 
989								<#assign noOfFeatureArticle = assetArticleListEntry.NoOfArticlesDisplayed.getData()>  
990							</#if> 
991							<#assign manualArticlesEntries = ArticleTemplateCustomService.getRelatedArticles(CurrentAssetEntry.getEntryId(), CurrentAssetEntry.getClassTypeId(), noOfFeatureArticle, "Any")> 
992							<#list manualArticlesEntries as curEntry> 
993								<#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())> 
994								<#assign viewURL = TemplateCustomService.getSidebarArticleViewURL(themeDisplay,jArt,assetLibGroup)/> 
995								var articleEntry = {"articleTitle": "${TemplateCustomService.getSidebarArticleTitle(themeDisplay,jArt,assetLibGroup)}","articleURL":"${viewURL}"}; 
996								manualArticlesEntry.push(articleEntry);      	  	             	  	        
997							</#list>  
998					</#if> 
999					sidebarContents.push({ 
1000						listingOfArticlesTitle:"${listOfArticlesTitles}", 
1001						manualArticles:manualArticlesEntry, 
1002						componentType:"listingOfArticles" 
1003					}); 
1004				</#list> 
1005			</#if> 
1006	     	  
1007	     </#if> 
1008	     <#-- Single Asset Image article --> 
1009	     <#if singleAssetWithImage == true> 
1010	     	  <#if EnableSidebarFieldSet.EnableSidebarFieldSetFieldSet.SingleAssetWithImageFieldSet.SingleAssetWithImageArticleFieldSet.getSiblings()?has_content> 
1011                <#list EnableSidebarFieldSet.EnableSidebarFieldSetFieldSet.SingleAssetWithImageFieldSet.SingleAssetWithImageArticleFieldSet.getSiblings() as singleAssetEntry> 
1012                     
1013                    <#assign learnMoreText = "Learn more"> 
1014                    <#assign enableTNSImage = true>     
1015                    <#assign enableSlug = true> 
1016 
1017                    <#if singleAssetEntry.SingleAssetWithImageArticleFieldSetFieldSet.LearnMoreButtonText.getData()??> 
1018                        <#assign learnMoreText = htmlUtil.unescape(singleAssetEntry.SingleAssetWithImageArticleFieldSetFieldSet.LearnMoreButtonText.getData())/> 
1019                    </#if> 
1020 
1021                    <#if singleAssetEntry.SingleAssetWithImageArticleFieldSetFieldSet.EnableTNSImage??> 
1022                        <#assign enableTNSImage = getterUtil.getBoolean(singleAssetEntry.SingleAssetWithImageArticleFieldSetFieldSet.EnableTNSImage.getData())/> 
1023                    </#if>     
1024 
1025                    <#if singleAssetEntry.SingleAssetWithImageArticleFieldSetFieldSet.EnableSlug??> 
1026                        <#assign enableSlug = getterUtil.getBoolean(singleAssetEntry.SingleAssetWithImageArticleFieldSetFieldSet.EnableSlug.getData())>     
1027                    </#if> 
1028 
1029                    <#assign singleAssetArticleData = jsonFactoryUtil.createJSONObject(singleAssetEntry.SingleAssetWithImageArticle.getData())/> 
1030                     
1031                    <#if singleAssetArticleData?has_content>  
1032                        <#assign singleAssetArticle = ArticleTemplateCustomService.getManualArticle(singleAssetEntry.SingleAssetWithImageArticle.getData())> 
1033                        <#assign jArt = JournalArticleLocalService.getLatestArticle(singleAssetArticle.getClassPK())> 
1034                        <#assign document = saxReaderUtil.read(jArt.getContentByLocale(themeDisplay.getLocale()))> 
1035                        <#assign structureName = jArt.getDDMStructure().getName("en_US")> 
1036                         
1037                        var componentType = "FEATURED_ARTICLE"; 
1038                        var title = <@entryNode document=document field="ArticleTitle"/>;  
1039                        var subtitle = <@entryNode document=document field="Subtitle"/>;  
1040                        var description = <@entryNode document=document field="Description"/>; 
1041                        if (description == "") { 
1042                            description = <@entryNode document=document field="Intro"/>; 
1043
1044                        var slug = <@entryNode document=document field="Slug"/>;  
1045                        var linkTargetOverride = <@entryNode document=document field="LinkTargetOverride"/>;  
1046                         
1047                        if(linkTargetOverride == "" || linkTargetOverride == null) { 
1048                            linkTargetOverride = <@entryNode document=document field="LinkURL"/>;  
1049
1050                        <#-- ATK-1357 Changes Start --> 
1051                        var videoUrl = ""; 
1052                        <#if structureName?matches('Video')>  
1053                        	videoUrl = <@entryNode document=document field="VideoURL"/>; 
1054                        </#if> 
1055                        <#-- ATK-1357 Changes End -->	 
1056 
1057                        <#assign articleGroup = GroupLocalService.getGroup(jArt.getGroupId())> 
1058 
1059                        <#if LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false)??&& LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular")??> 
1060                            <#assign isMicroSite = (LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")> 
1061                        <#else> 
1062                            <#assign isMicroSite = false> 
1063                        </#if> 
1064 
1065                        var imageFileEntryId = 0; 
1066                        var imageFileName = ""; 
1067                        var image = '${TemplateCustomService.getDocumentFileDetails(document,"ThumbnailSquare",themeDisplay)}'; 
1068                        if (null == image || "" == image) { 
1069                            image = '${TemplateCustomService.getDocumentFileDetails(document,"Thumbnail",themeDisplay)}'; 
1070
1071                        if (null == image) { 
1072                            image = ""; 
1073
1074                         
1075                        if ((image) || image != "") {  
1076                            var [imageFileEntryId, restString] = image.split('+++++'); 
1077                            var [imageFileName, image] = restString.split('*****'); 
1078
1079 
1080                        var singleAssetComponent = { 
1081                            slug: slug, 
1082                            title: title, 
1083                            subtitle: subtitle, 
1084                            description: description, 
1085                            structureName: '${structureName}', 
1086                            image: image.trim(), 
1087                            imageFileEntryId: imageFileEntryId, 
1088                            imageFileName: imageFileName, 
1089                            imageSaturationFilter:'${imageSaturationFilter?c}', 
1090                            groupFriendlyUrl: '${articleGroup.getFriendlyURL()}', 
1091                            isMicrosite: ${isMicroSite?c}, 
1092                            linkTargetOverride: linkTargetOverride, 
1093                            videoUrl: videoUrl 
1094
1095                         
1096                        sidebarContents.push({ 
1097                            singleAssetData: singleAssetComponent, 
1098                            componentType: "singleAsset", 
1099                            learnMoreTextValue: '${learnMoreText}', 
1100                            enableSlugValue: ${enableSlug?c}, 
1101                            enableTNSImageValue: ${enableTNSImage?c} 
1102                        }); 
1103                    </#if> 
1104                </#list> 
1105            </#if> 
1106 
1107	     </#if> 
1108	     <#-- Rich Text Section --> 
1109	     <#if richTextSection == true> 
1110	     		var richTextSectionData = []; 
1111	     		<#if EnableSidebar.RichTextSection.RichTextSectionContent.getSiblings()?has_content> 
1112				<#list EnableSidebar.RichTextSection.RichTextSectionContent.getSiblings() as richTextData> 
1113					<#if (richTextData.getData())??> 
1114						<#assign richTextSection = richTextData.getData()> 
1115						richTextSectionData.push({ 
1116							richTextSectionContent: '${richTextSection?js_string}' 
1117						}); 
1118					</#if> 
1119				</#list> 
1120				</#if> 
1121	     		 
1122	     		sidebarContents.push({ 
1123	     			richTextContentData : richTextSectionData, 
1124	     			componentType:"richTextContent" 
1125	     		}); 
1126	     </#if> 
1127	     <#-- List View --> 
1128	     <#if listView == true> 
1129	            <#if EnableSidebarFieldSet.EnableSidebarFieldSetFieldSet.ListViewFieldSet.ListViewFieldSetFieldSet.getSiblings()?has_content> 
1130                    <#list EnableSidebarFieldSet.EnableSidebarFieldSetFieldSet.ListViewFieldSet.ListViewFieldSetFieldSet.getSiblings() as listViewEntry> 
1131 
1132                            var listViewComponentData = []; 
1133                            <#assign listViewTitle = "Related">     
1134                            <#assign displayListViewTitle = false> 
1135                             
1136                            <#if listViewEntry.ListViewTitleFieldSet.ListViewTitle.getData()??> 
1137                                <#assign listViewTitle = htmlUtil.unescape(listViewEntry.ListViewTitleFieldSet.ListViewTitle.getData())> 
1138                            </#if> 
1139                             
1140                            <#if listViewEntry.ListViewTitleFieldSet.ListViewTitleFieldSetFieldSet.DisplayListViewTitle.getData()??> 
1141                                <#assign displayListViewTitle = getterUtil.getBoolean(listViewEntry.ListViewTitleFieldSet.ListViewTitleFieldSetFieldSet.DisplayListViewTitle.getData())>     
1142                            </#if> 
1143                             
1144                            <#if listViewEntry.ListViewTextFieldSet.getSiblings()?has_content> 
1145                                <#list listViewEntry.ListViewTextFieldSet.getSiblings() as listViewData> 
1146                                    <#assign listView = htmlUtil.unescape(listViewData.ListViewText.getData())> 
1147                                    <#assign listlink = listViewData.ListViewTextFieldSetFieldSet.ListViewLink.getData()> 
1148                                    listViewComponentData.push({ 
1149                                        listViewTitle: '${listView}', 
1150                                        listViewLink: '${listlink}', 
1151                                    }); 
1152                                </#list> 
1153                            </#if> 
1154                             
1155                            sidebarContents.push({ 
1156                                listViewData: listViewComponentData, 
1157                                componentType: "listView", 
1158                                listViewTitleValue: '${listViewTitle}', 
1159                                displayListViewTitleValue: ${displayListViewTitle?c} 
1160                            }); 
1161                    </#list> 
1162                </#if> 
1163 
1164	     </#if> 
1165	 
1166	</#if> 
1167	 
1168	<#-- ATK - 902 Changes Start --> 
1169	ATK.isArticlePage = 'false'; 
1170	<#if LandingArticle == false > 
1171    	<#if themeDisplay.getURLCurrent()?contains("/article/") || themeDisplay.getURLCurrent()?contains("/-/") || (themeDisplay.getURLCurrent()?contains("/alumni/alumni-profiles/") && !themeDisplay.getURLCurrent()?ends_with("/alumni/alumni-profiles/")) > 
1172    		ATK.isArticlePage = 'true'; 
1173    	</#if> 
1174    </#if>	 
1175	<#-- ATK - 902 Changes Over --> 
1176 
1177	<#if PDF?? && PDF.getData() != ""> 
1178    articleMetadata.pdf = "${PDF.getData()?js_string}" 
1179	<#else> 
1180	<#if !GroupLocalService.getGroup(themeDisplay.getScopeGroupId()).getName("en_US")?matches("Japan") && !GroupLocalService.getGroup(themeDisplay.getScopeGroupId()).getName("en_US")?matches("China")> 
1181		<#assign pdfURL = DynamicPDFGenerationCustomService.getPdfUrl(CurrentJournalArticle, assetLibGroup, "Article-Pdf", themeDisplay, authorListForPdf, isMicroSite, LandingArticle, "pdf-boilerplate-code", externalHeroBannerImageURL, hasExternalHeroBanner, externalHeroBannerTitle, externalHeroBannerSubTitle) /> 
1182		articleMetadata.pdf = "${pdfURL?js_string}"; 
1183	</#if> 
1184	</#if> 
1185	 
1186	ATK.React.App.Article('articleDiv', articleMetadata, articleContents, bios, sidebarContents); 
1187 
1188	// Run embedded scripts after article renders. 
1189	for (var i in articleContents) { 
1190 
1191		var re = /<script>(.+)<\/script>/gi; 
1192		var thisExtractedScript = ['', '']; 
1193 
1194		while (null != (thisExtractedScript = re.exec(articleContents[i].content))) { 
1195			window.eval(thisExtractedScript[1]); 
1196
1197
1198 
1199</script> 
1200 
1201<div class="atk-container"> 
1202	<hr class="after-25-px-phone" style="display: none;" id="hrfeatureArticle"> 
1203</div> 
1204 
1205 
1206<div id="articleAdtDiv_${portletId}" class="articleAdtDiv" /> 
1207 
1208<script> 
1209<#assign enableRelatedInsights = false> 
1210 
1211<#if EnableRelatedInsights??> 
1212	<#assign enableRelatedInsights = getterUtil.getBoolean(EnableRelatedInsights.getData())> 
1213</#if> 
1214<#if enableRelatedInsights == true> 
1215<#assign multiArtBehavior = "Two Wide"> 
1216<#assign gridTitle = "Also of interest"> 
1217<#assign noOfFeatureArticle = "2"> 
1218<#assign featureDisplayType = "Image Left"> 
1219 
1220<#assign fullWidthDisplay = "false"> 
1221<#assign greyBackground = "false"> 
1222<#assign extraSpacer = "None"> 
1223<#assign seeAllLink = ""> 
1224<#assign seeAllLinkText = ""> 
1225<#assign greyBackground = "false"> 
1226<#assign extraSpacer = "None"> 
1227<#assign autoplay = "false"> 
1228<#assign featureDisplayButtonType = "Visible"> 
1229<#assign featureDisplayButtonText = ""> 
1230 
1231<#if GridTitle??> 
1232	<#assign gridTitle =  htmlUtil.unescape(GridTitle.getData())> 
1233</#if> 
1234<#if gridTitle?has_content> 
1235	<#-- ATK-712: Code Start --> 
1236	<#if gridTitle?matches("Related insights") || gridTitle?matches("Related Insights")> 
1237		<#assign gridTitle =  "Also of interest"> 
1238	</#if> 
1239	<#-- ATK-712: Code End --> 
1240<#else> 
1241	<#assign gridTitle =  "Also of interest"> 
1242</#if> 
1243<#if MultipleArticleBehavior??> 
1244	<#assign multiArtBehavior =  MultipleArticleBehavior.getData()> 
1245</#if> 
1246<#if multiArtBehavior?has_content> 
1247<#else> 
1248	<#assign multiArtBehavior =  "Two Wide"> 
1249</#if> 
1250<#if NoOfFeatureArticles??> 
1251	<#assign noOfFeatureArticle =  NoOfFeatureArticles.getData()> 
1252</#if> 
1253<#if noOfFeatureArticle?has_content> 
1254<#else> 
1255	<#assign noOfFeatureArticle =  "2"> 
1256</#if> 
1257 
1258<#assign featureDisplayType = preferences.getValue("featureDisTypeRelatedInsights", "Image Left")?js_string> 
1259 
1260<#assign jaEntries = {}>  
1261<#if RelatedInsightsArticles??> 
1262	<#assign jaEntries = ArticleTemplateCustomService.getManualArticleList(RelatedInsightsArticles.getSiblings())>  
1263</#if> 
1264 
1265<#if jaEntries?size == 0 > 
1266	<#attempt> 
1267		<#assign jaEntries = ArticleTemplateCustomService.getRelatedArticles(CurrentAssetEntry.getEntryId(),  CurrentAssetEntry.getClassTypeId(), noOfFeatureArticle, "Any")> 
1268 	<#recover> 
1269        <#assign jaEntries = {}> 
1270    </#attempt> 
1271</#if> 
1272 
1273<#if jaEntries?size == 0 > 
1274		<#assign gridTitle = " "> 
1275<#else> 
1276	$('#hrfeatureArticle').css('display','block'); 
1277</#if> 
1278 
1279var entries = []; 
1280	<#if jaEntries?size &gt; 0 > 
1281        <#list jaEntries as curEntry> 
1282 
1283            <#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())> 
1284            <#assign document = saxReaderUtil.read(jArt.getContentByLocale(themeDisplay.getLocale()))> 
1285 
1286            <#assign structureName = jArt.getDDMStructure().getName("en_US")> 
1287 
1288            var componentType = "FEATURED_ARTICLE"; 
1289 
1290            var title = <@entryNode document=document field="ArticleTitle"/>; 
1291 
1292            var subtitle = <@entryNode document=document field="Subtitle"/>; 
1293 
1294            var description = <@entryNode document=document field="Description"/>; 
1295            if (description == ""){ 
1296				description = <@entryNode document=document field="Intro"/>; 
1297
1298 
1299            var slug = <@entryNode document=document field="Slug"/>; 
1300 
1301            <#assign articleGroup = GroupLocalService.getGroup(jArt.getGroupId())> 
1302 
1303            <#if LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false)?? 
1304            && LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular")?? > 
1305                <#assign isMicroSite = (LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")> 
1306            <#else> 
1307                <#assign isMicroSite = false> 
1308            </#if> 
1309 
1310            var imageFileEntryId = 0; 
1311            var imageFileName = ""; 
1312            var image = '${TemplateCustomService.getDocumentFileDetails(document,"ThumbnailSquare",themeDisplay)}';  
1313            if (null == image || "" == image || ${(fullWidthDisplay == "true")?c}) { 
1314				image = '${TemplateCustomService.getDocumentFileDetails(document,"Thumbnail",themeDisplay)}'; 
1315
1316            if (null == image) { 
1317				image = ""; 
1318
1319			 
1320			if ((image) || image != "") {  
1321				var [imageFileEntryId, restString] = image.split('+++++'); 
1322				var [imageFileName, image] = restString.split('*****'); 
1323
1324 
1325            var componentData = { 
1326				locale: "${locale}", 
1327				structureName: "${structureName}", 
1328				displayType: "${featureDisplayType}", 
1329				slug: slug, 
1330				title: title, 
1331				subtitle: subtitle, 
1332				description: description, 
1333				image: image.trim(), 
1334				imageFileEntryId: imageFileEntryId, 
1335				imageFileName: imageFileName, 
1336				imageSaturationFilter:'${imageSaturationFilter?c}', 
1337				groupFriendlyUrl: '${articleGroup.getFriendlyURL()}', 
1338				isMicrosite: ${isMicroSite?c}, 
1339				multiArtBehavior: '${multiArtBehavior}', 
1340                featureDisplayButtonText: '${featureDisplayButtonText}', 
1341                featureDisplayButtonType: '${featureDisplayButtonType}', 
1342				componentType: componentType 
1343			}; 
1344            <#if structureName == "Article"> 
1345 
1346                var linkTargetOverride = <@entryNode document=document field="LinkTargetOverride"/>; 
1347 
1348                if (linkTargetOverride !== ""){ 
1349					componentData.link = linkTargetOverride; 
1350				} else {                     
1351					<#assign assetCategories = AssetCategoryLocalService.getCategories(curEntry.getClassNameId(), curEntry.getClassPK())> 
1352 
1353					var articleCategories = []; 
1354 
1355                    <#list assetCategories as category> 
1356                        <#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())> 
1357                        <#assign categoryUrl = "#"> 
1358 
1359                        <#list AssetCategoryPropertyLocalService.getCategoryProperties(category.categoryId) as categoryProperty> 
1360 
1361                            <#if categoryProperty.key == "url"> 
1362                                <#assign categoryUrl = categoryProperty.value> 
1363                            </#if> 
1364                        </#list> 
1365	 
1366                        articleCategories.push({ 
1367							id: "${category.categoryId}", 
1368							name: "${category.name}", 
1369							url: "${categoryUrl}", 
1370							vocabularyName: "${categoryVocabulary.getTitle(locale)}", 
1371						}); 
1372				    
1373                    </#list> 
1374 
1375 
1376					componentData.categories = articleCategories; 
1377					componentData.urlTitle = "${jArt.getUrlTitle()?js_string}"; 
1378
1379 
1380                var byline = <@entryNode document=document field="Byline"/>; 
1381                if (byline != null && byline != ""){ 
1382					componentData.byline = []; 
1383				};    
1384            </#if> 
1385            <#if structureName == "Link" || structureName == "External Article" || structureName == "Video"> 
1386                var linkURL = <@entryNode document=document field="LinkURL"/>; 
1387                if (linkURL !== ""){ 
1388					componentData.link = linkURL; 
1389
1390            </#if> 
1391            <#if structureName == "Video"> 
1392            	var videoURL = <@entryNode document=document field="VideoURL"/>; 
1393            	if (videoURL !== ""){ 
1394					componentData.videoURL = videoURL; 
1395
1396            </#if> 
1397            entries.push(componentData); 
1398         </#list> 
1399    </#if> 
1400 
1401var componentVoiceSearch = "article";  
1402var extraProps = { 
1403			multiArtBehavior: "${multiArtBehavior}", 
1404			gridTitle: "${gridTitle}", 
1405			fullWidthDisplay: "${fullWidthDisplay}", 
1406			greyBackground: "${greyBackground}", 
1407			extraSpacer: "${extraSpacer}", 
1408			seeAllLink: "${seeAllLink}", 
1409			seeAllLinkText: "${seeAllLinkText}", 
1410			componentVoiceSearch: componentVoiceSearch 
1411		}; 
1412        ATK.React.Component.FeaturedMultiDisplay("articleAdtDiv_${portletId?js_string}", extraProps, entries); 
1413</#if> 
1414</script> 
1415 
1416<#compress> 
1417<#if (htmlUtil.unescape(Slug.getData()))?lower_case == "article" > 
1418	<script id ="article-structured-data" type="application/ld+json"> 
1419
1420		  "@context": "https://schema.org", 
1421		  "@type": "Article", 
1422		  "dateModified" : "${modifiedDate}", 
1423		  "datePublished": "${displayDateForSchema}", 
1424		  <#if (ArticleTitle.getData())?has_content>"headline": "${(htmlUtil.unescape(ArticleTitle.getData()))?json_string}",</#if> 
1425		  <#if answer?has_content> 
1426				<#if answer?contains("l2it-audio-player")> 
1427				     <#assign answer = answer?json_string?keep_before_last('<div id') /> 
1428				<#else> 
1429				     <#assign answer = answer?json_string /> 
1430                </#if>  
1431		  "description" : "${answer}",</#if> 
1432		  <#if imageurlschema?has_content>"image" : "${imageurlschema}",</#if> 
1433		  "mainEntityOfPage": { 
1434		        "@type": "WebPage", 
1435		        "@id": "${pageurlcurrent}" 
1436		    }, 
1437		  "author" : [ 
1438		  <#if (authorlistschema?size > 0)> 
1439		    <#list authorlistschema as author>     
1440
1441		                "@type" : "Person", 
1442		    	<#list author as cur_author_key, cur_author_value> 
1443		    			<#if cur_author_key=="url" && cur_author_value?has_content>"${cur_author_key}"  : "${cur_author_value}",</#if>		        		 
1444		        		<#if cur_author_key=="jobTitle" && cur_author_value?has_content>"${cur_author_key}"  : "${cur_author_value}",</#if> 
1445		        		<#if cur_author_key=="name" && cur_author_value?has_content>"${cur_author_key}"  : "${cur_author_value}"</#if> 
1446		        		 
1447		    	</#list> 
1448		    	        }<#if (author?index != (authorlistschema?size)-1)>,</#if> 
1449		    </#list>	 
1450		  </#if> 
1451		  ], 
1452		  "publisher": { 
1453		        "@type": "Organization", 
1454		        "@id": "https://www.kearney.com#organization" 
1455
1456
1457	</script> 
1458<#elseif (htmlUtil.unescape(Slug.getData()))?lower_case == "question and answer" > 
1459	<script id ="answer-structured-data" type="application/ld+json"> 
1460	 {	 		 	 
1461	      "@context": "https://schema.org", 
1462	      "@type": "FAQPage", 
1463	      "mainEntity": [{ 
1464	          "@type": "Question", 
1465	          "name": "${(htmlUtil.unescape(ArticleTitle.getData()))?json_string}", 
1466	          "acceptedAnswer": { 
1467	            "@type": "Answer", 
1468	             <#if answer?has_content> 
1469					<#if answer?contains("l2it-audio-player")> 
1470					     <#assign answer = answer?json_string?keep_before_last('<div id') /> 
1471					<#else> 
1472					     <#assign answer = answer?json_string /> 
1473                  </#if>  
1474				"text" : "${answer}",</#if>             
1475	            "author" : [ 
1476							  <#if (authorlistschema?size > 0)> 
1477							    <#list authorlistschema as author>     
1478
1479							                "@type" : "Person", 
1480							    	<#list author as cur_author_key, cur_author_value>						 
1481							    			<#if cur_author_key=="url" && cur_author_value?has_content>"${cur_author_key}"  : "${cur_author_value}",</#if>	        		 
1482							        		<#if cur_author_key=="jobTitle" && cur_author_value?has_content>"${cur_author_key}"  : "${cur_author_value}",</#if> 
1483							        		<#if cur_author_key=="name" && cur_author_value?has_content>"${cur_author_key}"  : "${cur_author_value}"</#if> 
1484							        		 
1485							    	</#list> 
1486							    	        }<#if (author?index != (authorlistschema?size)-1)>,</#if> 
1487							    </#list>	 
1488							  </#if> 
1489
1490
1491	        }] 
1492
1493	 </script> 
1494 </#if> 
1495 </#compress> 
1496  
1497  
1498 <script> 
1499// Listen for Liferay's SPA navigation event 
1500if (window.Liferay && Liferay.on) { 
1501    Liferay.on('endNavigate', function() { 
1502        // If the new page contains the audio player container, initialize Listen2It 
1503        if (document.getElementById('l2it-audio-player')) { 
1504            // Check if Listen2It has already been loaded; if not, load it. 
1505            if (typeof Listen2It === 'undefined') { 
1506						    try { 
1507                	initialize(document, "listen2it-widget"); 
1508
1509                catch(error) { 
1510                	console.error("Error with Listen2it Audio:", error); 
1511
1512
1513            else { 
1514                // If the widget is already loaded, just initialize it for the new page 
1515                try { 
1516                	initListen2It(); 
1517
1518                catch(error) { 
1519                	console.error("Error with initialization Listen2it Audio:", error); 
1520
1521
1522
1523    }); 
1524
1525</script> 
1526  
1527  
1528 <script> 
1529$(document).ready(function() { 
1530 
1531$("#linkedInShare").on( "click", function() { 
1532	 Analytics.track('socialShare',{ 
1533	'propertyName': 'socialShare', 
1534	<#if (ArticleTitle.getData())?has_content>"articleTitle": "${(htmlUtil.unescape(ArticleTitle.getData()))?json_string}",</#if> 
1535	'socialPlatform':'Linkedin', 
1536	'pageURL':themeDisplay.getLayoutURL() 
1537	}); 
1538 }) 
1539  
1540  $("#twitterShare").on( "click", function() { 
1541	 Analytics.track('socialShare',{ 
1542	'propertyName': 'socialShare', 
1543	<#if (ArticleTitle.getData())?has_content>"articleTitle": "${(htmlUtil.unescape(ArticleTitle.getData()))?json_string}",</#if> 
1544	'socialPlatform':'Twitter', 
1545	'pageURL':themeDisplay.getLayoutURL() 
1546	}); 
1547 }) 
1548 
1549 $("#facebookShare").on( "click", function() { 
1550	 Analytics.track('socialShare',{ 
1551	'propertyName': 'socialShare', 
1552	<#if (ArticleTitle.getData())?has_content>"articleTitle": "${(htmlUtil.unescape(ArticleTitle.getData()))?json_string}",</#if> 
1553	'socialPlatform':'Facebook', 
1554	'pageURL':themeDisplay.getLayoutURL() 
1555	}); 
1556 }) 
1557  
1558 $("#printIcon").on( "click", function() { 
1559	 Analytics.track('printPage',{ 
1560	'propertyName': 'printPage', 
1561	<#if (ArticleTitle.getData())?has_content>"articleTitle": "${(htmlUtil.unescape(ArticleTitle.getData()))?json_string}",</#if> 
1562	'pageURL':themeDisplay.getLayoutURL() 
1563	}); 
1564 }) 
1565  
1566}); 
1567 </script>