Déconstructions : 1 bâtiment pour Habitat 17
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 <figure class="interior-article-media interior-article-media-${alignment} ${carouselWrapper}" ${displayWidth}>
320
321 <#switch mediaType>
322 <#case "image">
323 <#if displayMode == "normal">
324 <@getImageMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet altText=altText height=height />
325 <#elseif displayMode == "popup">
326 <@getImageMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height />
327 </#if>
328 <#break >
329 <#case "video">
330 <#if displayMode == "normal">
331 <@getVideoMedia imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height />
332 <#elseif displayMode == "popup">
333 <@getVideoMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height />
334 </#if>
335 <#break >
336 <#case "pdf">
337 <#if displayMode == "normal">
338 <@getPdfMedia mediaSrc=mediaSrc altText=altText height=height />
339 <#elseif displayMode == "popup">
340 <@getPdfMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height />
341 </#if>
342 <#break >
343 <#case "iframe">
344 <#if displayMode == "normal">
345 <@getIframeMedia urlIframePortlet=urlIframePortlet altText=altText height=height />
346 <#elseif displayMode == "popup">
347 <@getIframeMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height />
348 </#if>
349 <#break >
350 <#case "portlet">
351 urlIframePortlet=${urlIframePortlet}
352 <#if displayMode == "normal">
353 <@getPortletMedia urlIframePortlet=urlIframePortlet height=height />
354 <#elseif displayMode == "popup">
355 <@getPortletMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height />
356 </#if>
357 <#break >
358 <#case "carousel">
359 <#if displayMode == "normal">
360 <@getCarouselMedia media=media altText=altText height=height width=width />
361 <#assign carouselNb = carouselNb + 1 />
362 <#elseif displayMode == "popup">
363 <@getCarouselMediaPopup imgMini=imgMini media=media altText=altText height=height />
364 </#if>
365 <#break >
366 <#default>
367 </#switch>
368
369 <#local hasLegend = legend?length != 0 />
370 <#if hasLegend>
371 <figcaption class="interior-article-media-legend">${legend}</figcaption>
372 </#if>
373
374 </figure>
375
376 </#if>
377
378</#macro>
379
380
381<#macro getImageMedia mediaSrc urlIframePortlet altText height >
382 <#local displayedHeight = '' />
383 <#if height != "">
384 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
385 </#if>
386 <#if urlIframePortlet != "">
387 <#assign target = "href='"+ urlIframePortlet +"'" />
388 <#if !isInternalLink(urlIframePortlet)>
389 <#assign target = target + " target='_blank' rel='noopener noreferrer'" />
390 </#if>
391 <a ${target} title="${htmlUtil.escapeAttribute(altText)}">
392 <img class="interior-article-media-image" src="${mediaSrc}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
393 </a>
394 <#else>
395 <img class="interior-article-media-image" src="${mediaSrc}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
396 </#if>
397</#macro>
398
399
400<#macro getImageMediaPopup imgMini mediaSrc altText height >
401 <#local displayedHeight = '' />
402 <#if height != "">
403 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
404 </#if>
405 <a class="link-img" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}">
406 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
407 </a>
408</#macro>
409
410
411<#macro getVideoMedia imgMini mediaSrc height altText>
412 <div class="lazy-video" data-video="${mediaSrc}" data-height="${height}" data-text="${htmlUtil.escapeAttribute(altText)}" data-poster="${imgMini}" ></div>
413</#macro>
414
415
416<#macro getVideoMediaPopup imgMini mediaSrc altText height >
417 <#local displayedHeight = '' />
418 <#if height != "">
419 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
420 </#if>
421 <a class="link-video" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}">
422 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
423 </a>
424</#macro>
425
426
427<#macro getPdfMedia mediaSrc altText height >
428 <#local displayedHeight = '' />
429 <#if height != "">
430 <#local displayedHeight = 'style="height:'+height+'px;"' />
431 </#if>
432 <iframe class="interior-article-media-iframe" src="${pdfViewer+mediaSrc}" loading="lazy" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} allowfullscreen ></iframe>
433</#macro>
434
435
436<#macro getPdfMediaPopup imgMini mediaSrc altText height >
437 <#local displayedHeight = '' />
438 <#if height != "">
439 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
440 </#if>
441 <a class="link-pdf" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}">
442 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
443 </a>
444</#macro>
445
446
447<#macro getIframeMedia urlIframePortlet altText height >
448 <#local displayedHeight = '' />
449 <#if height != "">
450 <#local displayedHeight = 'style="height:'+height+'px;"' />
451 </#if>
452 <#if urlIframePortlet?contains("youtube")>
453 <#local youtubeId = urlIframePortlet?substring(urlIframePortlet?index_of("embed/")+6) />
454 <div class="interior-article-media-youtube-blocker" ${displayedHeight}>
455 <div class="youtube-blocker-img-wrapper">
456 <img class="youtube-blocker-img" src="https://img.youtube.com/vi/${youtubeId}/0.jpg" loading="lazy" alt="" />
457 </div>
458 <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>
459 <div class="youtube-blocker-btn-wrapper">
460 <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>
461 <a href="https://www.youtube.com/static?template=terms&gl=FR" class="youtube-blocker-btn" target="_blank" rel="noopener noreferrer">En savoir plus</a>
462 </div>
463 </div>
464 <#else>
465 <iframe class="interior-article-media-iframe" data-src="${urlIframePortlet}" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} allowfullscreen ></iframe>
466 </#if>
467</#macro>
468
469
470<#macro getIframeMediaPopup imgMini urlIframePortlet altText height >
471 <#local displayedHeight = '' />
472 <#if height != "">
473 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
474 </#if>
475 <a class="link-iframe" href="${urlIframePortlet}" title="${htmlUtil.escapeAttribute(altText)}">
476 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
477 </a>
478</#macro>
479
480
481<#macro getPortletMedia urlIframePortlet height >
482
483 <#local displayedHeight = '' />
484 <#if height != "">
485 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
486 </#if>
487
488 <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') />
489 <#local hasQueryString = urlIframePortlet?contains('?') />
490 <#local queryString = '' />
491 <#local instanceId = '' />
492 <#local portletName = urlIframePortlet />
493 <#local portletId = urlIframePortlet />
494 <#local fullPortletName = '' />
495
496 <#if hasInstanceId>
497 <#if hasQueryString>
498 <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..urlIframePortlet?index_of('?')-1] />
499 <#else>
500 <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..] />
501 </#if>
502 <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('INSTANCE'))-2] />
503 <#else>
504 <#if hasQueryString>
505 <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('?'))-1] />
506 </#if>
507 </#if>
508
509 <#if hasQueryString>
510 <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] />
511 </#if>
512
513 <#if hasInstanceId>
514 <#local fullPortletName = portletName+'_INSTANCE_'+instanceId />
515 <#else>
516 <#local fullPortletName = portletName />
517 </#if>
518
519 <#local divId = "embedded-portlet-" + fullPortletName + randomNamespace />
520
521 <#--
522 <code class="hide">
523 urlIframePortlet=${urlIframePortlet}
524 portletName=${portletName}
525 instanceId=${instanceId}
526 queryString=${queryString}
527 fullPortletName=${fullPortletName}
528 </code>
529 -->
530
531 <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice') || urlIframePortlet?contains('cuCreate')>
532
533 <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive¤tURL=" + themeDisplay.getURLCurrent() />
534
535 <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="" data-querystring="${queryString}" ${displayedHeight}></div>
536
537 <#else>
538
539 <#local plid = themeDisplay.plid />
540 <#local portletURL = portletURLFactory.create(renderRequest, fullPortletName, plid, "RENDER_PHASE") />
541 <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") />
542 ${portletURL.setWindowState(windowState)}
543 <#local remoteUrl = portletURL.toString() + "&" + queryString + "¤tURL=" + themeDisplay.getURLCurrent() />
544
545 <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="${remoteUrl}" data-querystring="${queryString}" ${displayedHeight}></div>
546
547 </#if>
548
549</#macro>
550
551
552<#macro getPortletMediaPopup imgMini urlIframePortlet altText height >
553
554 <#local displayedHeight = '' />
555 <#if height != "">
556 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
557 </#if>
558
559 <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') />
560 <#local hasQueryString = urlIframePortlet?contains('?') />
561 <#local portletId = urlIframePortlet />
562 <#local queryString = '' />
563
564 <#if hasInstanceId>
565 <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of(instanceId))] />
566 </#if>
567 <#if hasQueryString>
568 <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of('?')-1)] />
569 <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] />
570 </#if>
571
572 <#local divId = "embedded-portlet-" + portletId />
573
574 <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice')>
575
576 <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive¤tURL=" +themeDisplay.getURLCurrent() />
577
578 <div class="link-portlet eservice-form-opener" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="" tabindex="0">
579 <div class="eservice-form-opener-picto"></div>
580 <p class="eservice-form-opener-text">${htmlUtil.escapeAttribute(altText)}</p>
581 </div>
582
583 <#else>
584
585 <#local portletClass = "link-portlet" />
586 <#if urlIframePortlet?contains('19_WAR')>
587 <#local portletClass = "link-portlet planning-cmd-opener" />
588 </#if>
589 <#local plid = themeDisplay.plid />
590 <#local portletURL = portletURLFactory.create(renderRequest, portletId, plid, "RENDER_PHASE") />
591 <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") />
592 ${portletURL.setWindowState(windowState)}
593 <#local remoteUrl = portletURL.toString() + "&" + queryString + "¤tURL=" + themeDisplay.getURLCurrent() />
594
595 <div class="${portletClass}" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="${remoteUrl}" tabindex="0">
596 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${altText}" ${displayedHeight} />
597 </div>
598
599 </#if>
600
601</#macro>
602
603
604<#macro getCarouselMedia media altText height width >
605
606 <#local ratioDisplay = "" />
607 <#if height != "" && width != "" >
608 <#local ratio = height?number / width?number * 100 />
609 <#local ratioDisplay = 'style="padding-top:' + ratio + '%"' />
610 </#if>
611
612 <div class="carousel" id="carousel-${carouselNb}" data-carousel="carousel-${carouselNb}" ${ratioDisplay}>
613
614 <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>
615 <button type="button" id="carousel-${carouselNb}-arrow-next" data-carousel="carousel-${carouselNb}" data-direction="next" class="carousel-arrow carousel-arrow-next">Image suivante</button>
616
617 <#list media.media_doc.getSiblings() as node>
618 <#if node_index == 0>
619 <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}">
620 <#else>
621 <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}">
622 </#if>
623 </#list>
624
625 </div>
626
627</#macro>
628
629
630<#macro getCarouselMediaPopup imgMini media altText height >
631 <#local diapos = "" />
632 <#list media.media_doc.getSiblings() as node>
633 <#if node_index != 0>
634 <#local diapos = diapos + "," />
635 </#if>
636 <#local diapos = diapos + node.getData() />
637 </#list>
638 <#local displayedHeight = '' />
639 <#if height != "">
640 <#local displayedHeight = 'style="max-height:'+height+'px;"' />
641 </#if>
642 <a class="link-diapo" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}" data-diapos="${diapos}">
643 <img class="interior-article-media-image" src="${imgMini}" loading="lazy" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} />
644 </a>
645</#macro>