1<#assign
2 journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
3 assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
4 friendlyURLEntryLocalService = serviceLocator.findService("com.liferay.friendly.url.service.FriendlyURLEntryLocalService")
5 classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")
6 assetCategoryClassNameId = classNameLocalService.getClassNameId("com.liferay.asset.kernel.model.AssetCategory")
7
8 journalArticleId = .vars['reserved-article-id'].data
9 journalArticle = journalArticleService.getArticle(groupId, journalArticleId)
10 assetEntry = assetEntryLocalService.getEntry(journalArticle.getModelClassName(), journalArticle.getResourcePrimKey())
11
12 assetCategories = assetEntry.getCategories()
13/>
14
15<#assign
16 requestedUrl = themeDisplay.getURLCurrent()
17 currentPath = requestedUrl?keep_before("?")?remove_ending("/")
18 queryparameter=requestedUrl?keep_after("?")
19 curerntPathWithoutTags = currentPath?keep_before("/tags/")
20/>
21
22<#assign excludedCategories = ["News","Events","Report","Reports","z_Report_listing","Report_list","BREEAMNews","LPCB","BRE Group","Cities","Press releases","Case_Study","Case study","BREEAM_Insights","BREEAM_NEWS","Insights"] />
23
24<div class="c-article-stackable-card c-article-stackable-card--align-bottom">
25 <#if (CardImage.getData())?? && CardImage.getData() != "">
26 <div class="c-article-stackable-card__image">
27 <#if (CardImage.getData())?? && CardImage.getData() != "">
28 <img class="img-fluid lazy" loading="lazy" alt='${CardImage.getAttribute("alt")}'
29 data-fileentryid='${CardImage.getAttribute("fileEntryId")}' data-src="${CardImage.getData()}" />
30 </#if>
31 </div>
32 </#if>
33 <div class="c-article-stackable-card__body">
34
35 <#if (getterUtil.getBoolean(autoPopulateDate.getData()) && getterUtil.getBoolean(autoPopulateAuthor.getData())?has_content) || (MigrationDate.getData())?has_content>
36 <div class="c-article-stackable-card__byline c-article-stackable-card__byline--separator mb-1 mt-0">
37 <#else>
38 <div class="c-article-stackable-card__byline mb-1 mt-0">
39 </#if>
40
41 <#if getterUtil.getBoolean(autoPopulateDate.getData())>
42 <span class="c-article-stackable-card__date">
43 <#assign CardDate=.vars["reserved-article-create-date"].data />
44 <#if validator.isNotNull(CardDate)>
45 <#assign ArticleCardDate_DateObj=dateUtil.parseDate("EEE, d MMM yyyy HH:mm:ss Z", CardDate,locale)>
46 ${dateUtil.getDate(ArticleCardDate_DateObj, "dd MMMMM yyyy", locale)}
47 </#if>
48 </span>
49 <#else>
50 <span class="c-article-stackable-card__date">
51 <#if (MigrationDate.getData())?has_content>
52 <#assign ArticleMigrationDate_Data=getterUtil.getString(MigrationDate.getData())>
53 <#assign newDateobj=dateUtil.parseDate("yyyy-MM-dd HH:mm:ss", ArticleMigrationDate_Data, locale) />
54 <#assign migraDate=dateUtil.getDate(newDateobj, "dd MMMMM yyyy", locale) />
55 ${migraDate}
56 </#if>
57 </span>
58 </#if>
59
60 <#if getterUtil.getBoolean(autoPopulateAuthor.getData())>
61 <span class="c-article-stackable-card__author">${.vars["reserved-article-author-name"].data}</span>
62 <#else>
63 <#if (AuthorName.getData())?has_content>
64 <span class="c-article-stackable-card__author">${AuthorName.getData()}</span>
65 </#if>
66 </#if>
67
68 </div>
69
70 <#if (CardTitle.getData())??>
71 <h3 class="c-article-stackable-card__title d-flex">
72 <#if (buttonLink.getFriendlyUrl())?has_content>
73 <a data-senna-off="true" href="${buttonLink.getFriendlyUrl()}">${CardTitle.getData()}</a>
74 <#elseif (ExternalLink.getData())?has_content>
75 <a data-senna-off="true" href="${ExternalLink.getData()}" target="_blank">${CardTitle.getData()}</a>
76 <#else>
77 ${CardTitle.getData()}
78 </#if>
79 </h3>
80 </#if>
81
82 <#if assetCategories??>
83
84 <div class="c-article-stackable-card__category mt-auto mb-0">
85 <#assign filterCategories = [] />
86 <#list assetCategories as category>
87 <#if ! excludedCategories?seq_contains(category.getName())>
88 <#assign filterCategories += [category] />
89 </#if>
90 </#list>
91 <#list filterCategories as category>
92 <#assign categoryName = category.getName() />
93
94 <#assign friendlyURLs =
95 friendlyURLEntryLocalService.getFriendlyURLEntryLocalizations
96 (category.getGroupId(), assetCategoryClassNameId, category.getCategoryId(), localeUtil.toLanguageId(locale), 0, 1, null) />
97 <#if friendlyURLs?size == 1>
98 <#assign curTagFriendlyUrl = friendlyURLs[0].getUrlTitle() />
99 </#if>
100
101 <#assign curTagUrl = curerntPathWithoutTags + "/tags/" + curTagFriendlyUrl + "?" +queryparameter />
102
103 <a href="${curTagUrl}" class="c-new-small-tag">${categoryName}</a><#sep>, </#sep>
104
105 </#list>
106 </div>
107 </#if>
108
109</div>
110
111<div class="c-link-redirection d-none">
112 <#if (buttonLink.getFriendlyUrl())?has_content>
113 <a data-senna-off="true" href="${buttonLink.getFriendlyUrl()}">
114 ${buttonLink.getFriendlyUrl()}
115 </a>
116 </#if>
117 <#if (ExternalLink.getData())?has_content>
118 <a data-senna-off="true" href="${ExternalLink.getData()}" target="_blank">
119 ${ExternalLink.getData()}
120 </a>
121 </#if>
122</div>
123
124<style>
125 .c-article-stackable-card__title a {
126 font-family: "Recife Text";
127 font-size: 1.75rem;
128 line-height: 2.125rem;
129 color: #1E1836;
130 }
131 .c-article-stackable-card__category a {
132 font-family: unset;
133 /*color: #757283;*/
134 color: unset;
135 }
136 .c-report-listing .c-article-stackable-card__category:hover,
137 .c-article-stackable-card:hover .c-article-stackable-card__title { text-decoration: none; }
138</style>