Un parc canin pour créer du lien
Une erreur s'est produite en traitant le calibre.
Error on line 85, column 47 in 10154#10192#15572961 Expecting a string, date or number here, Expression ouvrage is instead a com.liferay.portal.freemarker.LiferayTemplateModel
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<#assign resourcePermissionLocalService = serviceLocator.findService("com.liferay.portal.service.ResourcePermissionLocalService") />
9<#assign roleLocalService = serviceLocator.findService("com.liferay.portal.service.RoleLocalService") />
10<#assign typeJournalArticle = "com.liferay.portlet.journal.model.JournalArticle" />
11<#assign typeBookmarksEntry = "com.liferay.portlet.bookmarks.model.BookmarksEntry" />
12<#assign typeDLFileEntry = "com.liferay.portlet.documentlibrary.model.DLFileEntry" />
13
14<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) />
15<#assign entry = assetEntryLocalService.getEntry(typeJournalArticle, journalArticle.getResourcePrimKey()) />
16
17<#assign serviceContextThreadLocal = staticUtil["com.liferay.portal.service.ServiceContextThreadLocal"] />
18<#assign themeDisplay = serviceContextThreadLocal.getServiceContext().getThemeDisplay() />
19
20<#assign layout = themeDisplay['plid'] />
21<#assign layoutService = serviceLocator.findService("com.liferay.portal.service.LayoutLocalService") />
22<#assign layoutObject = layoutService.getLayout(layout?number) />
23
24<#assign jaClassNameId = classNameLocalService.getClassNameId(typeJournalArticle) />
25
26<#assign pdfViewer = '/fu/js/pdfjs/web/viewer.html?zoom=page-fit&file=' />
27
28<#assign carouselNb = 0 />
29
30
31<div class="interior-article-container">
32
33 <#assign coords_lat = "">
34 <#assign coords_lon = "">
35 <#if coords.getSiblings()?has_content>
36 <#list coords.getSiblings() as coord>
37 <#if coord_index == 0>
38 <#assign coords_lat = coord.coords_lat.getData() />
39 <#assign coords_lon = coord.coords_lat.getData() />
40 </#if>
41 </#list>
42 </#if>
43
44 <article class="interior-article interior-article-displayed">
45
46 <section class="interior-article-mainContent" >
47
48 <div class="interior-article-title-wrapper">
49 <h1 class="interior-article-title">${.vars['reserved-article-title'].data}</h1>
50 </div>
51
52 <p class="interior-article-chapo">${Accroche.getData()}</p>
53
54 <#if content.getSiblings()?has_content>
55
56 <#list content.getSiblings() as contenu>
57
58 <#assign contentDisplay = contenu.content_display.getData() />
59 <#if contentDisplay == "default" >
60 <@displayDefaultContent contenu=contenu isZoom="" isAccordion="" />
61 <#elseif contentDisplay == "zoom" >
62 <@displayDefaultContent contenu=contenu isZoom="zoomed-paragraph" isAccordion="" />
63 <#elseif contentDisplay == "accordion" >
64 <@displayDefaultContent contenu=contenu isZoom="" isAccordion="accordion-paragraph" />
65 <#elseif contentDisplay == "corail" >
66 <@displayDefaultContent contenu=contenu isZoom="corail-paragraph" isAccordion="" title=articleTitle />
67 </#if>
68
69 </#list>
70
71 </#if>
72
73 <#if ouvrage.getData() != "" || entreprise.getData() != "" || calendrier.getData() != "" || budget.getData() != "" || coords.coords_lat.getData() != "" && coords.coords_lon.getData() != "">
74
75 <aside class="fiche-technique-wrapper">
76 <#if ouvrage.getData() != "" || entreprise.getData() != "" || calendrier.getData() != "" || budget.getData() != "">
77 <div class="fiche-technique-container">
78 <#if home_page_img.getData() != "">
79 <img class="fiche-technique-img" src="${home_page_img.getData()}" loading="lazy" alt="" width="300" height="300" />
80 </#if>
81 <dl class="fiche-technique">
82 <#if ouvrage.getData() != "">
83 <div class="fiche-technique-detail">
84 <dt>Maîtrise d'ouvrage</dt>
85 <dd>${ouvrage}</dd>
86 </div>
87 </#if>
88 <#if entreprise.getData() != "">
89 <div class="fiche-technique-detail">
90 <dt>Entreprise(s)</dt>
91 <dd>${entreprise}</dd>
92 </div>
93 </#if>
94 <#if calendrier.getData() != "">
95 <div class="fiche-technique-detail">
96 <dt>Calendrier</dt>
97 <dd>${calendrier}</dd>
98 </div>
99 </#if>
100 <#if budget.getData() != "">
101 <div class="fiche-technique-detail">
102 <dt>Budget</dt>
103 <dd>${budget}</dd>
104 </div>
105 </#if>
106 </dl>
107 </div>
108 </#if>
109 <#if coords.coords_lat.getData() != "" && coords.coords_lon.getData() != "">
110 <aside id="map-viewer" class="map-viewer-vignette" tabindex="0">
111
112 <div id="layer-switcher"></div>
113
114 <div id="zoom-buttons">
115 <button type="button" id="zoom-in" class="zoom-button" title="Zoomer"></button>
116 <button type="button" id="zoom-out" class="zoom-button" title="Dézoomer"></button>
117 </div>
118
119 <div id="map-logos">
120 <div id="agglo-logo" class="map-logo" title="Données © Agglo La Rochelle">
121 <img class="header-logo-img" src="/pru-vls-theme/images/logo-cda.svg" width="90" height="24" alt="Agglo La Rochelle" />
122 </div>
123 <div id="ign-logo" class="map-logo" title="Fond orthophoto © IGN/Géoportail">
124 <img class="header-logo-img" src="/pru-vls-theme/images/visu-carto/logo-ign.png" width="22" height="24" alt="IGN" />
125 </div>
126 </div>
127
128 <div id="map-buttons">
129 <button type="button" id="full-screen" class="map-button" title="Plein écran"></button>
130 </div>
131
132 <div id="graphic-scale"></div>
133
134 </aside>
135 </#if>
136 </aside>
137
138 <p class="link-more link-more-news">
139 <a class="link-more-news-href" href="/les-chantiers-du-pru">Tous les chantiers en cours</a>
140 </p>
141
142 </#if>
143
144 </section>
145
146 </article>
147
148</div>
149
150<script>
151
152 var chantiersLayer = new Array();
153
154 <#assign stateChantier = "finished" />
155 <#if state.getData() == '["inProgress"]'>
156 <#assign stateChantier = "inProgress" />
157 <#elseif state.getData() == '["toCome"]'>
158 <#assign stateChantier = "toCome" />
159 </#if>
160
161 <#if coords.getSiblings()?has_content>
162 <#list coords.getSiblings() as coord>
163 <#assign coords_lat = coord.coords_lat.getData() />
164 <#assign coords_lon = coord.coords_lat.getData() />
165 <#assign coords_name = coord.coords_name.getData() />
166 <#if coords_lat != "" && coords_lon != "" && coords_name != "">
167
168 var layer = {
169 'name': '${coords_name}',
170 'center': [parseFloat('${coords_lon}'),parseFloat('${coords_lat}')],
171 'state': '${state}'
172 }
173
174 chantiersLayer.push(layer);
175
176 </#if>
177 </#list>
178 </#if>
179
180</script>
181
182
183<#--*************************************
184** CONTENT BLOCKS DISPLAY
185*************************************-->
186
187<#macro displayDefaultContent contenu isZoom isAccordion >
188
189 <#assign floatingMedia = "no-floating-media" />
190 <#assign alignValue = contenu.Media.media_options.alignment.getData() />
191 <#if alignValue == "flexLeft" || alignValue == "flexRight">
192 <#assign floatingMedia = "flex-media" />
193 </#if>
194
195 <#assign portletMedia = "" />
196 <#assign typeValue = contenu.Media.media_type.getData() />
197 <#if typeValue == "portlet">
198 <#assign portletMedia = "portlet-media" />
199 </#if>
200
201 <#assign contentTitle = contenu.content_title.getData() />
202 <#assign contentText = contenu.content_text.getData() />
203
204 <#assign innerMedia = contenu.Media />
205 <#assign mediaSrc = contenu.Media.media_doc.getData()/>
206 <#assign urlIframePortlet = contenu.Media.url_iframe_portlet.getData() />
207
208 <#if mediaSrc == "" && urlIframePortlet == "" >
209 <#assign floatingMedia = "no-floating-media" />
210 <#assign portletMedia = "" />
211 </#if>
212
213 <#assign titleAlone = "" />
214 <#if contentTitle!="" && contentText=="" && mediaSrc=="" && urlIframePortlet =="" >
215 <#assign titleAlone = "title-alone" />
216 </#if>
217
218 <#assign noTitle = "" />
219 <#if contentTitle=="" >
220 <#assign noTitle = "no-title" />
221 </#if>
222
223 <#if contentTitle!="" || contentText!="" || mediaSrc!="" || urlIframePortlet !="" >
224
225 <#if contenu.anchor?has_content>
226 <#assign anchor = contenu.anchor.getData() />
227 <#if anchor != "" >
228 <#assign anchor = 'id="'+anchor+'"' />
229 </#if>
230 </#if>
231
232 <#if isAccordion=="accordion-paragraph">
233 <div class="interior-article-paragraph ${isZoom} ${floatingMedia} ${portletMedia} ${titleAlone} ${noTitle}">
234 <#else>
235 <div ${anchor} class="interior-article-paragraph ${isZoom} ${floatingMedia} ${portletMedia} ${titleAlone} ${noTitle}">
236 </#if>
237
238 <#if contentTitle != '' >
239 <#if isAccordion=="accordion-paragraph">
240 <h3 ${anchor} class="accordion-title accordion-title-expanded"><button type="button" class="accordion-title-button">${contentTitle}</button></h3>
241 </#if>
242 </#if>
243
244 <#if isAccordion=="accordion-paragraph">
245 <div class="accordion-content">
246 </#if>
247
248 <#if floatingMedia == "no-floating-media" >
249
250 <#if contentTitle != '' && isAccordion=='' >
251 <h3>${contentTitle}</h3>
252 </#if>
253 ${contentText?replace("<p></p>","")}
254 <#if innerMedia??>
255 <@getMedia media=innerMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet alignment=alignValue />
256 </#if>
257
258
259 <#elseif floatingMedia == "flex-media">
260
261 <div class="flex-display flex-media-paragraph ${alignValue}">
262 <div class="flex-media-paragraph-content">
263 <#if contentTitle != '' && isAccordion=='' >
264 <h3>${contentTitle}</h3>
265 </#if>
266 ${contentText?replace("<p></p>","")}
267 </div>
268 <#if innerMedia??>
269 <@getMedia media=innerMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet alignment=alignValue />
270 </#if>
271 </div>
272
273 </#if>
274
275 <#if isAccordion=="accordion-paragraph">
276 </div>
277 </#if>
278
279 </div>
280
281 </#if>
282
283</#macro>
284
285
286<#--*************************************
287** MEDIA DISPLAY
288*************************************-->
289
290<#macro getMedia media mediaSrc urlIframePortlet alignment>
291
292 <#if mediaSrc != '' || urlIframePortlet != ''>
293
294 <#local mediaType = media.media_type.getData() />
295 <#assign carouselWrapper = "" />
296 <#if mediaType == "carousel">
297 <#assign carouselWrapper = "interior-article-media-carousel-wrapper" />
298 </#if>
299 <#local width = media.media_options.width.getData() />
300 <#local displayWidth = '' />
301 <#if width == 'null'>
302 <#local displayWidth = '' />
303 <#elseif width != "">
304 <#local displayWidth = 'style="width:'+width+'px;"' />
305 </#if>
306
307 <#local height = media.media_options.height.getData() />
308 <#if height == 'null'>
309 <#local height = '' />
310 </#if>
311 <#local displayMode = media.media_options.display_mode.getData() />
312 <#local imgMini = media.media_options.img_mini.getData() />
313 <#local legend = media.media_options.legend.getData() />
314 <#local altText = media.alt_text.getData() />
315 <#if altText == 'null'>
316 <#local altText = '' />
317 </#if>
318
319 <#local hasLegend = legend?length != 0 />
320 <#if hasLegend>
321 <figure class="interior-article-media interior-article-media-${alignment} ${carouselWrapper}" ${displayWidth}>
322 <#else>
323 <div class="interior-article-media interior-article-media-${alignment} ${carouselWrapper}" ${displayWidth}>
324 </#if>
325
326 <#switch mediaType>
327 <#case "image">
328 <#if displayMode == "normal">
329 <@getImageMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet altText=altText height=height />
330 <#elseif displayMode == "popup">
331 <@getImageMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height />
332 </#if>
333 <#break >
334 <#case "video">
335 <#if displayMode == "normal">
336 <@getVideoMedia imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height />
337 <#elseif displayMode == "popup">
338 <@getVideoMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height />
339 </#if>
340 <#break >
341 <#case "pdf">
342 <#if displayMode == "normal">
343 <@getPdfMedia mediaSrc=mediaSrc altText=altText height=height />
344 <#elseif displayMode == "popup">
345 <@getPdfMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height />
346 </#if>
347 <#break >
348 <#case "iframe">
349 <#if displayMode == "normal">
350 <@getIframeMedia urlIframePortlet=urlIframePortlet altText=altText height=height />
351 <#elseif displayMode == "popup">
352 <@getIframeMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height />
353 </#if>
354 <#break >
355 <#case "portlet">
356 urlIframePortlet=${urlIframePortlet}
357 <#if displayMode == "normal">
358 <@getPortletMedia urlIframePortlet=urlIframePortlet height=height />
359 <#elseif displayMode == "popup">
360 <@getPortletMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height />
361 </#if>
362 <#break >
363 <#case "carousel">
364 <#if displayMode == "normal">
365 <@getCarouselMedia media=media altText=altText height=height width=width />
366 <#assign carouselNb = carouselNb + 1 />
367 <#elseif displayMode == "popup">
368 <@getCarouselMediaPopup imgMini=imgMini media=media altText=altText height=height />
369 </#if>
370 <#break >
371 <#default>
372 </#switch>
373
374 <#if hasLegend>
375 <figcaption class="interior-article-media-legend">${legend}</figcaption>
376 </figure>
377 <#else>
378 </div>
379 </#if>
380
381 </#if>
382
383</#macro>
384
385
386<#macro getImageMedia mediaSrc urlIframePortlet altText height >
387 <#local displayedHeight = '' />
388 <#if height != "">
389 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
390 </#if>
391 <#if urlIframePortlet != "">
392 <#assign target = "href='"+ urlIframePortlet +"'" />
393 <#if !isInternalLink(urlIframePortlet)>
394 <#assign target = target + " target='_blank' rel='noopener noreferrer'" />
395 </#if>
396 <a ${target} title="${htmlUtil.escapeAttribute(altText)}">
397 <img class="interior-article-media-image" src="${mediaSrc}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
398 </a>
399 <#else>
400 <img class="interior-article-media-image" src="${mediaSrc}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
401 </#if>
402</#macro>
403
404
405<#macro getImageMediaPopup imgMini mediaSrc altText height >
406 <#local displayedHeight = '' />
407 <#if height != "">
408 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
409 </#if>
410 <a class="link-img" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}">
411 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
412 </a>
413</#macro>
414
415
416<#macro getVideoMedia imgMini mediaSrc height altText>
417 <div class="lazy-video" data-video="${mediaSrc}" data-height="${height}" data-text="${htmlUtil.escapeAttribute(altText)}" data-poster="${imgMini}" ></div>
418</#macro>
419
420
421<#macro getVideoMediaPopup imgMini mediaSrc altText height >
422 <#local displayedHeight = '' />
423 <#if height != "">
424 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
425 </#if>
426 <a class="link-video" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}">
427 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
428 </a>
429</#macro>
430
431
432<#macro getPdfMedia mediaSrc altText height >
433 <#local displayedHeight = '' />
434 <#if height != "">
435 <#local displayedHeight = 'style="height:'+height+'px;"' />
436 </#if>
437 <iframe class="interior-article-media-iframe" src="${pdfViewer+mediaSrc}" loading="lazy" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} allowfullscreen ></iframe>
438</#macro>
439
440
441<#macro getPdfMediaPopup imgMini mediaSrc altText height >
442 <#local displayedHeight = '' />
443 <#if height != "">
444 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
445 </#if>
446 <a class="link-pdf" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}">
447 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
448 </a>
449</#macro>
450
451
452<#macro getIframeMedia urlIframePortlet altText height >
453 <#local displayedHeight = '' />
454 <#if height != "">
455 <#local displayedHeight = 'style="height:'+height+'px;"' />
456 </#if>
457 <#if urlIframePortlet?contains("youtube")>
458 <#local youtubeId = urlIframePortlet?substring(urlIframePortlet?index_of("embed/")+6) />
459 <div class="interior-article-media-youtube-blocker" ${displayedHeight}>
460 <div class="youtube-blocker-img-wrapper">
461 <img class="youtube-blocker-img" src="https://img.youtube.com/vi/${youtubeId}/0.jpg" loading="lazy" alt="" />
462 </div>
463 <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>
464 <div class="youtube-blocker-btn-wrapper">
465 <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>
466 <a href="https://www.youtube.com/static?template=terms&gl=FR" class="youtube-blocker-btn" target="_blank" rel="noopener noreferrer">En savoir plus</a>
467 </div>
468 </div>
469 <#else>
470 <iframe class="interior-article-media-iframe" data-src="${urlIframePortlet}" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} allowfullscreen ></iframe>
471 </#if>
472</#macro>
473
474
475<#macro getIframeMediaPopup imgMini urlIframePortlet altText height >
476 <#local displayedHeight = '' />
477 <#if height != "">
478 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
479 </#if>
480 <a class="link-iframe" href="${urlIframePortlet}" title="${htmlUtil.escapeAttribute(altText)}">
481 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
482 </a>
483</#macro>
484
485
486<#macro getPortletMedia urlIframePortlet height >
487
488 <#local displayedHeight = '' />
489 <#if height != "">
490 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
491 </#if>
492
493 <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') />
494 <#local hasQueryString = urlIframePortlet?contains('?') />
495 <#local queryString = '' />
496 <#local instanceId = '' />
497 <#local portletName = urlIframePortlet />
498 <#local portletId = urlIframePortlet />
499 <#local fullPortletName = '' />
500
501 <#if hasInstanceId>
502 <#if hasQueryString>
503 <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..urlIframePortlet?index_of('?')-1] />
504 <#else>
505 <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..] />
506 </#if>
507 <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('INSTANCE'))-2] />
508 <#else>
509 <#if hasQueryString>
510 <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('?'))-1] />
511 </#if>
512 </#if>
513
514 <#if hasQueryString>
515 <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] />
516 </#if>
517
518 <#if hasInstanceId>
519 <#local fullPortletName = portletName+'_INSTANCE_'+instanceId />
520 <#else>
521 <#local fullPortletName = portletName />
522 </#if>
523
524 <#local divId = "embedded-portlet-" + fullPortletName + randomNamespace />
525
526 <#--
527 <code class="hide">
528 urlIframePortlet=${urlIframePortlet}
529 portletName=${portletName}
530 instanceId=${instanceId}
531 queryString=${queryString}
532 fullPortletName=${fullPortletName}
533 </code>
534 -->
535
536 <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice') || urlIframePortlet?contains('cuCreate')>
537
538 <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive¤tURL=" + themeDisplay.getURLCurrent() />
539
540 <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="" data-querystring="${queryString}" ${displayedHeight}></div>
541
542 <#else>
543
544 <#local plid = themeDisplay.plid />
545 <#local portletURL = portletURLFactory.create(renderRequest, fullPortletName, plid, "RENDER_PHASE") />
546 <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") />
547 ${portletURL.setWindowState(windowState)}
548 <#local remoteUrl = portletURL.toString() + "&" + queryString + "¤tURL=" + themeDisplay.getURLCurrent() />
549
550 <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="${remoteUrl}" data-querystring="${queryString}" ${displayedHeight}></div>
551
552 </#if>
553
554</#macro>
555
556
557<#macro getPortletMediaPopup imgMini urlIframePortlet altText height >
558
559 <#local displayedHeight = '' />
560 <#if height != "">
561 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
562 </#if>
563
564 <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') />
565 <#local hasQueryString = urlIframePortlet?contains('?') />
566 <#local portletId = urlIframePortlet />
567 <#local queryString = '' />
568
569 <#if hasInstanceId>
570 <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of(instanceId))] />
571 </#if>
572 <#if hasQueryString>
573 <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of('?')-1)] />
574 <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] />
575 </#if>
576
577 <#local divId = "embedded-portlet-" + portletId />
578
579 <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice')>
580
581 <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive¤tURL=" +themeDisplay.getURLCurrent() />
582
583 <div class="link-portlet eservice-form-opener" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="" tabindex="0">
584 <div class="eservice-form-opener-picto"></div>
585 <p class="eservice-form-opener-text">${htmlUtil.escapeAttribute(altText)}</p>
586 </div>
587
588 <#else>
589
590 <#local portletClass = "link-portlet" />
591 <#if urlIframePortlet?contains('19_WAR')>
592 <#local portletClass = "link-portlet planning-cmd-opener" />
593 </#if>
594 <#local plid = themeDisplay.plid />
595 <#local portletURL = portletURLFactory.create(renderRequest, portletId, plid, "RENDER_PHASE") />
596 <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") />
597 ${portletURL.setWindowState(windowState)}
598 <#local remoteUrl = portletURL.toString() + "&" + queryString + "¤tURL=" + themeDisplay.getURLCurrent() />
599
600 <div class="${portletClass}" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="${remoteUrl}" tabindex="0">
601 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${altText}" ${displayedHeight} />
602 </div>
603
604 </#if>
605
606</#macro>
607
608
609<#macro getCarouselMedia media altText height width >
610
611 <#local ratioDisplay = "" />
612 <#if height != "" && width != "" >
613 <#local ratio = height?number / width?number * 100 />
614 <#local ratioDisplay = 'style="padding-top:' + ratio + '%"' />
615 </#if>
616
617 <div class="carousel" id="carousel-${carouselNb}" data-carousel="carousel-${carouselNb}" ${ratioDisplay}>
618
619 <button type="button" id="carousel-${carouselNb}-arrow-prev" data-carousel="carousel-${carouselNb}" data-direction="prev" class="carousel-arrow carousel-arrow-prev">Image précédente</button>
620 <button type="button" id="carousel-${carouselNb}-arrow-next" data-carousel="carousel-${carouselNb}" data-direction="next" class="carousel-arrow carousel-arrow-next">Image suivante</button>
621
622 <#list media.media_doc.getSiblings() as node>
623 <#if node_index == 0>
624 <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}">
625 <#else>
626 <img id="carousel-${carouselNb}-img-${node_index}" data-carousel="carousel-${carouselNb}" data-img="${node_index}" class="carousel-img carousel-img-noDisplay" src="/pru-vls-theme/images/blank.png" data-src="${node.getData()}" alt="${altText}">
627 </#if>
628 </#list>
629
630 </div>
631
632</#macro>
633
634
635<#macro getCarouselMediaPopup imgMini media altText height >
636 <#local diapos = "" />
637 <#list media.media_doc.getSiblings() as node>
638 <#if node_index != 0>
639 <#local diapos = diapos + "," />
640 </#if>
641 <#local diapos = diapos + node.getData() />
642 </#list>
643 <#local displayedHeight = '' />
644 <#if height != "">
645 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
646 </#if>
647 <a class="link-diapo" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}" data-diapos="${diapos}">
648 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
649 </a>
650</#macro>