LUDWIGSBURG: DIGITALE VERKEHRSSYSTEME
Asset Headline News
LUDWIGSBURG: DIGITALE VERKEHRSSYSTEME
Asset Publisher
Fehler bei der Verarbeitung der Vorlage.
Java method "com.sun.proxy.$Proxy132.getFileEntryByUuidAndGroupId(String, long)" threw an exception when invoked on com.sun.proxy.$Proxy132 object "com.liferay.portlet.documentlibrary.service.impl.DLAppServiceImpl@16ee9f87"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign Datei = DLAppServiceUtil.getF... [in template "digital-bw.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in macro "showCopyright" at line 189, column 9] - Reached through: @common.showCopyright imageUrl=src al... [in template "20115#20151#NEWS" in macro "showSlide" at line 687, column 13] - Reached through: @showSlide image=curMedium counter=cu... [in template "20115#20151#NEWS" at line 288, column 64] ----
1<#-- @ftlvariable name="journalArticleLocalService" type="com.liferay.journal.service.JournalArticleLocalService" -->
2<#-- @ftlvariable name="assetEntryLocalService" type="com.liferay.asset.kernel.service.AssetEntryLocalService" -->
3<#-- @ftlvariable name="assetCategoryLocalService" type="com.liferay.asset.kernel.service.AssetCategoryLocalService" -->
4<#-- @ftlvariable name="journalArticle" type="com.liferay.journal.model.JournalArticle" -->
5<#-- @ftlvariable name="assetEntry" type="com.liferay.asset.kernel.model.AssetEntry" -->
6<#-- @ftlvariable name="assetCategories" type="java.util.List<liferay.asset.kernel.model.AssetCategory>" -->
7<#-- @ftlvariable name="companyLocalService" type="com.liferay.portal.kernel.service.CompanyLocalService" -->
8<#-- @ftlvariable name="groupLocalService" type="com.liferay.portal.kernel.service.GroupLocalService" -->
9<#-- @ftlvariable name="dlAppServiceUtil" type="com.liferay.document.library.kernel.service.DLAppService" -->
10
11<#import "/digital-bw.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common>
12
13<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
14<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
15<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
16
17<#assign companyLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.CompanyLocalService") />
18<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") />
19<#assign layoutSetLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutSetLocalService") />
20
21<#assign dlAppServiceUtil = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService")>
22
23<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) />
24<#assign resourcePrimKey = journalArticle.resourcePrimKey />
25<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) />
26<#assign assetCategories = assetCategoryLocalService.getAssetEntryAssetCategories(assetEntry.entryId) />
27
28<#assign serviceContextThreadLocal = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"] />
29<#assign serviceContext = serviceContextThreadLocal.getServiceContext() />
30<#assign httpServletRequest = serviceContext.getRequest() />
31
32<#assign namespace = randomNamespace />
33<#assign title = .vars['reserved-article-title'].data />
34
35<#assign company = companyLocalService.getCompany(portal.defaultCompanyId) />
36<#assign companyGroup = company.group />
37<#assign logoFolder = dlAppServiceUtil.getFolder(companyGroup.groupId, 0, "logo") />
38
39<#switch portal.getPortalURL(themeDisplay)>
40 <#case "https://digital-bw.web.bwl.de">
41 <#case "https://digital-bw.landbw.de">
42 <#case "https://www.digital-bw.de">
43 <#assign domainHost = "http://web-digital-bw-liferay:8080" />
44 <#break>
45 <#default>
46 <#assign
47 domainHost = portal.getPortalURL(themeDisplay)
48 />
49</#switch>
50
51<#assign currentURL = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
52<#assign
53 layoutSet = layoutSetLocalService.getLayoutSet(groupId, layout.isPrivateLayout())
54 groupFriendlyURL = portal.getGroupFriendlyURL(layoutSet, themeDisplay)
55 viewURL = ""
56/>
57<#if journalArticle.layoutUuid?has_content>
58 <#assign
59 viewURL = groupFriendlyURL + "/-/" + journalArticle.urlTitle
60 />
61</#if>
62
63<#assign
64 exportPdfURLObj = portletURLFactory.create(httpServletRequest, "com_liferay_journal_web_portlet_JournalPortlet", "2")
65 void = exportPdfURLObj.setCopyCurrentRenderParameters(false)
66 void = exportPdfURLObj.setResourceID("exportArticle")
67 void = exportPdfURLObj.setParameter("groupId", scopeGroupId?c)
68 void = exportPdfURLObj.setParameter("articleId", .vars['reserved-article-id'].data)
69 void = exportPdfURLObj.setParameter("plid", themeDisplay.plid?c)
70 void = exportPdfURLObj.setParameter("targetExtension", "pdf")
71 void = exportPdfURLObj.setParameter("portletResource", themeDisplay.getPortletDisplay().getId())
72 exportPdfURL = exportPdfURLObj.toString()
73 exportPdfURL = httpUtil.setParameter(exportPdfURL, "p_p_lifecycle", "2")
74/>
75
76
77<#if viewMode == "export">
78 <style type="text/css">
79 /* roboto-regular - latin */
80 @font-face {
81 font-family: 'Roboto';
82 font-style: normal;
83 font-weight: 400;
84 src: url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.eot'); /* IE9 Compat Modes */
85 src: local('Roboto'), local('Roboto-Regular'),
86 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
87 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
88 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.woff') format('woff'), /* Modern Browsers */
89 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
90 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.svg#Roboto') format('svg'); /* Legacy iOS */
91 }
92 /* roboto-700 - latin */
93 @font-face {
94 font-family: 'Roboto';
95 font-style: normal;
96 font-weight: 700;
97 src: url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.eot'); /* IE9 Compat Modes */
98 src: local('Roboto Bold'), local('Roboto-Bold'),
99 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
100 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.woff2') format('woff2'), /* Super Modern Browsers */
101 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.woff') format('woff'), /* Modern Browsers */
102 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */
103 url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.svg#Roboto') format('svg'); /* Legacy iOS */
104 }
105
106 /* montserrat-300 - latin */
107 @font-face {
108 font-family: 'Montserrat';
109 font-style: normal;
110 font-weight: 300;
111 src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.eot'); /* IE9 Compat Modes */
112 src: local('Montserrat Light'), local('Montserrat-Light'),
113 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
114 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.woff2') format('woff2'), /* Super Modern Browsers */
115 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.woff') format('woff'), /* Modern Browsers */
116 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */
117 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.svg#Montserrat') format('svg'), /* Legacy iOS */
118 }
119 /* montserrat-regular - latin */
120 @font-face {
121 font-family: 'Montserrat';
122 font-style: normal;
123 font-weight: 400;
124 src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.eot'); /* IE9 Compat Modes */
125 src: local('Montserrat Regular'), local('Montserrat-Regular'),
126 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
127 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
128 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.woff') format('woff'), /* Modern Browsers */
129 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
130 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.svg#Montserrat') format('svg'); /* Legacy iOS */
131 }
132 /* montserrat-700 - latin */
133 @font-face {
134 font-family: 'Montserrat';
135 font-style: normal;
136 font-weight: 700;
137 src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.eot'); /* IE9 Compat Modes */
138 src: local('Montserrat Bold'), local('Montserrat-Bold'),
139 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
140 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.woff2') format('woff2'), /* Super Modern Browsers */
141 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.woff') format('woff'), /* Modern Browsers */
142 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */
143 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.svg#Montserrat') format('svg'); /* Legacy iOS */
144 }
145 /* montserrat-700italic - latin */
146 @font-face {
147 font-family: 'Montserrat';
148 font-style: italic;
149 font-weight: 700;
150 src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin-700italic.eot'); /* IE9 Compat Modes */
151 src: local('Montserrat Bold Italic'), local('Montserrat-BoldItalic'),
152 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
153 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.woff2') format('woff2'), /* Super Modern Browsers */
154 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.woff') format('woff'), /* Modern Browsers */
155 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.ttf') format('truetype'), /* Safari, Android, iOS */
156 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.svg#Montserrat') format('svg'); /* Legacy iOS */
157 }
158
159 /* montserrat-italic - latin */
160 @font-face {
161 font-family: 'Montserrat';
162 font-style: italic;
163 font-weight: 400;
164 src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin-italic.eot'); /* IE9 Compat Modes */
165 src: local('Montserrat Italic'), local('Montserrat-Italic'),
166 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
167 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.woff2') format('woff2'), /* Super Modern Browsers */
168 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.woff') format('woff'), /* Modern Browsers */
169 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.ttf') format('truetype'), /* Safari, Android, iOS */
170 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.svg#Montserrat') format('svg'); /* Legacy iOS */
171 }
172
173 /* montserrat-300italic - latin */
174 @font-face {
175 font-family: 'Montserrat';
176 font-style: italic;
177 font-weight: 300;
178 src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.eot'); /* IE9 Compat Modes */
179 src: local('Montserrat Light Italic'), local('Montserrat-LightItalic'),
180 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
181 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.woff2') format('woff2'), /* Super Modern Browsers */
182 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.woff') format('woff'), /* Modern Browsers */
183 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.ttf') format('truetype'), /* Safari, Android, iOS */
184 url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.svg#Montserrat') format('svg'); /* Legacy iOS */
185 }
186
187
188 h1, h2, h3, h4, h5, h6{
189 font-family: 'Montserrat', Helvetica, Arial, sans-serif;
190 }
191 body {
192 margin:0;
193 padding:0;
194 -webkit-text-size-adjust:none;
195 -ms-text-size-adjust:none;
196
197 font-family: 'Roboto', Helvetica, Arial, sans-serif;
198 }
199
200 a, a:hover, a:focus, a:active {
201 color: #202240;
202 }
203
204 .summary {
205 font-size: 1.4em;
206 font-weight: bold;
207 }
208 </style>
209 <title>${title}</title>
210</#if>
211
212<div class="news news-details" id="${namespace}" itemscope itemtype="http://schema.org/NewsArticle">
213 <#assign articleDisplayDate = .vars['reserved-article-display-date'].data />
214 <#assign originalLocale = .locale>
215 <#setting locale = localeUtil.getDefault()>
216 <#assign articleDisplayDate = articleDisplayDate?datetime("EEE, d MMM yyyy HH:mm:ss Z")>
217 <#setting locale = originalLocale>
218 <#assign isoDateFormat = dateFormatFactory.getSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") />
219
220 <#if viewMode == "export">
221 <div class="asset-headline">
222 <b>${articleDisplayDate?string("dd.MM.yyyy")}</b>
223 <h1>${title}</h1>
224 </div>
225 </#if>
226
227 <#if viewMode == "view">
228 <@liferay_util["html-top"] outputKey="opengraph">
229 <meta property="og:title" content="${title?trim}" />
230 <meta property="og:description" content="${.vars['reserved-article-description'].data}" />
231 <meta property="og:url" content="${viewURL}" />
232 <meta property="og:type" content="article" />
233 <meta property="article:published_time" content="${isoDateFormat.format(articleDisplayDate)}" />
234
235 <#if showFlexDelimiter??>
236 <#if showFlexDelimiter.showBigPicture.imageBigpicture??>
237 <#assign
238 image = showFlexDelimiter.showBigPicture.imageBigpicture.siblings[0]
239 imageUrl = image.data
240 alt = image.getAttribute("alt")!"DigitalBW News Artikel"
241 />
242 <meta property="og:image" content="${portal.getPortalURL(themeDisplay)}${imageUrl}" />
243 <meta property="og:image:alt" content="${alt}" />
244 </#if>
245 </#if>
246 </@>
247 </#if>
248
249 <span itemprop="name" content="${title?trim}"></span>
250 <span itemprop="description" content="${.vars['reserved-article-description'].data}"></span>
251 <span itemprop="datePublished" content="${isoDateFormat.format(articleDisplayDate)}"></span>
252
253 <span itemprop="headline" content="${title}"></span>
254 <#if source?? && source.data?has_content>
255 <span itemprop="author" content="${source.data}"></span>
256 <span itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
257 <span itemprop="name" content="${source.data}"></span>
258 <#if srcLogo?? && srcLogo.data?has_content>
259 <span itemprop="logo" content="${portal.getPortalURL(themeDisplay)}${srcLogo.data}"></span>
260 <#elseif srcLogoSelect?? && srcLogoSelect?has_content>
261 <span itemprop="logo" content="${portal.getPortalURL(themeDisplay)}/documents/${companyGroup.groupId}/${logoFolder.folderId}/${srcLogoSelect.data}.jpg"></span>
262 </#if>
263 </span>
264 </#if>
265
266 <div class="row">
267 <div class="col-md-12">
268 <header>
269 <div class="summary">
270 ${.vars['reserved-article-description'].getData()}
271 </div>
272 </header>
273 </div>
274 </div>
275 <div class="row">
276 <div class="col-md-12">
277 <article class="news-desktop">
278 <#if showFlexDelimiter??>
279 <#if showFlexDelimiter.showBigPicture.imageBigpicture??>
280 <#if viewMode == "view">
281 <div class="image-gallery">
282 <div class="row">
283 <div id="${namespace}carousel">
284 <div class="carousel">
285 <div class="carousel-inner">
286 <#list showFlexDelimiter.showBigPicture.imageBigpicture.siblings as curMedium>
287 <#if (curMedium?? && curMedium.data?has_content) || (curMedium.youtubeurlBigpicture?? && curMedium.youtubeurlBigpicture.data?has_content)>
288 <@showSlide image=curMedium counter=curMedium?counter youtubeurl=curMedium.youtubeurlBigpicture externalvideo=curMedium.externalvideo/>
289 </#if>
290 </#list>
291 </div>
292 </div>
293 </div>
294 </div>
295
296 <#if (showFlexDelimiter.showBigPicture.imageBigpicture.siblings?size >1)>
297 <div class="row">
298 <ul class="list-unstyled">
299
300 <#list showFlexDelimiter.showBigPicture.imageBigpicture.siblings as curMedium>
301 <#if (curMedium?counter <5)>
302 <#if (curMedium?? && curMedium.data?has_content) || (curMedium.youtubeurlBigpicture?? && curMedium.youtubeurlBigpicture.data?has_content)>
303 <@showGallery image=curMedium counter=curMedium?counter youtubeurl=curMedium.youtubeurlBigpicture />
304 </#if>
305 </#if>
306 </#list>
307 </ul>
308 </div>
309 </#if>
310 </div>
311 <#elseif viewMode == "export">
312 <div class="image-gallery">
313 <br/>
314 <#list showFlexDelimiter.showBigPicture.imageBigpicture.siblings as curMedium>
315 <#if (curMedium?? && curMedium.data?has_content)>
316 <@createExportImageTag image=curMedium />
317 </#if>
318 </#list>
319 </div>
320 </#if>
321 </#if>
322 </#if>
323 <section class="article-body">
324 <div itemprop="articleBody">
325 <#if showFlexDelimiter??>
326 <#if showFlexDelimiter.showBigPicture.txtBigpicture?? && showFlexDelimiter.showBigPicture.txtBigpicture.data?has_content>
327 ${showFlexDelimiter.showBigPicture.txtBigpicture.data}
328 </#if>
329 </#if>
330 </div>
331 <#if viewMode == "view">
332 <br style="clear:both">
333 <p class="source">
334 <a style="text-decoration:none;" href="${exportPdfURL}" target="_blank"><i class="mdi mdi-download"></i> <@liferay["language"] key="save-as-pdf" /></a>
335 </p>
336 </#if>
337 </section>
338
339
340 </article>
341
342 <#if viewMode == "view">
343 <article class="news-mobile">
344 <#if showFlexDelimiter??>
345 <#if showFlexDelimiter.showBigPicture.imageBigpicture??>
346 <div class="image-gallery">
347 <div class="row">
348 <div class="col-md-12">
349 <#if (showFlexDelimiter.showBigPicture.imageBigpicture.siblings?size >1)>
350 <div class="swiper-container news-swiper">
351 <div class="swiper-wrapper">
352 <#list showFlexDelimiter.showBigPicture.imageBigpicture.siblings as curMedium>
353 <#if (curMedium?? && curMedium.data?has_content) || (curMedium.youtubeurlBigpicture?? && curMedium.youtubeurlBigpicture.data?has_content)>
354 <@showSlide image=curMedium counter=curMedium?counter youtubeurl=curMedium.youtubeurlBigpicture externalvideo=curMedium.externalvideo/>
355 </#if>
356 </#list>
357 </div>
358 <div class="swiper-pagination"></div>
359 </div>
360 <#else>
361 <#list showFlexDelimiter.showBigPicture.imageBigpicture.siblings as curMedium>
362 <#if (curMedium?? && curMedium.data?has_content) || (curMedium.youtubeurlBigpicture?? && curMedium.youtubeurlBigpicture.data?has_content)>
363 <@showSlide image=curMedium counter=curMedium?counter youtubeurl=curMedium.youtubeurlBigpicture externalvideo=curMedium.externalvideo/>
364 </#if>
365 </#list>
366 </#if>
367 </div>
368 </div>
369 </div>
370 </#if>
371 </#if>
372
373 <section class="article-body">
374 <#if showFlexDelimiter??>
375 <#if showFlexDelimiter.showBigPicture.txtBigpicture?? && showFlexDelimiter.showBigPicture.txtBigpicture.data?has_content>
376 ${showFlexDelimiter.showBigPicture.txtBigpicture.data}
377 </#if>
378 </#if>
379 <#if viewMode == "view">
380 <br>
381 <p class="source">
382 <a href="${exportPdfURL}" target="_blank"><i class="mdi mdi-download"></i> <@liferay["language"] key="save-as-pdf" /></a>
383 </p>
384 </#if>
385 </section>
386 </article>
387 </#if>
388 <footer>
389 <div class="row">
390 <div class="col-xs-3 col-md-2">
391 <#if srcLogo?? && srcLogo.data?has_content>
392 <#if viewMode == "view">
393 <img
394 src="${portal.getPortalURL(themeDisplay)}${srcLogo.data}"
395 class="img-responsive pull-left logo-image"
396 alt=""
397 />
398 <#elseif viewMode == "export">
399 <@createExportImageTag image=srcLogo />
400 </#if>
401 <#elseif srcLogoSelect?? && srcLogoSelect.data?has_content>
402 <#assign filename = "${srcLogoSelect.data}.jpg" />
403 <#if srcLogoSelect.data == "cat">
404 <#assign filename = "Cat_handy.svg" />
405 </#if>
406
407 <img
408 src="${portal.getPortalURL(themeDisplay)}/documents/${companyGroup.groupId}/${logoFolder.folderId}/${filename}"
409 class="img-responsive pull-left"
410 alt=""
411 />
412 </#if>
413 </div>
414 <div class="col-xs-9 col-md-6">
415 <#if source?? && source.data?has_content>
416 <p class="source">
417 <@liferay["language_format"] arguments="${source.data}" key="more-at-x" />
418 </p>
419 </#if>
420 <#if timetoread?? && timetoread.data?has_content>
421 <p class="time-to-read">
422 <@liferay["language_format"] arguments="${timetoread.data}" key="time-to-read-x" />
423 </p>
424 </#if>
425 </div>
426 <#if viewMode == "view">
427 <div class="col-xs-9 col-xs-offset-3 col-md-4 col-md-offset-0">
428 <#if srcUrl?? && srcUrl.data?has_content>
429 <#assign linkText><@liferay.language key="go-to-article" /></#assign>
430 <#if srcUrlLinkText?? && srcUrlLinkText.data?has_content>
431 <#assign linkText = srcUrlLinkText.data />
432 </#if>
433 <a href="${srcUrl.data}" target="_blank" class="btn btn-outline" title="${linkText}">
434 ${linkText}
435
436 <i class="svg-icon open-in-new blue-button icomoon-button_link_external"></i>
437 </a>
438 </#if>
439 </div>
440 <#elseif viewMode == "export">
441 <p align="center">
442 <a href="${viewURL}">${viewURL}</a>
443 </p>
444 </#if>
445 </div>
446 </footer>
447 </div>
448 </div>
449</div>
450
451<#if viewMode == "view">
452 <div class="share-buttons-section">
453 <div class="max-width">
454 <div class="share-buttons">
455 <span class="text"><@liferay["language"] key="share" /></span>
456 <@liferay_ui["social-bookmarks"]
457 displayStyle="simple"
458 target="_blank"
459 title="${title}"
460 url="${portal.getCanonicalURL(currentURL, themeDisplay, layout)}"
461 />
462
463 </div>
464 </div>
465 </div>
466</#if>
467
468<#if viewMode == "view">
469 <script>
470 initSwiper('news-swiper', '${namespace}');
471 </script>
472
473 <script type="text/javascript">
474 var initializeCarousel = function() {
475 $('#${namespace}carousel').carousel(
476 {
477 interval: 5000
478 }
479 );
480
481 $('[id^=${namespace}carousel-selector-]').click(
482 function() {
483 var selector = $(this).attr('id');
484 try {
485 var slideNumber = /-(\d+)$/.exec(selector)[1];
486 $('#${namespace}carousel').carousel(parseInt(slideNumber));
487 } catch (e) {
488 console.log(e);
489 }
490 }
491 )
492 };
493
494 $(document).ready(initializeCarousel);
495 Liferay.on('endNavigate', initializeCarousel);
496
497 var initializeVideoPopup = function () {
498 AUI().use('aui-base', 'aui-io-plugin-deprecated', 'liferay-util-window', 'aui-dialog-iframe-deprecated', function (A) {
499 A.all('.video-link-popup').each(function (elem) {
500 elem.on(
501 'click',
502 function (e) {
503 e.preventDefault();
504 var modal;
505
506 var isMobile = Liferay.Browser.isMobile();
507
508 var externalvideo = e.currentTarget.getAttribute('data-externalvideo');
509 var youtubeId = e.currentTarget.getAttribute('data-youtube-id');
510 var youtubeUrl = 'https://www.youtube-nocookie.com/embed/'+ youtubeId +'?autoplay=1&rel=0&controls=2&showinfo=0&modestbranding=1';
511
512 var width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
513 var height = width * 0.5625;
514
515 var content = "";
516
517 if (isMobile) {
518
519 if (externalvideo) {
520 content = '<div class="embed-container">' + externalvideo + '</div>';
521 } else {
522 content = '<iframe ' +
523 'src="' + youtubeUrl + '" ' +
524 'frameborder="0" ' +
525 'width="' + width + '" ' +
526 'height="' + height + '" ' +
527 'allow="autoplay; encrypted-media" ' +
528 'allowfullscreen' +
529 '></iframe>';
530 }
531
532 modal = new A.Modal(
533 {
534 bodyContent: '<div class="mobile-video-container">' +
535 content +
536 '</div>',
537 destroyOnHide: true,
538 centered: true,
539 modal: true,
540 render: '#mobile-videos-modal',
541 width: '100%',
542 height: '100%',
543 on: {
544 render: function () {
545 var docStyle = document.documentElement.style;
546 var _this = this;
547 docStyle.setProperty('pointer-events', 'none');
548 docStyle.setProperty('touch-action', 'none');
549 docStyle.setProperty('overflow-y', 'hidden');
550
551 window.history.pushState(null, 'Video Popup', 'video-popup');
552 window.onpopstate = function () {
553 _this.destroy();
554 };
555 },
556 destroy: function () {
557 var docStyle = document.documentElement.style;
558 docStyle.removeProperty('pointer-events');
559 docStyle.removeProperty('touch-action');
560 docStyle.removeProperty('overflow-y');
561
562 window.onpopstate = null;
563
564 var pathName = location.pathname;
565 if (pathName.indexOf('video-popup') > -1) {
566 history.back();
567 }
568 }
569 }
570 }
571 ).render();
572 } else {
573 if (externalvideo) {
574 content = '<div class="embed-container">' + externalvideo + '</div>';
575 } else {
576 content = ' <iframe src="https://www.youtube-nocookie.com/embed/' + youtubeId + '?autoplay=1&rel=0&controls=2&showinfo=0&modestbranding=1"' +
577 ' frameborder="0"' +
578 ' allow="autoplay; encrypted-media"' +
579 ' allowfullscreen' +
580 ' width="720"' +
581 ' height="560"' +
582 ' >' +
583 ' </iframe>';
584 }
585
586 modal = Liferay.Util.openWindow(
587 {
588 dialog: {
589 width: width * 0.5,
590 height: height * 0.5,
591 centered: true,
592 constrain2view: true,
593 modal: true,
594 resizable: false,
595 moveable: false,
596 destroyOnHide: true,
597 close: true,
598 cssClass: 'dialog-iframe-popup',
599 bodyContent: '<div class="asset-full-content videos youtube-video"><div class="video-player">' +
600 content +
601 ' <button type="button"\n' +
602 ' class="btn-toolbar-button close close-content yui3-widget aui-button yui3-aui-button yui3-aui-button-content"\n' +
603 ' id="video-close-btn" role="button" onclick="closePopup(\'videoplayer\');">\n' +
604 ' <svg class="lexicon-icon" focusable="false" viewBox="0 0 512 512">\n' +
605 ' <title>Schließen</title>\n' +
606 ' <path class="lexicon-icon-outline"\n' +
607 ' d="M295.781 256l205.205-205.205c10.998-10.998 10.998-28.814 0-39.781-10.998-10.998-28.815-10.998-39.781 0l-205.205 205.205-205.205-205.238c-10.966-10.998-28.814-10.998-39.781 0-10.998 10.998-10.998 28.814 0 39.781l205.205 205.238-205.205 205.205c-10.998 10.998-10.998 28.815 0 39.781 5.467 5.531 12.671 8.265 19.874 8.265s14.407-2.734 19.907-8.233l205.205-205.238 205.205 205.205c5.5 5.5 12.703 8.233 19.906 8.233s14.407-2.734 19.906-8.233c10.998-10.998 10.998-28.815 0-39.781l-205.238-205.205z"></path>\n' +
608 ' </svg>\n' +
609 ' </button>\n' +
610 '</div></div>'
611 },
612 dialogIframe: {
613 scrolling: "no",
614 verticalscrolling: "no",
615 gutter: {
616 bottom: "0",
617 left: "0",
618 right: "0",
619 top: "0"
620 },
621 on: {
622 load: function (e) {
623 document.getElementById(e.windowName).setAttribute("scrolling", "no");
624 $('#videoplayer').find('.modal-content').find('.modal-header').css('display', 'none');
625 $("#" + e.windowName).contents().find("html").css("overflow", "hidden");
626 this._host._fillHeight();
627 }
628 }
629 },
630 id: 'videoplayer'
631 }
632 );
633 }
634 return false;
635 }
636 );
637 });
638
639 Liferay.provide(window, 'closePopup', function (dialogId) {
640 var dialog = Liferay.Util.Window.getById(dialogId);
641 dialog.destroy();
642 },
643 [ 'liferay-util-window' ]
644 );
645 });
646 };
647
648 $(document).ready(initializeVideoPopup);
649 Liferay.on('endNavigate', initializeVideoPopup);
650 </script>
651
652
653</#if>
654
655<#macro showSlide image counter youtubeurl externalvideo="">
656 <#assign alt = "" />
657 <#assign href = "" />
658 <#assign src = "" />
659 <#assign target = "" />
660 <#assign isvideo = false />
661
662 <#if youtubeurl?? && youtubeurl.data?has_content>
663 <#assign youtubeId = getYoutubeId(youtubeurl.data) />
664 <#assign href = "https://www.youtube.com/watch?v=${youtubeId}" />
665 <#assign target = "_blank" />
666 <#assign src = "//i.ytimg.com/vi/${youtubeId}/maxresdefault.jpg" />
667 <#assign isvideo = true />
668 </#if>
669 <#if image?? && image.data?has_content>
670 <#assign src = portal.getPortalURL(themeDisplay) + image.data />
671 <#assign alt = image.getAttribute("alt")!"DigitalBW News Artikel" />
672 </#if>
673 <#if externalvideo?? && externalvideo?has_content && externalvideo.data?has_content>
674 <#assign isvideo = true />
675 <#assign href = "javascript:void(0);" />
676 </#if>
677 <div class="swiper-slide item ${(counter==1)?then('active', '')}" data-slide-number="${counter - 1}">
678 <#if href?has_content>
679 <a href="${href}" target="${target}" <#if isvideo>class="video-link-popup"</#if> <#if youtubeurl?? && youtubeurl.data?has_content>data-youtube-id="${youtubeId}"</#if> <#if externalvideo?? && externalvideo?has_content && externalvideo.data?has_content>data-externalvideo="${htmlUtil.escapeAttribute(externalvideo.data)}"</#if>>
680 <@common.showCopyright imageUrl=src alt=alt/>
681 <span itemprop="image" content="${src}"></span>
682 <#if isvideo>
683 <div class="svg-icon play-icon"></div>
684 </#if>
685 </a>
686 <#else>
687 <@common.showCopyright imageUrl=src alt=alt/>
688 <span itemprop="image" content="${src}"></span>
689 <#if isvideo>
690 <div class="svg-icon play-icon"></div>
691 </#if>
692 </#if>
693 </div>
694</#macro>
695
696<#macro showGallery image counter youtubeurl>
697 <#assign alt = "" />
698 <#assign src = "" />
699 <#assign target = "" />
700
701 <#if youtubeurl?? && youtubeurl.data?has_content>
702 <#assign youtubeId = getYoutubeId(youtubeurl.data) />
703 <#assign target = "_blank" />
704 <#assign src = "//i.ytimg.com/vi/${youtubeId}/hqdefault.jpg" />
705 </#if>
706 <#if image?? && image.data?has_content>
707 <#assign src = httpUtil.addParameter(image.data, "imageThumbnail", 1) />
708 <#assign alt = image.getAttribute("alt")!"DigitalBW News Artikel" />
709 </#if>
710
711 <li class="col-md-3">
712 <a class="thumbnail" id="${namespace}carousel-selector-${counter-1}" href="javascript:void(0);">
713 <@common.showCopyright imageUrl=src alt=alt/>
714 </a>
715 </li>
716</#macro>
717
718<#macro createExportImageTag image>
719 <#assign
720 imageUrl = image.data
721 alt = image.getAttribute("alt")!"DigitalBW News Artikel"
722 imageFileUid = stringUtil.extractLast(imageUrl, "/")
723 />
724 <#if (stringUtil.extractFirst(imageFileUid, "t")??)>
725 <#assign imageFileUid = stringUtil.extractFirst(imageFileUid, "t")/>
726 <#assign imageFileUid= imageFileUid?substring(0,imageFileUid?length-1)/>
727 </#if>
728 <#assign
729 dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService")
730 fileEntry = dlAppService.getFileEntryByUuidAndGroupId(imageFileUid,groupId)
731 inputStream = fileEntry.getContentStream()
732 imageModel = imageToolUtil.getImage(inputStream)
733 />
734 <#assign
735 width = imageModel.getWidth()
736 height = imageModel.getHeight()
737 aspectRatio = width / height
738 />
739 <#if width gt 650>
740 <#assign
741 height = 650 / aspectRatio
742 width = 650
743 />
744 </#if>
745 <#switch portal.getPortalURL(themeDisplay)>
746 <#case "https://digital-bw.web.bwl.de">
747 <#case "https://digital-bw.landbw.de">
748 <#case "https://www.digital-bw.de">
749 <#assign domainHost = "http://web-digital-bw-liferay:8080" />
750 <#break>
751 <#default>
752 <#assign
753 domainHost = portal.getPortalURL(themeDisplay)
754 />
755 </#switch>
756 <img src="${domainHost}${imageUrl}" alt="${htmlUtil.escapeAttribute(alt)}" title="${htmlUtil.escapeAttribute(alt)}" width="${width}" height="${height}"/>
757</#macro>
758
759<#function getYoutubeId youtubeUrl>
760 <#assign url = httpUtil.getPath(youtubeUrl) />
761 <#assign url = stringUtil.extractLast(url, '/') />
762 <#return url />
763</#function>