Réhabilitation des "400 "& de "Périgny 3"

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 &copy; 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 &copy; 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&currentURL=" + 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 + "&currentURL=" + 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&currentURL=" +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 + "&currentURL=" + 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>