Pour continuer, identifiez-vous...

Une erreur s'est produite en traitant le calibre.
Expression contenu.title_deco is undefined on line 95, column 10 in 10154#10192#15593535.
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<#assign keyNumbersInProgress = "false" /> 
30<#assign accordionInProgress = "false" /> 
31 
32<div class="interior-article-container"> 
33 
34    <article class="interior-article interior-article-displayed"> 
35         
36        <section class="interior-article-mainContent" > 
37             
38            <h1 class="interior-article-title"><span class="text-clip">${.vars['reserved-article-title'].data}</span></h1> 
39             
40            <p class="interior-article-chapo">${Accroche.getData()}</p> 
41                 
42            <#if content.getSiblings()?has_content> 
43             
44                <#list content.getSiblings() as contenu> 
45 
46                    <#assign contentDisplay = contenu.content_display.getData() /> 
47                    <#if contentDisplay != "keyNumber" && keyNumbersInProgress == "true" > 
48                        </div></div> 
49                        <#assign keyNumbersInProgress = "false" /> 
50                    </#if> 
51                     
52                    <#if contentDisplay == "default" > 
53                        <@displayDefaultContent contenu=contenu isAccordion="" /> 
54                    <#elseif contentDisplay == "accordion" > 
55                        <@displayDefaultContent contenu=contenu isAccordion="accordion-paragraph" /> 
56                    <#elseif contentDisplay == "accordionFollow" > 
57                        <@displayDefaultContent contenu=contenu isAccordion="accordion-follow" /> 
58                    <#elseif contentDisplay == "keyNumber" > 
59                        <@displayKeyNumber contenu=contenu inProgress=keyNumbersInProgress /> 
60                    </#if> 
61 
62                </#list> 
63             
64            </#if> 
65              
66        </section> 
67         
68    </article> 
69     
70</div> 
71 
72 
73<#--************************************* 
74** CONTENT BLOCKS DISPLAY 
75*************************************--> 
76 
77<#macro displayDefaultContent contenu isAccordion > 
78     
79    <#assign floatingMedia = "no-floating-media" /> 
80    <#assign alignValue = contenu.Media.media_options.alignment.getData() /> 
81    <#if alignValue == "flexLeft" || alignValue == "flexRight"> 
82        <#assign floatingMedia = "flex-media" /> 
83    </#if> 
84     
85    <#assign portletMedia = "" /> 
86    <#assign typeValue =  contenu.Media.media_type.getData() /> 
87    <#if typeValue == "portlet"> 
88        <#assign portletMedia = "portlet-media" /> 
89    </#if> 
90     
91    <#assign contentTitle = contenu.content_title.getData() /> 
92    <#assign contentText = contenu.content_text.getData() /> 
93 
94    <#assign cssTitle = ""> 
95    <#if contenu.title_deco.getData() == "true"> 
96        <#assign cssTitle = "deco-vagues"> 
97    </#if> 
98     
99    <#assign innerMedia = contenu.Media /> 
100    <#assign mediaSrc = contenu.Media.media_doc.getData()/> 
101    <#assign urlIframePortlet = contenu.Media.url_iframe_portlet.getData() /> 
102     
103    <#if mediaSrc == "" && urlIframePortlet == "" > 
104        <#assign floatingMedia = "no-floating-media" /> 
105        <#assign portletMedia = "" /> 
106    </#if> 
107     
108    <#if contentTitle!="" || contentText!="" || mediaSrc!="" || urlIframePortlet !="" > 
109         
110        <#if contenu.anchor?has_content> 
111            <#assign anchor = contenu.anchor.getData() /> 
112            <#if anchor != "" > 
113                <#assign anchor = 'id="'+anchor+'"' /> 
114            </#if> 
115        </#if> 
116         
117        <#if isAccordion=="accordion-paragraph"> 
118            <div class="interior-article-paragraph ${floatingMedia} ${portletMedia}"> 
119        <#else> 
120            <div ${anchor} class="interior-article-paragraph ${floatingMedia} ${portletMedia}"> 
121        </#if> 
122             
123            <#if contentTitle != '' > 
124                <#if isAccordion=="accordion-paragraph"> 
125                    <h3 ${anchor} class="${cssTitle} accordion-title accordion-title-expanded"><button type="button" class="accordion-title-button">${contentTitle}</button></h3> 
126                </#if> 
127            </#if> 
128 
129            <#if accordionInProgress == "true" && isAccordion != "accordion-follow" > 
130                </div> 
131                </div> 
132            </#if> 
133            <#if isAccordion != "accordion-follow" && isAccordion != "accordio-paragraph" > 
134                <#assign accordionInProgress = "false" /> 
135            </#if> 
136             
137            <#if isAccordion=="accordion-paragraph"> 
138                <div class="accordion-content"> 
139            </#if> 
140             
141            <#if floatingMedia == "no-floating-media" > 
142                 
143                <#if contentTitle != '' && isAccordion=='' > 
144                    <h3 class="${cssTitle}">${contentTitle}</h3> 
145                </#if> 
146                ${contentText?replace("<p></p>","")} 
147                <#if innerMedia??> 
148                    <@getMedia media=innerMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet alignment=alignValue /> 
149                </#if> 
150                 
151                 
152             <#elseif floatingMedia == "flex-media"> 
153                 
154                <#if contentTitle != '' && isAccordion=='' > 
155                    <h3 class="${cssTitle}">${contentTitle}</h3> 
156                </#if> 
157                 
158                <div class="flex-display flex-media-paragraph ${alignValue}"> 
159                    <div class="flex-media-paragraph-content"> 
160                        ${contentText?replace("<p></p>","")} 
161                    </div> 
162                    <#if innerMedia??> 
163                        <@getMedia media=innerMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet alignment=alignValue /> 
164                    </#if> 
165                </div> 
166                 
167            </#if> 
168             
169            <#if isAccordion!="accordion-paragraph"> 
170                </div> 
171            </#if> 
172             
173         
174    </#if> 
175     
176</#macro> 
177 
178<#--************************************* 
179** KEY NUMBERS DISPLAY 
180*************************************--> 
181 
182<#macro displayKeyNumber contenu inProgress > 
183 
184    <#if inProgress == "false"> 
185        <#assign keyNumbersInProgress = "true" /> 
186        <div class="interior-article-paragraph no-floating-media paragraph-keyNumbers"> 
187            <div class="interior-article-contentsWrapper interior-article-keyNumbers useful-content"> 
188    </#if> 
189 
190    <#assign contentTitle = contenu.content_title.getData() /> 
191    <#assign contentText = contenu.content_text.getData() /> 
192    <#assign mediaSrc = contenu.Media.media_doc.getData()/> 
193 
194    <div class="interior-article-innerContent"> 
195        <img class="interior-article-keyNumber-img" src="${mediaSrc}" alt="" width="90" height="88" /> 
196        <h3 class="interior-article-keyNumber">${contentTitle}</h3> 
197        <p class="interior-article-keyNumber-text">${contentText?replace("<p>","")?replace("</p>","")}</p> 
198    </div> 
199 
200</#macro> 
201 
202 
203<#--************************************* 
204** MEDIA DISPLAY 
205*************************************--> 
206 
207<#macro getMedia media mediaSrc urlIframePortlet alignment> 
208     
209    <#if mediaSrc != '' || urlIframePortlet != ''> 
210         
211        <#local mediaType = media.media_type.getData() /> 
212        <#assign carouselWrapper = "" /> 
213        <#if mediaType == "carousel"> 
214            <#assign carouselWrapper = "interior-article-media-carousel-wrapper" /> 
215        </#if> 
216        <#local width = media.media_options.width.getData() /> 
217        <#local displayWidth = '' /> 
218        <#if width == 'null'> 
219            <#local displayWidth = '' /> 
220        <#elseif width != ""> 
221            <#local displayWidth = 'style="width:'+width+'px;"' /> 
222        </#if> 
223         
224        <#local height = media.media_options.height.getData() /> 
225        <#if height == 'null'> 
226            <#local height = '' /> 
227        </#if> 
228        <#local displayMode = media.media_options.display_mode.getData() /> 
229        <#local imgMini = media.media_options.img_mini.getData() /> 
230        <#local legend = media.media_options.legend.getData() /> 
231        <#local altText = media.alt_text.getData() /> 
232        <#if altText == 'null'> 
233            <#local altText = '' /> 
234        </#if> 
235         
236        <figure class="interior-article-media interior-article-media-${alignment} ${carouselWrapper}" ${displayWidth}> 
237                 
238            <#switch mediaType> 
239                <#case "image"> 
240                    <#if displayMode == "normal"> 
241                       <@getImageMedia mediaSrc=mediaSrc urlIframePortlet=urlIframePortlet altText=altText height=height /> 
242                    <#elseif displayMode == "popup"> 
243                        <@getImageMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height /> 
244                    </#if> 
245                    <#break > 
246                <#case "video"> 
247                    <#if displayMode == "normal"> 
248                       <@getVideoMedia imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height /> 
249                    <#elseif displayMode == "popup"> 
250                        <@getVideoMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height /> 
251                    </#if> 
252                    <#break > 
253                <#case "pdf"> 
254                    <#if displayMode == "normal"> 
255                       <@getPdfMedia mediaSrc=mediaSrc altText=altText height=height /> 
256                    <#elseif displayMode == "popup"> 
257                        <@getPdfMediaPopup imgMini=imgMini mediaSrc=mediaSrc altText=altText height=height /> 
258                    </#if> 
259                    <#break > 
260                <#case "iframe"> 
261                    <#if displayMode == "normal"> 
262                       <@getIframeMedia urlIframePortlet=urlIframePortlet altText=altText height=height /> 
263                    <#elseif displayMode == "popup"> 
264                        <@getIframeMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height /> 
265                    </#if> 
266                    <#break > 
267                <#case "portlet"> 
268                urlIframePortlet=${urlIframePortlet} 
269                    <#if displayMode == "normal"> 
270                       <@getPortletMedia urlIframePortlet=urlIframePortlet height=height /> 
271                    <#elseif displayMode == "popup"> 
272                        <@getPortletMediaPopup imgMini=imgMini urlIframePortlet=urlIframePortlet altText=altText height=height /> 
273                    </#if> 
274                    <#break > 
275                <#case "carousel"> 
276                    <#if displayMode == "normal"> 
277                       <@getCarouselMedia media=media altText=altText height=height width=width /> 
278                       <#assign carouselNb = carouselNb + 1 /> 
279                    <#elseif displayMode == "popup"> 
280                        <@getCarouselMediaPopup imgMini=imgMini media=media altText=altText height=height /> 
281                    </#if> 
282                    <#break > 
283                <#default> 
284            </#switch> 
285             
286            <#local hasLegend = legend?length != 0 /> 
287            <#if hasLegend> 
288                <figcaption class="interior-article-media-legend">${legend}</figcaption> 
289            </#if> 
290 
291        </figure> 
292         
293    </#if> 
294     
295</#macro> 
296 
297 
298<#macro getImageMedia mediaSrc urlIframePortlet altText height > 
299    <#local displayedHeight = '' /> 
300    <#if height != ""> 
301        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
302    </#if> 
303    <#if urlIframePortlet != ""> 
304        <#assign target = "href='"+ urlIframePortlet +"'" /> 
305        <#if !isInternalLink(urlIframePortlet)> 
306            <#assign target = target + " target='_blank' rel='noopener noreferrer'" /> 
307        </#if> 
308        <a ${target} title="${htmlUtil.escapeAttribute(altText)}"> 
309            <img class="interior-article-media-image" src="${mediaSrc}" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} /> 
310        </a> 
311    <#else> 
312        <img class="interior-article-media-image" src="${mediaSrc}" alt="${htmlUtil.escapeAttribute(altText)}" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} /> 
313    </#if> 
314</#macro> 
315 
316 
317<#macro getImageMediaPopup imgMini mediaSrc altText height > 
318    <#local displayedHeight = '' /> 
319    <#if height != ""> 
320        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
321    </#if> 
322    <a class="link-img" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}"> 
323        <img class="interior-article-media-image" src="${imgMini}" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} /> 
324    </a> 
325</#macro> 
326 
327 
328<#macro getVideoMedia imgMini mediaSrc height altText> 
329    <div class="lazy-video" data-video="${mediaSrc}" data-height="${height}" data-text="${htmlUtil.escapeAttribute(altText)}" data-poster="${imgMini}" ></div> 
330</#macro> 
331 
332 
333<#macro getVideoMediaPopup imgMini mediaSrc altText height > 
334    <#local displayedHeight = '' /> 
335    <#if height != ""> 
336        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
337    </#if> 
338    <a class="link-video" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}"> 
339        <img class="interior-article-media-image" src="${imgMini}" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} /> 
340    </a> 
341</#macro> 
342 
343 
344<#macro getPdfMedia mediaSrc altText height > 
345    <#local displayedHeight = '' /> 
346    <#if height != ""> 
347        <#local displayedHeight = 'style="height:'+height+'px;"' /> 
348    </#if> 
349    <iframe class="interior-article-media-iframe" src="${pdfViewer+mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} allowfullscreen ></iframe> 
350</#macro> 
351 
352 
353<#macro getPdfMediaPopup imgMini mediaSrc altText height > 
354    <#local displayedHeight = '' /> 
355    <#if height != ""> 
356        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
357    </#if> 
358    <a class="link-pdf" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}"> 
359        <img class="interior-article-media-image" src="${imgMini}" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} /> 
360    </a> 
361</#macro> 
362 
363 
364<#macro getIframeMedia urlIframePortlet altText height > 
365    <#local displayedHeight = '' /> 
366    <#if height != ""> 
367        <#local displayedHeight = 'style="height:'+height+'px;"' /> 
368    </#if> 
369    <#if urlIframePortlet?contains("youtube")> 
370        <#local youtubeId = urlIframePortlet?substring(urlIframePortlet?index_of("embed/")+6) /> 
371        <div class="interior-article-media-youtube-blocker" ${displayedHeight}> 
372            <div class="youtube-blocker-img-wrapper"> 
373                <img class="youtube-blocker-img" src="https://img.youtube.com/vi/${youtubeId}/0.jpg" alt="" /> 
374            </div> 
375            <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> 
376            <div class="youtube-blocker-btn-wrapper"> 
377                <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> 
378                <a href="https://www.youtube.com/static?template=terms&gl=FR" class="youtube-blocker-btn" target="_blank" rel="noopener noreferrer">En savoir plus</a> 
379            </div> 
380        </div> 
381    <#else> 
382        <iframe class="interior-article-media-iframe" data-src="${urlIframePortlet}" title="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} allowfullscreen ></iframe> 
383    </#if> 
384</#macro> 
385 
386 
387<#macro getIframeMediaPopup imgMini urlIframePortlet altText height > 
388    <#local displayedHeight = '' /> 
389    <#if height != ""> 
390        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
391    </#if> 
392    <a class="link-iframe" href="${urlIframePortlet}" title="${htmlUtil.escapeAttribute(altText)}"> 
393        <img class="interior-article-media-image" src="${imgMini}" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} /> 
394    </a> 
395</#macro> 
396 
397 
398<#macro getPortletMedia urlIframePortlet height > 
399     
400    <#local displayedHeight = '' /> 
401    <#if height != ""> 
402        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
403    </#if> 
404     
405    <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') /> 
406    <#local hasQueryString = urlIframePortlet?contains('?') /> 
407    <#local queryString = '' /> 
408    <#local instanceId = '' /> 
409    <#local portletName = urlIframePortlet /> 
410    <#local portletId = urlIframePortlet /> 
411    <#local fullPortletName = '' /> 
412     
413    <#if hasInstanceId> 
414        <#if hasQueryString> 
415            <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..urlIframePortlet?index_of('?')-1] /> 
416        <#else> 
417            <#local instanceId = urlIframePortlet[(urlIframePortlet?index_of('INSTANCE')+9)..] /> 
418        </#if> 
419        <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('INSTANCE'))-2] /> 
420    <#else> 
421        <#if hasQueryString> 
422            <#local portletName = urlIframePortlet[0..(urlIframePortlet?index_of('?'))-1] /> 
423        </#if> 
424    </#if> 
425     
426    <#if hasQueryString> 
427        <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] /> 
428    </#if> 
429     
430    <#if hasInstanceId> 
431        <#local fullPortletName = portletName+'_INSTANCE_'+instanceId /> 
432    <#else> 
433         <#local fullPortletName = portletName /> 
434    </#if> 
435 
436    <#local divId = "embedded-portlet-" + fullPortletName + randomNamespace /> 
437     
438    <#-- 
439    <code class="hide"> 
440        urlIframePortlet=${urlIframePortlet} 
441        portletName=${portletName} 
442        instanceId=${instanceId} 
443        queryString=${queryString} 
444        fullPortletName=${fullPortletName} 
445    </code> 
446    --> 
447     
448    <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice') || urlIframePortlet?contains('cuCreate')> 
449         
450        <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive&currentURL=" + themeDisplay.getURLCurrent() /> 
451 
452        <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="" data-querystring="${queryString}" ${displayedHeight}></div> 
453         
454    <#else> 
455         
456        <#local plid = themeDisplay.plid /> 
457        <#local portletURL = portletURLFactory.create(renderRequest, fullPortletName, plid, "RENDER_PHASE") /> 
458        <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") /> 
459        ${portletURL.setWindowState(windowState)} 
460        <#local remoteUrl = portletURL.toString() + "&" + queryString + "&currentURL=" + themeDisplay.getURLCurrent() /> 
461         
462        <div id="${divId}" class="embedded-portlet" data-portlet="${fullPortletName}" data-remote-url="${remoteUrl}" data-querystring="${queryString}" ${displayedHeight}></div> 
463         
464    </#if> 
465     
466</#macro> 
467 
468 
469<#macro getPortletMediaPopup imgMini urlIframePortlet altText height > 
470     
471    <#local displayedHeight = '' /> 
472    <#if height != ""> 
473        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
474    </#if> 
475 
476    <#local hasInstanceId = urlIframePortlet?contains('INSTANCE') /> 
477    <#local hasQueryString = urlIframePortlet?contains('?') /> 
478    <#local portletId = urlIframePortlet /> 
479    <#local queryString = '' /> 
480     
481    <#if hasInstanceId> 
482        <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of(instanceId))] /> 
483    </#if> 
484    <#if hasQueryString> 
485        <#local portletId = urlIframePortlet[0..(urlIframePortlet?index_of('?')-1)] /> 
486        <#local queryString = urlIframePortlet[(urlIframePortlet?index_of('?')+1)..] /> 
487    </#if> 
488     
489    <#local divId = "embedded-portlet-" + portletId /> 
490         
491    <#if urlIframePortlet?contains('cdalrEService') || urlIframePortlet?contains('cdalrEservice')> 
492         
493        <#local queryString = queryString +"&p_l_id="+plid+"&p_p_lifecycle=0&p_p_mode=view&p_p_state=exclusive&currentURL=" +themeDisplay.getURLCurrent() /> 
494         
495        <div class="link-portlet eservice-form-opener" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="" tabindex="0"> 
496            <div class="eservice-form-opener-picto"></div> 
497            <p class="eservice-form-opener-text">${htmlUtil.escapeAttribute(altText)}</p> 
498        </div> 
499 
500    <#else> 
501         
502        <#local portletClass = "link-portlet" /> 
503        <#if urlIframePortlet?contains('19_WAR')> 
504            <#local portletClass = "link-portlet planning-cmd-opener" /> 
505        </#if> 
506        <#local plid = themeDisplay.plid /> 
507        <#local portletURL = portletURLFactory.create(renderRequest, portletId, plid, "RENDER_PHASE") /> 
508        <#local windowState = windowStateFactory.getWindowState("EXCLUSIVE") /> 
509        ${portletURL.setWindowState(windowState)} 
510        <#local remoteUrl = portletURL.toString() + "&" + queryString + "&currentURL=" + themeDisplay.getURLCurrent() /> 
511         
512        <div class="${portletClass}" data-divId="${divId}" data-portlet="${portletId}" data-querystring="${queryString}" data-remote-url="${remoteUrl}" tabindex="0"> 
513            <img class="interior-article-media-image" src="${imgMini}" alt="${altText}" ${displayedHeight} /> 
514        </div> 
515     
516    </#if> 
517     
518</#macro> 
519 
520 
521<#macro getCarouselMedia media altText height width >  
522     
523    <#local ratioDisplay = "" /> 
524    <#if height != "" && width != "" > 
525        <#local ratio = height?number / width?number * 100 /> 
526        <#local ratioDisplay = 'style="padding-top:' + ratio + '%"' /> 
527    </#if> 
528     
529    <div class="carousel" id="carousel-${carouselNb}" data-carousel="carousel-${carouselNb}" ${ratioDisplay}> 
530         
531        <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> 
532        <button type="button" id="carousel-${carouselNb}-arrow-next" data-carousel="carousel-${carouselNb}" data-direction="next" class="carousel-arrow carousel-arrow-next">Image suivante</button> 
533 
534        <#list media.media_doc.getSiblings() as node> 
535            <#if node_index == 0> 
536                <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}"> 
537            <#else> 
538                <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}"> 
539            </#if> 
540        </#list> 
541 
542    </div> 
543 
544</#macro> 
545 
546 
547<#macro getCarouselMediaPopup imgMini media altText height > 
548    <#local diapos = "" /> 
549    <#list media.media_doc.getSiblings() as node> 
550        <#if node_index != 0> 
551            <#local diapos = diapos + "," /> 
552        </#if> 
553        <#local diapos = diapos + node.getData() /> 
554    </#list> 
555    <#local displayedHeight = '' /> 
556    <#if height != ""> 
557        <#local displayedHeight = 'style="max-height:'+height+'px;"' /> 
558    </#if> 
559    <a class="link-diapo" href="${mediaSrc}" title="${htmlUtil.escapeAttribute(altText)}" data-diapos="${diapos}"> 
560        <img class="interior-article-media-image" src="${imgMini}" alt="${htmlUtil.escapeAttribute(altText)}" ${displayedHeight} /> 
561    </a> 
562</#macro> 
563 
564 
565<#function isInternalLink link> 
566  <#local internal = link?contains("www.larochelle-forceocean.fr") || link?contains("www2.larochelle-forceocean.fr") || !link?contains("//")> 
567  <#return internal> 
568</#function>