Qui sommes-nous ?
La Rochelle Technopole encourage et soutient l’innovation en accompagnant l’émergence de projets et la création d’entreprises.
Au service de votre projet !
Une erreur s'est produite en traitant le calibre.
No signature of method create matches the arguments
1<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetEntryLocalService") />
2<#assign classNameLocalService = serviceLocator.findService("com.liferay.portal.service.ClassNameLocalService") />
3<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetLinkLocalService") />
4<#assign bookmarksEntryLocalService = serviceLocator.findService("com.liferay.portlet.bookmarks.service.BookmarksEntryLocalService") />
5<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService") />
6<#assign journalStructureLocalService = serviceLocator.findService("com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalService") />
7<#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService") />
8
9<#assign typeJournalArticle = "com.liferay.portlet.journal.model.JournalArticle" />
10<#assign typeBookmarksEntry = "com.liferay.portlet.bookmarks.model.BookmarksEntry" />
11<#assign typeDLFileEntry = "com.liferay.portlet.documentlibrary.model.DLFileEntry" />
12
13<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) />
14<#assign entry = assetEntryLocalService.getEntry(typeJournalArticle, journalArticle.getResourcePrimKey()) />
15<#assign relatedAssetTypedLists = buildRelatedAssetTypedLists(entry, "false") />
16
17<#assign jaClassNameId = classNameLocalService.getClassNameId(typeJournalArticle) />
18
19<#assign pdfViewer = '/fu/js/pdfjs/web/viewer.html?zoom=page-fit&file=' />
20
21<#assign anchorInProgress = "false" />
22<#assign carouselNb = 0 />
23<#assign anchorNb = 0 />
24
25<#assign serviceContextThreadLocal = staticUtil["com.liferay.portal.service.ServiceContextThreadLocal"] />
26<#assign themeDisplay = serviceContextThreadLocal.getServiceContext().getThemeDisplay() />
27
28<article class="interior-article">
29
30 <section class="interior-article-mainContent" >
31
32 <h2 class="interior-article-title">${.vars['reserved-article-title'].data}</h2>
33
34 <#if content.getSiblings()?has_content>
35
36 <#list content.getSiblings() as contenu>
37
38 <#assign zoomDisplay = "" />
39 <#if contenu.is_zoom.getData() == "true">
40 <#assign zoomDisplay = "zoomed-paragraph" />
41 </#if>
42 <@displayContent contenu=contenu isZoom=zoomDisplay />
43
44 </#list>
45
46 </#if>
47
48 <#if anchorInProgress == "true">
49 </div>
50 </#if>
51
52 </section>
53
54 <#if relatedAssetTypedLists?? && relatedAssetTypedLists?has_content >
55 <@getCustomRelatedAssets relatedAssetTypedLists=relatedAssetTypedLists />
56 </#if>
57
58</article>
59
60
61<#--*************************************
62** CONTENT BLOCKS DISPLAY
63*************************************-->
64
65<#macro displayContent contenu isZoom >
66
67 <#assign floatingMedia = "no-floating-media" />
68 <#assign alignValue = contenu.Media.media_options.alignment.getData() />
69 <#if alignValue == "fLeft" || alignValue == "fRight">
70 <#assign floatingMedia = "floating-media" />
71 </#if>
72
73 <#assign contentTitle = contenu.content_title.getData() />
74 <#assign contentText = contenu.content_text.getData() />
75
76 <#assign innerMedia = contenu.Media />
77 <#assign mediaSrc = innerMedia.media_doc.getData()/>
78 <#assign urlIframePortlet = innerMedia.url_iframe_portlet.getData() />
79
80 <#assign anchor = "" />
81 <#if contenu.anchor?has_content>
82 <#assign anchor = contenu.anchor.getData() />
83 </#if>
84
85 <#if contentTitle!="" || contentText!="" || mediaSrc!="" || urlIframePortlet !="" >
86
87 <#if anchor == "anchor-stop" && anchorInProgress == "true">
88 </div>
89 <#assign anchor = "" />
90 <#assign anchorInProgress = "false" />
91 </#if>
92
93 <#if anchor != "" && contentTitle != "" && isZoom="">
94 <#if anchorInProgress == "true">
95 </div>
96 </#if>
97 <h3 id="${anchor}" class="anchor-title displayed"><button type="button" class="anchor-button" id="accord-btn-${anchorNb}" aria-controls="accord-sect-${anchorNb}" aria-expanded="true" data-anchor="${anchor}">${contentTitle}</button></h3>
98 <div class="anchor-content" role="region" id="accord-sect-${anchorNb}" aria-labelledby="accord-btn-${anchorNb}">
99 <#assign anchorNb = anchorNb + 1 />
100 <#assign anchorInProgress = "true" />
101 </#if>
102
103 <div class="interior-article-paragraph ${isZoom} ${floatingMedia}">
104
105 <#if contentTitle != "" >
106 <#if anchor == "" || anchor == "anchor-stop" >
107 <h3>${contentTitle}</h3>
108 <#else>
109 <#if isZoom != "">
110 <h3 id="${anchor}" class="anchor-title displayed"><button type="button" class="anchor-button" id="accord-btn-${anchorNb}" aria-controls="accord-sect-${anchorNb}" aria-expanded="true" data-anchor="${anchor}">${contentTitle}</button></h3>
111 <div class="anchor-content" role="region" id="accord-sect-${anchorNb}" aria-labelledby="accord-btn-${anchorNb}">
112 <#assign anchorNb = anchorNb + 1 />
113 </#if>
114 </#if>
115 <#else>
116 <#if anchor != "" >
117 <a id="${anchor}" class="anchor-content"></a>
118 </#if>
119 </#if>
120
121 <#if floatingMedia == "no-floating-media" >
122
123 ${contentText?replace("<p></p>","")?replace('<blockquote>','<div class="blockquote">')?replace('</blockquote>','</div>')}
124 <#if innerMedia??>
125 <@getMedia media=innerMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet alignment=alignValue />
126 </#if>
127
128
129 <#elseif floatingMedia == "floating-media">
130
131 <#if innerMedia??>
132 <@getMedia media=innerMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet alignment=alignValue />
133 </#if>
134 ${contentText?replace("<p></p>","")?replace('<blockquote>','<div class="blockquote">')?replace('</blockquote>','</div>')}
135 <div class="clear-float"></div>
136
137 </#if>
138
139 <#if contentTitle != "" && anchor != "" && anchor != "anchor-stop" && isZoom != "">
140 </div>
141 </#if>
142
143 </div>
144
145 </#if>
146
147</#macro>
148
149
150<#--*************************************
151** MEDIA DISPLAY
152*************************************-->
153
154<#macro getMedia media mediaSrc urlIframePortlet alignment>
155
156 <#if mediaSrc != '' || urlIframePortlet != ''>
157
158 <#local mediaType = media.media_type.getData() />
159 <#assign carouselWrapper = "" />
160 <#if mediaType == "carousel">
161 <#assign carouselWrapper = "interior-article-media-carousel-wrapper" />
162 </#if>
163 <#local width = media.media_options.width.getData() />
164 <#local displayWidth = '' />
165 <#if width == 'null'>
166 <#local displayWidth = '' />
167 <#elseif width != "">
168 <#local displayWidth = 'style="width:'+width+'px;"' />
169 </#if>
170
171 <#local height = media.media_options.height.getData() />
172 <#if height == 'null'>
173 <#local height = '' />
174 </#if>
175 <#local displayMode = media.media_options.display_mode.getData() />
176 <#local imgMini = media.media_options.img_mini.getData() />
177 <#local legend = media.media_options.legend.getData() />
178 <#local altText = media.alt_text.getData() />
179 <#if altText == 'null'>
180 <#local altText = '' />
181 </#if>
182
183 <#local hasLegend = legend?length != 0 />
184 <#if hasLegend>
185 <figure class="interior-article-media interior-article-media-${alignment} ${carouselWrapper}" ${displayWidth}>
186 <#else>
187 <div class="interior-article-media interior-article-media-${alignment} ${carouselWrapper}" ${displayWidth}>
188 </#if>
189
190 <#switch mediaType>
191 <#case "image">
192 <#if displayMode == "normal">
193 <@getImageMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet altText=altText height=height width=width />
194 <#elseif displayMode == "popup">
195 <@getImageMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height width=width />
196 </#if>
197 <#break >
198 <#case "video">
199 <#if displayMode == "normal">
200 <@getVideoMedia imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height width=width />
201 <#elseif displayMode == "popup">
202 <@getVideoMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height width=width />
203 </#if>
204 <#break >
205 <#case "pdf">
206 <#if displayMode == "normal">
207 <@getPdfMedia mediaSrc=mediaSrc altText=altText height=height />
208 <#elseif displayMode == "popup">
209 <@getPdfMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height width=width />
210 </#if>
211 <#break >
212 <#case "iframe">
213 <#if displayMode == "normal">
214 <@getIframeMedia urlIframePortlet=urlIframePortlet altText=altText height=height />
215 <#elseif displayMode == "popup">
216 <@getIframeMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height width=width />
217 </#if>
218 <#break >
219 <#case "portlet">
220 <#if displayMode == "normal">
221 <@getPortletMedia urlIframePortlet=urlIframePortlet height=height />
222 <#elseif displayMode == "popup">
223 <@getPortletMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height width=width />
224 </#if>
225 <#break >
226 <#case "carousel">
227 <#if displayMode == "normal">
228 <@getCarouselMedia media=media altText=altText height=height width=width />
229 <#assign carouselNb = carouselNb + 1 />
230 <#elseif displayMode == "popup">
231 <@getCarouselMediaPopup imgMini=imgMini media=media altText=altText height=height width=width />
232 </#if>
233 <#break >
234 <#default>
235 </#switch>
236
237 <#if hasLegend>
238 <figcaption class="interior-article-media-legend">${legend}</figcaption>
239 </figure>
240 <#else>
241 </div>
242 </#if>
243
244 </#if>
245
246</#macro>
247
248
249<#macro getImageMedia mediaSrc urlIframePortlet altText height width >
250 <#local displayedHeight = '' />
251 <#if height != "">
252 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
253 </#if>
254 <#if urlIframePortlet != "">
255 <#assign target = "href='"+ urlIframePortlet +"'" />
256 <#if !isInternalLink(urlIframePortlet)>
257 <#assign target = target + " target='_blank' rel='noopener noreferrer'" />
258 </#if>
259 <a ${target} title="${htmlUtil.escapeAttribute(altText)}">
260 <img class="interior-article-media-image" src="${mediaSrc}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> />
261 </a>
262 <#else>
263 <img class="interior-article-media-image" src="${mediaSrc}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> />
264 </#if>
265</#macro>
266
267
268<#macro getImageMediaPopup imgMini mediaSrc altText height width >
269 <#if imgMini != "">
270 <#local displayedHeight = '' />
271 <#if height != "">
272 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
273 </#if>
274 <a class="link-img" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}">
275 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> />
276 </a>
277 <#else>
278 <a class="link-img interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${mediaSrc}">
279 ${htmlUtil.escapeAttribute(altText)}
280 </a>
281 </#if>
282</#macro>
283
284
285<#macro getVideoMedia imgMini mediaSrc height altText width>
286 <#local displayedHeight = '' />
287 <#if height != "">
288 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
289 </#if>
290 <video class="interior-article-media-video" itemprop="url" poster="${imgMini}" title="${htmlUtil.escapeAttribute(altText)}" controls="" preload="metadata" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> >
291 <source itemprop="url" content="https://www2.larochelle-technopole.fr${mediaSrc}" src="${mediaSrc}" type="video/mp4">
292 <a href="${mediaSrc}" download="">${htmlUtil.escapeAttribute(altText)}</a>
293 </video>
294</#macro>
295
296
297<#macro getVideoMediaPopup imgMini mediaSrc altText height width >
298 <#if imgMini != "">
299 <#local displayedHeight = '' />
300 <#if height != "">
301 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
302 </#if>
303 <a class="link-video" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}">
304 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> />
305 </a>
306 <#else>
307 <a class="link-video interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${mediaSrc}">
308 ${htmlUtil.escapeAttribute(altText)}
309 </a>
310 </#if>
311</#macro>
312
313
314<#macro getPdfMedia mediaSrc altText height >
315 <#local displayedHeight = '' />
316 <#if height != "">
317 <#local displayedHeight = 'style="height:'+height+'px;"' />
318 </#if>
319 <iframe class="interior-article-media-iframe" src="${pdfViewer+mediaSrc}" loading="lazy" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} allowfullscreen ></iframe>
320</#macro>
321
322
323<#macro getPdfMediaPopup imgMini mediaSrc altText height width >
324 <#if imgMini != "">
325 <#local displayedHeight = '' />
326 <#if height != "">
327 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
328 </#if>
329 <a class="link-pdf" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}" target="_blank" rel="noopener noreferrer">
330 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> />
331 </a>
332 <#else>
333 <a class="link-pdf interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${mediaSrc}" target="_blank" rel="noopener noreferrer">
334 ${htmlUtil.escapeAttribute(altText)}
335 </a>
336 </#if>
337</#macro>
338
339
340<#macro getIframeMedia urlIframePortlet altText height >
341 <#local displayedHeight = '' />
342 <#if height != "">
343 <#local displayedHeight = 'style="height:'+height+'px;"' />
344 </#if>
345 <#if urlIframePortlet?contains("youtube")>
346 <#local youtubeId = urlIframePortlet?substring(urlIframePortlet?index_of("embed/")+6) />
347 <div class="interior-article-media-youtube-blocker" ${displayedHeight}>
348 <div class="youtube-blocker-img-wrapper">
349 <img class="youtube-blocker-img" src="https://img.youtube.com/vi/${youtubeId}/0.jpg" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" />
350 </div>
351 <p class="youtube-blocker-text">Cette vidéo est fournie par la plateforme YouTube. En la visionnant vous acceptez les conditions d'utilisation de YouTube.</p>
352 <div class="youtube-blocker-btn-wrapper">
353 <button type="button" class="youtube-blocker-btn" data-src="${urlIframePortlet?replace('youtube.com','youtube-nocookie.com')}?autoplay=1" data-title="${htmlUtil.escapeAttribute(altText)}">Voir la vidéo</button>
354 <a href="https://www.youtube.com/static?template=terms&gl=FR" class="youtube-blocker-btn" target="_blank" rel="noopener noreferrer">En savoir plus</a>
355 </div>
356 </div>
357 <#else>
358 <#assign ariaHidden = '' />
359 <#if urlIframePortlet?contains("/carto/")>
360 <#assign ariaHidden = 'aria-hidden="true"' />
361 </#if>
362 <iframe class="interior-article-media-iframe" src="${urlIframePortlet}" loading="lazy" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} ${ariaHidden} allowfullscreen ></iframe>
363 </#if>
364</#macro>
365
366
367<#macro getIframeMediaPopup imgMini urlIframePortlet altText height width >
368 <#if imgMini != "">
369 <#local displayedHeight = '' />
370 <#if height != "">
371 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
372 </#if>
373 <a class="link-iframe" href="${urlIframePortlet}" title="${htmlUtil.escapeAttribute(altText)}" target="_blank" rel="noopener noreferrer">
374 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> />
375 </a>
376 <#else>
377 <a class="link-iframe interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${urlIframePortlet}" target="_blank" rel="noopener noreferrer">
378 ${htmlUtil.escapeAttribute(altText)}
379 </a>
380 </#if>
381</#macro>
382
383
384<#macro getCarouselMedia media altText height width >
385
386 <#local ratioDisplay = "" />
387 <#if height != "" && width != "" >
388 <#local ratio = height?number / width?number * 100 />
389 <#local ratioDisplay = 'style="padding-top:' + ratio + '%"' />
390 </#if>
391
392 <div class="carousel" id="carousel-${carouselNb}" data-carousel="carousel-${carouselNb}" ${ratioDisplay}>
393
394 <button type="button" id="carousel-${carouselNb}-arrow-prev" data-carousel="carousel-${carouselNb}" data-direction="prev" class="carousel-arrow carousel-arrow-prev"><span class="sr-only">Image précédente</span></button>
395 <button type="button" id="carousel-${carouselNb}-arrow-next" data-carousel="carousel-${carouselNb}" data-direction="next" class="carousel-arrow carousel-arrow-next"><span class="sr-only">Image suivante</span></button>
396
397 <#list media.media_doc.getSiblings() as node>
398 <#if node_index == 0>
399 <img id="carousel-${carouselNb}-img-${node_index}" data-carousel="carousel-${carouselNb}" data-img="${node_index}" class="carousel-img carousel-img-displayed" src="${node.getData()}" data-src="" alt="${altText}">
400 <#else>
401 <img id="carousel-${carouselNb}-img-${node_index}" data-carousel="carousel-${carouselNb}" data-img="${node_index}" class="carousel-img carousel-img-noDisplay" src="/lr-technopole-theme/images/blank.png" data-src="${node.getData()}" alt="${altText}">
402 </#if>
403 </#list>
404
405 </div>
406
407</#macro>
408
409
410<#macro getCarouselMediaPopup imgMini media altText height width >
411 <#local diapos = "" />
412 <#list media.media_doc.getSiblings() as node>
413 <#if node_index != 0>
414 <#local diapos = diapos + "," />
415 </#if>
416 <#local diapos = diapos + node.getData() />
417 </#list>
418 <#if imgMini != "">
419 <#local displayedHeight = '' />
420 <#if height != "">
421 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
422 </#if>
423 <a class="link-diapo" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}" data-diapos="${diapos}">
424 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> />
425 </a>
426 <#else>
427 <a class="link-diapo interior-article-moreContent-doc interior-article-doc" title="${htmlUtil.escapeAttribute(altText)}" href="${mediaSrc}" data-diapos="${diapos}">
428 ${htmlUtil.escapeAttribute(altText)}
429 </a>
430 </#if>
431</#macro>
432
433
434<#macro getPortletMedia urlIframePortlet height >
435
436 <#local displayedHeight = '' />
437 <#if height != "">
438 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
439 </#if>
440
441 <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') />
442 <#local hasQueryString = urlIframePortlet?contains('?') />
443 <#local queryString = '' />
444 <#local instanceId = '' />
445 <#local portletName = urlIframePortlet />
446 <#local portletId = urlIframePortlet />
447 <#local fullPortletName = '' />
448
449 <#if hasInstanceId>
450 <#if hasQueryString>
451 <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..urlIframePortlet?index_of('?')-1] />
452 <#else>
453 <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..] />
454 </#if>
455 <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('INSTANCE'))-2] />
456 <#else>
457 <#if hasQueryString>
458 <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('?'))-1] />
459 </#if>
460 </#if>
461
462 <#if hasQueryString>
463 <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] />
464 </#if>
465
466 <#if hasInstanceId>
467 <#local fullPortletName = portletName+'_INSTANCE_'+instanceId />
468 <#else>
469 <#local fullPortletName = portletName />
470 </#if>
471
472 <#local divId = "embedded-portlet-" + fullPortletName + randomNamespace />
473 <#local plid = themeDisplay.plid />
474
475 <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice') || urlIframePortlet?contains('cuCreate')>
476
477 <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive¤tURL=" + themeDisplay.getURLCurrent() />
478
479 <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="" data-querystring="${queryString}" ${displayedHeight}></div>
480
481 <#else>
482
483 <#local plid = themeDisplay.plid />
484 <#local portletURL = portletURLFactory.create(renderRequest, fullPortletName, plid, "RENDER_PHASE") />
485 <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") />
486 ${portletURL.setWindowState(windowState)}
487 <#local remoteUrl = portletURL.toString() + "&" + queryString + "¤tURL=" + themeDisplay.getURLCurrent() />
488
489 <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="${remoteUrl}" data-querystring="${queryString}" ${displayedHeight}></div>
490
491 </#if>
492
493</#macro>
494
495
496<#macro getPortletMediaPopup imgMini urlIframePortlet altText height width >
497
498 <#local displayedHeight = '' />
499 <#if height != "">
500 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
501 </#if>
502
503 <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') />
504 <#local hasQueryString = urlIframePortlet?contains('?') />
505 <#local portletId = urlIframePortlet />
506 <#local queryString = '' />
507
508 <#if hasInstanceId>
509 <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of(instanceId))] />
510 </#if>
511 <#if hasQueryString>
512 <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of('?')-1)] />
513 <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] />
514 </#if>
515
516 <#local divId = "embedded-portlet-" + portletId />
517
518 <#if themeDisplay?? && themeDisplay.plid?? >
519
520 <#local plid = themeDisplay.plid />
521
522 <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice')>
523
524 <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive¤tURL=" +themeDisplay.getURLCurrent() />
525
526 <#local formPictoClass = "" />
527 <#if urlIframePortlet?contains('FiberOpticalConnectionRequest')>
528 <#local formPictoClass = "eservice-form-opener-picto-fiber" />
529 <#elseif urlIframePortlet?contains('AntContact')>
530 <#local formPictoClass = "eservice-form-opener-picto-contact" />
531 <#elseif urlIframePortlet?contains('ReinscriptionConservatoire')>
532 <#local formPictoClass = "eservice-form-opener-picto-music" />
533 <#elseif urlIframePortlet?contains('ContactUs')>
534 <#local formPictoClass = "eservice-form-opener-picto-contact" />
535 <#elseif urlIframePortlet?contains('JobApplication')>
536 <#local formPictoClass = "eservice-form-opener-picto-job" />
537 <#elseif urlIframePortlet?contains('WastebinRepair')>
538 <#local formPictoClass = "eservice-form-opener-picto-wastebin" />
539 <#elseif urlIframePortlet?contains('WastewaterConnection')>
540 <#local formPictoClass = "eservice-form-opener-picto-water" />
541 <#elseif urlIframePortlet?contains('WastesortingTour')>
542 <#local formPictoClass = "eservice-form-opener-picto-altriane" />
543 </#if>
544
545 <div class="link-portlet eservice-form-opener" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="" tabindex="0">
546 <div class="eservice-form-opener-picto ${formPictoClass}"></div>
547 <p class="eservice-form-opener-text">${htmlUtil.escapeAttribute(altText)}</p>
548 </div>
549
550 <#else>
551
552 <#local portletClass = "link-portlet" />
553 <#if urlIframePortlet?contains('19_WAR')>
554 <#local portletClass = "link-portlet planning-cmd-opener" />
555 </#if>
556 <#local plid = themeDisplay.plid />
557 <#local portletURL = portletURLFactory.create(renderRequest, portletId, plid, "RENDER_PHASE") />
558 <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") />
559 ${portletURL.setWindowState(windowState)}
560 <#local remoteUrl = portletURL.toString() + "&" + queryString + "¤tURL=" + themeDisplay.getURLCurrent() />
561
562 <div class="${portletClass}" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="${remoteUrl}" tabindex="0">
563 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${altText}" ${displayedHeight} <#if width!=""> width="${width}"</#if> <#if height!=""> height="${height}"</#if> />
564 </div>
565
566 </#if>
567
568 </#if>
569
570</#macro>
571
572
573<#--*************************************
574** RELATED CONTENT
575*************************************-->
576
577<#function buildRelatedAssetTypedLists entry info >
578 <#assign relatedAssetTypedLists = {} />
579 <#assign infos = "" />
580 <#assign assetLinks = assetLinkLocalService.getDirectLinks(entry.getEntryId()) />
581
582 <#list assetLinks as assetLink>
583 <#if assetLink.getEntryId1() == entry.getEntryId() >
584 <#assign assetLinkEntry = assetEntryLocalService.getEntry(assetLink.getEntryId2()) />
585 <#else>
586 <#assign assetLinkEntry = assetEntryLocalService.getEntry(assetLink.getEntryId1()) />
587 </#if>
588
589 <#if assetLinkEntry?? && assetLinkEntry.isVisible() >
590 <#assign linkedAssetRenderer = assetLinkEntry.getAssetRenderer() />
591
592 <#if linkedAssetRenderer.hasViewPermission(permissionChecker) >
593
594 <#assign type = assetLinkEntry.getClassName() />
595
596 <#assign newEntry = [{"assetEntry":assetLinkEntry,"assetLink":assetLink}] />
597 <#if relatedAssetTypedLists?keys?seq_contains(type)>
598 <#assign relatedAssetTypedList = relatedAssetTypedLists[type] + newEntry />
599 <#else>
600 <#assign relatedAssetTypedList = newEntry />
601 </#if>
602 <#assign relatedAssetTypedLists = relatedAssetTypedLists + {type : relatedAssetTypedList} />
603 </#if>
604 </#if>
605 </#list>
606
607 <#if info == "true">
608 <#return infos />
609 <#else>
610 <#return relatedAssetTypedLists />
611 </#if>
612 <#return {} />
613</#function>
614
615
616<#macro getCustomRelatedAssets relatedAssetTypedLists>
617 <#local hasRelatedAssets = "false" />
618 <#if relatedAssetTypedLists[typeDLFileEntry]?? && relatedAssetTypedLists[typeDLFileEntry]?size != 0>
619 <#local hasRelatedAssets = "true" />
620 </#if>
621 <#if hasRelatedAssets == "true" >
622 <aside class="interior-article-moreContent-container">
623 <#if relatedAssetTypedLists[typeDLFileEntry]?? && relatedAssetTypedLists[typeDLFileEntry]?has_content >
624 <@getRelatedDocuments assets=relatedAssetTypedLists[typeDLFileEntry] />
625 </#if>
626 </aside>
627 </#if>
628</#macro>
629
630
631<#macro getRelatedDocuments assets>
632
633 <#if assets?has_content && assets?size != 0>
634
635 <ul class="interior-article-moreContent-docs">
636
637 <#local orderedAssets = getOrderedAssets(assets) />
638 <#list orderedAssets?reverse as assetMap>
639
640 <#local assetDocEntry = assetMap.assetEntry />
641 <#local docEntry = dlFileEntryLocalService.getFileEntry(assetDocEntry.getClassPK()) />
642
643 <#if assetDocEntry.getAssetRenderer()??>
644
645 <#local linkedAssetRenderer = assetDocEntry.getAssetRenderer() />
646
647 <#local assetLinkEntryTitle = assetDocEntry.getTitle(locale) />
648 <#local assetLinkEntryDescription = assetDocEntry.getDescription(locale) />
649 <#local assetURL = linkedAssetRenderer.getURLDownload(themeDisplay) />
650
651 <#local extension = docEntry.getLatestFileVersion(true).getExtension() />
652 <#local extensionType = "" />
653 <#switch extension>
654 <#case "pdf">
655 <#local extensionType = "link-pdf" />
656 <#break>
657 <#case "jpg">
658 <#local extensionType = "link-img" />
659 <#break>
660 <#case "png">
661 <#local extensionType = "link-img" />
662 <#break>
663 <#case "mp4">
664 <#local extensionType = "link-video" />
665 <#break>
666 <#default>
667 </#switch>
668
669 <#local target = " href='"+ assetURL +"'" />
670
671 <li class="interior-article-moreContent-doc-item" data-entry-id="${assetDocEntry.entryId}">
672 <a ${target} class="inner-link interior-article-moreContent-doc ${extensionType}" title="${htmlUtil.escapeAttribute(assetLinkEntryDescription)}" >
673 ${assetLinkEntryTitle} <span class="interior-article-moreContent-aria">Ouvrir dans un nouvel onglet</span>
674 </a>
675 </li>
676
677 </#if>
678
679 </#list>
680
681 </ul>
682
683 </#if>
684
685</#macro>
686
687
688<#function getOrderedAssets assets>
689 <#local orderedAssets = [] />
690 <#local assetsWithDate = [] />
691 <#list assets as assetMap>
692 <#local asset = assetMap.assetEntry />
693 <#local modifiedDate = asset.getModifiedDate() />
694 <#local assetsWithDate = assetsWithDate + [{'assetMap':assetMap,'modifiedDate':modifiedDate}] />
695 </#list>
696 <#list assetsWithDate?sort_by('modifiedDate') as orderedAsset>
697 <#local orderedAssets = orderedAssets + [orderedAsset.assetMap] />
698 </#list>
699 <#return orderedAssets>
700</#function>
701
702
703<#function getOrderedDocs docs>
704 <#local orderedDocs = [] />
705 <#local docsWithDate = [] />
706 <#list docs as docMap>
707 <#local doc = assetEntryLocalService.getEntry(docMap.getGroupId(),docMap.getUuid()) />
708 <#local modifiedDate = doc.getModifiedDate() />
709 <#local docsWithDate = docsWithDate + [{'docMap':docMap,'modifiedDate':modifiedDate}] />
710 </#list>
711 <#list docsWithDate?sort_by('modifiedDate') as orderedDoc>
712 <#local orderedDocs = orderedDocs + [orderedDoc.docMap] />
713 </#list>
714 <#return orderedDocs>
715</#function>
716
717
718<#function isInternalLink link>
719 <#local internal = link?contains("www.agglo-larochelle.fr") || link?contains("www2.agglo-larochelle.fr") || link?contains("www-new.agglo-larochelle.fr") || !link?contains("//")>
720 <#return internal>
721</#function>
722
723
724<#function getField journalArticle fieldName>
725 <#local fieldValue = ''/>
726 <#local document = saxReaderUtil.read(journalArticle.getContent()) />
727 <#local rootElement = document.getRootElement() />
728 <#if (rootElement?? && rootElement?has_content)>
729 <#local xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='"+fieldName+"']/dynamic-content") />
730 <#if (validator.isNotNull(xPathSelector))>
731 <#local nbNodes = xPathSelector.selectNodes(rootElement)?size />
732 <#if (nbNodes > 0)>
733 <#local fieldValue = xPathSelector.selectSingleNode(rootElement).getStringValue() />
734 </#if>
735 </#if>
736 <#return fieldValue />
737 </#if>
738 </#function>