Une erreur s'est produite lors du traitement du modèle.
The following has evaluated to null or missing:
==> serviceLocator.findService("com.liferay.list.type.service.ListTypeEntryLocalService").fetchListTypeEntry(listTypeDefinitionID, itemValue)  [in template "com.liferay.portal.template.freemarker_7.0.59_CLASS_LOADER_CONTEXT_FTL_garance.ftl" at line 106, column 21]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: listTypeEntry = serviceLocator.findSe...  [in template "com.liferay.portal.template.freemarker_7.0.59_CLASS_LOADER_CONTEXT_FTL_garance.ftl" in function "getPicklistItemName" at line 106, column 5]
----
1<#assign 
2dlAppLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService") 
3dlURLHelper = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper") 
4 
5objectDefinitionLocalService = serviceLocator.findService("com.liferay.object.service.ObjectDefinitionLocalService") 
6objectEntryLocalService = serviceLocator.findService("com.liferay.object.service.ObjectEntryLocalService") 
7objectRelationshipLocalService = serviceLocator.findService("com.liferay.object.service.ObjectRelationshipLocalService") 
8/> 
9 
10<#assign imagefixeID = ObjectEntry_objectEntryId.getData()?number 
11imagefixeEntry = objectEntryLocalService.fetchObjectEntry(imagefixeID?number) 
12imagefixeGroupID = imagefixeEntry.getGroupId() 
13
14 
15<#assign summary = garance.getSummaryContent("Image")> 
16 
17<#--------------------------------- Header --------------------------> 
18 
19<#assign matPubRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "matPubClassements")> 
20<#assign matPubs = objectEntryLocalService.getOneToManyObjectEntries(imagefixeGroupID, matPubRel.objectRelationshipId, imagefixeID, true, null, -1, -1 ) /> 
21<#assign advertFileTypes = matPubs?filter(m -> m.values.advertFileType?hasContent)?map(m -> garance.getPicklistItemName(m.values.advertFileType, "picklistAdvertFileType"))?join(', ') /> 
22<#assign categoryPhoto = "" /> 
23<#if imagefixeEntry.values.categoryPhoto?hasContent> 
24    <#assign photoCategories = garance.getMultiplePicklistItemName(imagefixeEntry.values.categoryPhoto, "picklistCategoryPhoto") /> 
25    <#if photoCategories?hasContent> 
26        <#assign categoryPhoto = photoCategories?join(", ") /> 
27    </#if> 
28</#if> 
29 
30<#assign auteursRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeAutheurs")> 
31<#assign auteurs = objectEntryLocalService.getOneToManyObjectEntries(imagefixeGroupID, auteursRel.objectRelationshipId, imagefixeID, true, null, -1, -1 ) /> 
32<#assign auteursFull = []> 
33<#list auteurs as auteur> 
34    <#assign auteursFull = auteursFull + [{ 
35    "personne": garance.getPersonneDisplayData(auteur.values.r_imageFixeAuteurPersonne_c_transitionPersonneId), 
36    "presume": auteur.values.creatorPresume, 
37    "type": garance.getPicklistItemName(auteur.values.castCreditType, "picklistImprimeCastCreditType") 
38    }]> 
39</#list> 
40 
41 
42<#assign productionDatesRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "productionDate")> 
43<#assign productionDates = objectEntryLocalService.getOneToManyObjectEntries(imagefixeGroupID, productionDatesRel.objectRelationshipId, imagefixeID, true, null, -1, -1 ) /> 
44<#assign productionDatesFull = []> 
45<#if productionDates?hasContent> 
46    <#list productionDates as productionDate> 
47        <#assign productionDatesFull = productionDatesFull + [{ 
48        "presumeCountry": productionDate.values.afficheIdentificationPaysPres, 
49        "country": garance.getThesaurusByID(productionDate.values.r_imageFixePosterIdentificationCountry_c_thesaurusId), 
50        "presumeDate": productionDate.values.anneeDeProdPresume, 
51        "startDate": (productionDate.values.productionStartDate?hasContent)?then(productionDate.values.productionStartDate?string("yyyy"), "") 
52        }]> 
53    </#list> 
54</#if> 
55 
56<#--------------------------------- Identité --------------------------> 
57 
58<#assign relatedFilmsFull = []> 
59<#assign relatedFilmsRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeRelatedObject")> 
60<#assign relatedFilms = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, relatedFilmsRel.objectRelationshipId, imagefixeID, true, relatedFilmsRel.isReverse(), null, -1, -1 ) /> 
61<#list relatedFilms as relatedFilm> 
62    <#assign filmData = garance.getFilmDisplayData(relatedFilm)> 
63    <#if filmData?hasContent> 
64        <#assign relatedFilmsFull = relatedFilmsFull + [filmData]> 
65    </#if> 
66</#list> 
67 
68<#assign languagesRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeLanguages")> 
69<#assign languages = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, languagesRel.objectRelationshipId, imagefixeID, true, languagesRel.isReverse(), null, -1, -1 ) /> 
70<#assign languagesFull = languages?filter(l-> l.values.label?hasContent)> 
71 
72<#assign manifestationsRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeChildManifestations")> 
73<#assign manifestations = objectEntryLocalService.getOneToManyObjectEntries(imagefixeGroupID, manifestationsRel.objectRelationshipId, imagefixeID, true, null, -1, -1 ) /> 
74 
75<#assign childWorksRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeEnfant")> 
76<#assign childWorks = objectEntryLocalService.getOneToManyObjectEntries(imagefixeGroupID, childWorksRel.objectRelationshipId, imagefixeID, true, null, -1, -1 ) /> 
77 
78<#assign personRepresentedRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixePersonRepresented")> 
79<#assign personRepresented = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, personRepresentedRel.objectRelationshipId, imagefixeID, true, personRepresentedRel.isReverse(), null, -1, -1 ) /> 
80 
81<#assign personSujetRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixePersonneSujet")> 
82<#assign personSujet = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, personSujetRel.objectRelationshipId, imagefixeID, true, personSujetRel.isReverse(), null, -1, -1 ) /> 
83 
84<#assign showIdentity = (relatedFilmsFull?hasContent 
85|| languagesFull?hasContent 
86|| childWorks?hasContent 
87|| manifestations?hasContent 
88|| personRepresented?hasContent 
89|| personSujet?hasContent 
90|| ObjectField_posterVariant.getData()?hasContent 
91|| (imagefixeEntry.values.posterAuthorMentionDeResponsabilite?hasContent && imagefixeEntry.values.posterTypeDeNoteMentionDeResponsabilite == "MENTION") 
92|| productionDatesFull?filter(p -> p.country?hasContent)?hasContent) /> 
93 
94<#assign fullConsultables = []/> 
95<#list manifestations as manif> 
96    <#assign fullConsultables = fullConsultables + [{ 
97    "level": "MANIFESTATION", 
98    "type": (manif.values.typeOfPoster?hasContent)?then(garance.getPicklistItemName(manif.values.typeOfPoster, "picklistImageFixeManifestationTypeOfPoster") + " ", ""), 
99    "title": garance.getImageFixeManifestationFullTitle(manif), 
100    "numberDoc": manif.values.nombrePieces, 
101    "id": manif.objectEntryId 
102    }] /> 
103</#list> 
104<#list childWorks?filter(cw->cw.values.titreConcatenation?hasContent) as childWork> 
105    <#assign fullConsultables = fullConsultables + [{ 
106    "level": (childWork.values.posterVariant?hasContent)?then("VARIANT", "WORK"), 
107    "type": (childWork.values.posterVariant?hasContent)?then(garance.getPicklistItemName(childWork.values.posterVariant, "picklistPosterVariantTypeOfVariant") + " ", (childWork.values.typeOfPoster?hasContent)?then(garance.getPicklistItemName(childWork.values.typeOfPoster, "picklistImageFixeManifestationTypeOfPoster"), "")), 
108    "title": childWork.values.titreConcatenation, 
109    "id": childWork.objectEntryId 
110    }] /> 
111</#list> 
112 
113<#assign showConsultables = fullConsultables?hasContent /> 
114<#--------------------------------- Description du contenu --------------------------> 
115 
116<#assign imageFixeObjectCategoryRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeObjectCategory")> 
117<#assign imageFixeObjectCategory = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, imageFixeObjectCategoryRel.objectRelationshipId, imagefixeID, true, imageFixeObjectCategoryRel.isReverse(), null, -1, -1 ) /> 
118 
119<#assign imageFixeContentThemeRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeContentTheme")> 
120<#assign imageFixeContentTheme = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, imageFixeContentThemeRel.objectRelationshipId, imagefixeID, true, imageFixeContentThemeRel.isReverse(), null, -1, -1 ) /> 
121 
122<#assign imageFixeRepresentationRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeRepresentation")> 
123<#assign imageFixeRepresentation = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, imageFixeRepresentationRel.objectRelationshipId, imagefixeID, true, imageFixeRepresentationRel.isReverse(), null, -1, -1 ) /> 
124 
125<#assign imageFixeSourceOfPresentationRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeSourceOfPresentation")> 
126<#assign imageFixeSourceOfPresentation = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, imageFixeSourceOfPresentationRel.objectRelationshipId, imagefixeID, true, imageFixeSourceOfPresentationRel.isReverse(), null, -1, -1 ) /> 
127 
128<#assign imageFixeStyleRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeStyle")> 
129<#assign imageFixeStyle = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, imageFixeStyleRel.objectRelationshipId, imagefixeID, true, imageFixeStyleRel.isReverse(), null, -1, -1 ) /> 
130 
131<#assign imageFixeSchoolRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeSchool")> 
132<#assign imageFixeSchool = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, imageFixeSchoolRel.objectRelationshipId, imagefixeID, true, imageFixeSchoolRel.isReverse(), null, -1, -1 ) /> 
133 
134<#assign showDescription = (imageFixeObjectCategory?hasContent 
135|| imageFixeContentTheme?hasContent 
136|| imageFixeRepresentation?hasContent 
137|| imageFixeSourceOfPresentation?hasContent 
138|| imageFixeStyle?hasContent 
139|| imageFixeSchool?hasContent)> 
140 
141<#--------------------------------- Exemplaires --------------------------> 
142<#assign relatedObjectsRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeTypeDeRelation")> 
143<#assign relatedObjectTypes = objectEntryLocalService.getOneToManyObjectEntries(imagefixeGroupID, relatedObjectsRel.objectRelationshipId, imagefixeID, true, null, -1, -1 ) /> 
144<#assign relatedObjectsFull = garance.getRelatedObjects(relatedObjectTypes, imagefixeEntry, true)> 
145 
146<#assign relatedArchives = []> 
147<#if relatedObjectsFull.archivecatalogue?? && relatedObjectsFull.archivecatalogue.work??> 
148    <#assign relatedArchives = relatedObjectsFull.archivecatalogue.work?filter(a -> a.associationType == "Provient de")/> 
149</#if> 
150 
151<#assign showExemplaires = relatedArchives?hasContent> 
152 
153<#--------------------------------- Media --------------------------> 
154<#assign reproductionsRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeReproductions")> 
155<#assign reproductions = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, reproductionsRel.objectRelationshipId, imagefixeID, true, reproductionsRel.isReverse(), null, -1, -1 ) /> 
156 
157<#assign reproductionsImages = []> 
158<#assign reproductionsVideos = []> 
159<#if reproductions?hasContent> 
160    <#list reproductions as reproduction> 
161        <#if reproduction.values.reproductionNature?hasContent> 
162            <#if reproduction.values.reproductionNature == "PICTURE" && reproduction.values.media?string != "0"> 
163                <#assign reproductionsImages = reproductionsImages + [reproduction]> 
164            <#elseIf reproduction.values.reproductionNature == "VIDEO"> 
165                <#assign reproductionsVideos = reproductionsVideos + [reproduction]> 
166            </#if> 
167        </#if> 
168    </#list> 
169</#if> 
170 
171<#assign bureautiquesRel = objectRelationshipLocalService.getObjectRelationship(imagefixeEntry.objectDefinitionId, "imageFixeBureautique")> 
172<#assign bureautiques = objectEntryLocalService.getManyToManyObjectEntries(imagefixeGroupID, bureautiquesRel.objectRelationshipId, imagefixeID, true, bureautiquesRel.isReverse(), null, -1, -1 ) /> 
173 
174<#assign showMedia = (reproductionsImages?hasContent || reproductionsVideos?hasContent || bureautiques?hasContent)> 
175 
176<#--------------------------------- Collections --------------------------> 
177 
178 
179<#assign showCollection = relatedObjectsFull?hasContent> 
180<div class="notice notice--imagefixe js-notice"> 
181    <div class="notice-header tw:text-white tw:pt-[3.375rem] tw:pb-[2.5rem] tw:relative tw:overflow-hidden 
182    tw:before:content-[''] tw:before:absolute tw:before:inset-0 tw:before:size-full tw:before:block tw:before:bg-text tw:before:opacity-90 
183    tw:xl:pt-[9.5rem]"> 
184        <div class="page-wrapper tw:z-0 tw:relative"> 
185            <#if request.getParameter("searchContext")?hasContent> 
186                <@garance.noticePagination request.getParameter("searchContext") imagefixeID /> 
187            </#if> 
188            <div class="tw:flex tw:gap-5 tw:items-start tw:flex-wrap tw:flex-col tw:z-0 
189            tw:md:flex-row tw:lg:flex-nowrap 
190            tw:xl:gap-[2.125rem]"> 
191                <div class="tw:order-2 tw:lg:order-1 tw:flex tw:flex-col tw:w-full tw:text-center 
192                    tw:md:w-fit tw:md:text-left"> 
193                    <#if (ObjectField_titreConcatenation.getData())??> 
194                        <h1 class="tw:order-1 tw:text-prim tw:mb-[0.625rem]"> 
195                            ${ObjectField_titreConcatenation.getData()} 
196                        </h1> 
197                    </#if> 
198                    <#if !reproductionsImages?hasContent && (ObjectField_dataset.getData())?hasContent> 
199                        <p class="tw:order-0 tw:mb-5 tw:text-[0.75rem]/[1rem] tw:block tw:mx-auto tw:rounded-xs tw:w-fit tw:bg-[rgba(255,255,255,0.9)] tw:text-prim tw:uppercase tw:px-[0.625rem] tw:py-1 
200                                            tw:md:mx-0"> 
201                            ${ObjectField_dataset.getData()} 
202                        </p> 
203                    </#if> 
204                    <div class="tw:order-1 tw:relative tw:pt-5 tw:mt-5 tw:text-left 
205                    tw:before:block tw:before:content-[''] tw:before:absolute tw:before:top-0 tw:before:h-[0.0625rem] tw:before:w-full tw:before:bg-white tw:before:opacity-20 
206                    tw:md:before:w-[12.8125rem] "> 
207                        <#if ObjectField_typeDOeuvreAffiche.getData()?hasContent || advertFileTypes?hasContent || categoryPhoto?hasContent> 
208                            <p class="tw:mb-[0.625rem]"> 
209                                ${[ObjectField_typeDOeuvreAffiche.getData(), advertFileTypes, categoryPhoto]?filter(f-> f?hasContent)?join(' - ')} 
210                            </p> 
211                        </#if> 
212                        <#if auteursFull?hasContent> 
213                            <p class="tw:mb-[0.625rem]"> 
214                                Auteur : 
215                                <#list auteursFull as auteur> 
216                                    <#if auteur.personne.id?hasContent> 
217                                        <a href="/l/${auteur.personne.id}" 
218                                           class="tw:font-bold tw:transition-all tw:bg-linear-[currentcolor,currentcolor] tw:bg-no-repeat tw:bg-bottom-left tw:bg-size-[100%_0.0625rem] tw:hover:bg-size-[0_0.0625rem]"> 
219                                            ${auteur.personne.name} 
220                                        </a> 
221                                    <#else>${auteur.personne.name}</#if><#if getterUtil.getBoolean(auteur.presume)>&nbsp;(Présumé)</#if><#if auteur.type?hasContent>&nbsp;(${auteur.type})</#if><#if !auteur?isLast>&nbsp;; </#if> 
222                                </#list> 
223                            </p> 
224                        </#if> 
225                        <#if productionDatesFull?hasContent> 
226                            <#assign prodDates = productionDatesFull?filter(p -> p.startDate?hasContent)> 
227                            <#list prodDates as productionDate> 
228                                <p class="tw:mb-[0.625rem]"> 
229                                    ${productionDate.startDate}<#if getterUtil.getBoolean(productionDate.presumeDate)>&nbsp;(Présumée)</#if> 
230                                </p> 
231                            </#list> 
232                        </#if> 
233                    </div> 
234                </div> 
235                <#if reproductionsImages?hasContent> 
236                    <div class="tw:order-1 tw:lg:order-0 tw:w-full 
237                                    tw:md:w-fit"> 
238                        <div class="tw:m-auto tw:mx-auto tw:max-w-full tw:w-[15.625rem] tw:relative 
239                                        tw:md:mx-0"> 
240                            <#if ObjectField_dataset.getData()?hasContent> 
241                                <p class="tw:absolute tw:top-[0.625rem] tw:left-[0.625rem] tw:text-[0.75rem]/[1rem] tw:block tw:rounded-xs tw:w-fit tw:bg-[rgba(255,255,255,0.9)] tw:text-prim tw:uppercase tw:px-[0.625rem] tw:py-1"> 
242                                    ${ObjectField_dataset.getData()} 
243                                </p> 
244                            </#if> 
245                            <#assign thumbnail = reproductionsImages?first> 
246                            <#assign fileEntryDesktop = dlAppLocalService.getFileEntry(thumbnail.values.media?number) /> 
247                            <#assign thumbnailURL = dlURLHelper.getPreviewURL(fileEntryDesktop, fileEntryDesktop.getFileVersion(), 
248                            null, "", 
249                            !fileEntryDesktop.getFileVersion().equals(fileEntryDesktop.getLatestFileVersion()), true) /> 
250 
251                            <figure class="tw:w-full"> 
252                                <source media="(min-width: 480px)" 
253                                        srcset="${thumbnailURL}"/> 
254                                <img class="tw:rounded-xs tw:object-cover tw:size-full" alt="" 
255                                     src="${thumbnailURL}"/> 
256                                <#if thumbnail.values.reproductionNotes?hasContent || thumbnail.values.reproductionCopyright?hasContent> 
257                                    <figcaption class="tw:ml-[0.625rem] tw:opacity-70 tw:text-[0.75rem]/[1rem] tw:font-medium tw:mt-[0.3125rem] 
258                                                    tw:md:ml-0"> 
259                                        ${[thumbnail.values.reproductionNotes, thumbnail.values.reproductionCopyright]?filter(v->v?hasContent)?join(" - ")} 
260                                    </figcaption> 
261                                </#if> 
262                            </figure> 
263                        </div> 
264                    </div> 
265                </#if> 
266 
267                <@garance.noticeTools /> 
268            </div> 
269        </div> 
270    </div> 
271 
272    <div class="notice-content"> 
273        <div class="tw:overflow-y-clip tw:py-10"> 
274            <div class="page-wrapper summary-ancres js-summary-ancres tw:group tw:fixed tw:w-full tw:overflow-hidden tw:h-fit tw:z-50 tw:top-[4.375rem] tw:bg-beige tw:max-lg:max-w-full! 
275                tw:lg:top-[6.875rem] tw:lg:h-0 tw:lg:overflow-visible tw:lg:sticky 
276                tw:xl:top-[8.85rem]"> 
277                <nav class="tw:bg-beige tw:lg:w-[14.25rem]" role="navigation" aria-labelledby="summary-title"> 
278                    <button id="summary-title" class="js-summary-btn tw:text-h3 tw:font-title tw:flex tw:justify-between tw:items-center tw:py-[0.625rem] tw:w-full tw:max-sm:px-[calc(2.5rem/2)] tw:focus:outline-offset-[-0.125rem] 
279                        tw:max-lg:px-[calc(5rem/2)] 
280                        tw:lg:hidden" aria-label="Ouvrir/Fermer le sommaire" aria-expanded="false" 
281                            aria-controls="summary-list"> 
282                        <span>Sommaire</span> 
283                        <span class="icon-chevron-down tw:text-prim tw:text-base tw:transition-all tw:outline-offset-[-0.125rem] 
284                        tw:group-[&.open]:rotate-180" aria-hidden="true"></span> 
285                    </button> 
286                    <div id="summary-list" class="tw:overflow-y-auto tw:bg-white tw:transition-all tw:max-sm:px-[calc(2.5rem/2)] 
287                    tw:max-lg:max-h-0 tw:max-lg:px-[calc(5rem/2)] tw:max-lg:max-w-full 
288                    tw:group-[&.open]:max-h-[calc(100vh-(4.375rem+3.125rem))] 
289                    tw:lg:max-h-[calc(100vh-12.5rem)] tw:lg:bg-transparent" tabindex="-1"> 
290                        <ul class="tw:border-sommaire-border tw:border-l-[0.125rem] tw:my-2"> 
291                            <#if showIdentity> 
292                                <li class="tw:py-1 tw:first:pt-0 tw:last:pb-0 tw:lg:py-[0.625rem]"> 
293                                    <a href="#identite" class="js-summary-ancres-link tw:border-l-[0.125rem] tw:border-transparent tw:block tw:py-1 tw:text-base/[1.75rem] tw:font-title tw:pl-[0.625rem] tw:relative tw:left-[-0.125rem] 
294                                    tw:[&.is-active]:border-prim" tabindex="-1"> 
295                                        <span>${summary["IdentiteImage"]?hasContent?then(summary["IdentiteImage"], "Identité")}</span> 
296                                    </a> 
297                                </li> 
298                            </#if> 
299                            <#if showConsultables> 
300                                <li class="tw:py-1 tw:first:pt-0 tw:last:pb-0 tw:lg:py-[0.625rem]"> 
301                                    <a href="#consultables" class="js-summary-ancres-link tw:border-l-[0.125rem] tw:border-transparent tw:block tw:py-1 tw:text-base/[1.75rem] tw:font-title tw:pl-[0.625rem] tw:relative tw:left-[-0.125rem] 
302                                    tw:[&.is-active]:border-prim" tabindex="-1"> 
303                                        <span>${summary["ConsultablesImage"]?hasContent?then(summary["ConsultablesImage"], "Élément(s) consultable(s)")}</span> 
304                                    </a> 
305                                </li> 
306                            </#if> 
307                            <#if showDescription> 
308                                <li class="tw:py-1 tw:first:pt-0 tw:last:pb-0 tw:lg:py-[0.625rem]"> 
309                                    <a href="#description" class="js-summary-ancres-link tw:border-l-[0.125rem] tw:border-transparent tw:block tw:py-1 tw:text-base/[1.75rem] tw:font-title tw:pl-[0.625rem] tw:relative tw:left-[-0.125rem] 
310                                                            tw:[&.is-active]:border-prim" tabindex="-1"> 
311                                        <span>${summary["DescriptionDuContenuImage"]?hasContent?then(summary["DescriptionDuContenuImage"], "Description du contenu")}</span> 
312                                    </a> 
313                                </li> 
314                            </#if> 
315                            <#if showExemplaires> 
316                                <li class="tw:py-1 tw:first:pt-0 tw:last:pb-0 tw:lg:py-[0.625rem]"> 
317                                    <a href="#exemplaires" class="js-summary-ancres-link tw:border-l-[0.125rem] tw:border-transparent tw:block tw:py-1 tw:text-base/[1.75rem] tw:font-title tw:pl-[0.625rem] tw:relative tw:left-[-0.125rem] 
318                                                            tw:[&.is-active]:border-prim" tabindex="-1"> 
319                                        <span>${summary["ExemplairesImage"]?hasContent?then(summary["ExemplairesImage"], "Exemplaires")}</span> 
320                                    </a> 
321                                </li> 
322                            </#if> 
323                            <#if showMedia> 
324                                <li class="tw:py-1 tw:first:pt-0 tw:last:pb-0 tw:lg:py-[0.625rem]"> 
325                                    <a href="#ressources" class="js-summary-ancres-link tw:border-l-[0.125rem] tw:border-transparent tw:block tw:py-1 tw:text-base/[1.75rem] tw:font-title tw:pl-[0.625rem] tw:relative tw:left-[-0.125rem] 
326                                                            tw:[&.is-active]:border-prim" tabindex="-1"> 
327                                        <span>${summary["RessourcesMediaImage"]?hasContent?then(summary["RessourcesMediaImage"], "Ressources média")}</span> 
328                                    </a> 
329                                </li> 
330                            </#if> 
331                            <#if showCollection> 
332                                <li class="tw:py-1 tw:first:pt-0 tw:last:pb-0 tw:lg:py-[0.625rem]"> 
333                                    <a href="#collections" class="js-summary-ancres-link tw:border-l-[0.125rem] tw:border-transparent tw:block tw:py-1 tw:text-base/[1.75rem] tw:font-title tw:pl-[0.625rem] tw:relative tw:left-[-0.125rem] 
334                                                            tw:[&.is-active]:border-prim" tabindex="-1"> 
335                                        <span>${summary["CollectionsLieesImage"]?hasContent?then(summary["CollectionsLieesImage"], "Collections liées")}</span> 
336                                    </a> 
337                                </li> 
338                            </#if> 
339                        </ul> 
340                    </div> 
341                </nav> 
342            </div> 
343 
344            <#if imagefixeEntry.values.r_imageFixeEnfant_c_imageFixeId != 0> 
345                <div class="summary-content-wrapper page-wrapper tw:lg:pl-[16.75rem] tw:pb-10"> 
346                    <p class="tw:flex tw:items-center tw:w-fit tw:gap-[0.3125rem]  tw:text-notice"> 
347                        <span class="icon-arrow-left tw:transition-all tw:block tw:text-[0.875rem] tw:text-prim" 
348                              aria-hidden="true"></span> 
349                        <a href="/l/${imagefixeEntry.values.r_imageFixeEnfant_c_imageFixeId}" 
350                           class="tw:font-bold tw:transition-all tw:bg-linear-[currentcolor,currentcolor] tw:bg-no-repeat tw:bg-bottom-left tw:bg-size-[100%_0.0625rem] tw:hover:bg-size-[0_0.0625rem]"> 
351                            <span>Retour aux ressources consultables</span> 
352                        </a> 
353                    </p> 
354                </div> 
355            </#if> 
356 
357            <#if showIdentity> 
358                <div id="identite" class="js-summary-content" tabindex="-1"></div> 
359                <div class="summary-content-wrapper page-wrapper tw:lg:pl-[16.75rem] tw:pb-10"> 
360                    <h2 class="tw:text-prim tw:mb-5">${summary["IdentiteImage"]?hasContent?then(summary["IdentiteImage"], "Identité")}</h2> 
361 
362                    <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
363                        <span class="tw:font-bold tw:shrink-0">Titre :</span> 
364                        <span>${ObjectField_titreConcatenation.getData()}</span> 
365                    </p> 
366 
367                    <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
368                        <span class="tw:font-bold tw:shrink-0">${[ObjectField_typeDOeuvreAffiche.getData(), advertFileTypes, categoryPhoto]?filter(f-> f?hasContent)?join(' - ')}</span> 
369                    </p> 
370 
371                    <#if imagefixeEntry.values.posterVariant?hasContent> 
372                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
373                            <span class="tw:font-bold tw:shrink-0">Version :</span> 
374                            <span>${ObjectField_posterVariant.getData()}</span> 
375                        </p> 
376                    </#if> 
377 
378                    <#if auteursFull?hasContent> 
379                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
380                            <span class="tw:font-bold tw:shrink-0">Auteur(s) :</span> 
381                            <#list auteursFull as auteur> 
382                                <#if auteur.personne.id?hasContent> 
383                                    <a href="/l/${auteur.personne.id}" 
384                                       class="tw:font-bold tw:transition-all tw:bg-linear-[currentcolor,currentcolor] tw:bg-no-repeat tw:bg-bottom-left tw:bg-size-[100%_0.0625rem] tw:hover:bg-size-[0_0.0625rem]"> 
385                                        ${auteur.personne.name} 
386                                    </a> 
387                                <#else>${auteur.personne.name}</#if><#if getterUtil.getBoolean(auteur.presume)>&nbsp;(Présumé)</#if><#if auteur.type?hasContent>&nbsp;(${auteur.type})</#if><#if !auteur?isLast>&nbsp;; </#if> 
388                            </#list> 
389                        </p> 
390                    </#if> 
391 
392                    <#if ObjectField_posterAuthorMentionDeResponsabilite.getData()?hasContent 
393                    && imagefixeEntry.values.posterTypeDeNoteMentionDeResponsabilite == "MENTION"> 
394                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
395                            <span class="tw:font-bold tw:shrink-0">Note sur l'auteur :</span> 
396                            <span>${ObjectField_posterAuthorMentionDeResponsabilite.getData()}</span> 
397                        </p> 
398                    </#if> 
399 
400                    <#if productionDatesFull?hasContent> 
401                        <#list productionDatesFull as productionDate> 
402                            <#if productionDate.country?hasContent> 
403                                <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
404                                    <span class="tw:font-bold tw:shrink-0">Pays :</span> 
405                                    <span>${productionDate.country}<#if getterUtil.getBoolean(productionDate.presumeCountry)>&nbsp;(Présumé)</#if></span> 
406                                </p> 
407                            </#if> 
408                        </#list> 
409 
410                        <#assign prodDates = productionDatesFull?filter(p -> p.startDate?hasContent)> 
411                        <#list prodDates as productionDate> 
412                            <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
413                                <span class="tw:font-bold tw:shrink-0">Année :</span> 
414                                <span>${productionDate.startDate}<#if getterUtil.getBoolean(productionDate.presumeDate)>&nbsp;(Présumée)</#if></span> 
415                            </p> 
416                        </#list> 
417                    </#if> 
418 
419                    <#if languagesFull?hasContent> 
420                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
421                            <span class="tw:font-bold tw:shrink-0">Langue :</span> 
422                            <span>${languagesFull?map(l->l.values.label)?join(", ")}</span> 
423                        </p> 
424                    </#if> 
425 
426                    <#if relatedFilmsFull?hasContent> 
427                        <div class="tw:flex tw:max-md:flex-col tw:max-lg:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
428                            <p id="films-tlt" class="tw:leading-[1.375rem] tw:font-bold tw:shrink-0">Film(s) :</p> 
429                            <ul aria-labelledby="films-tlt"> 
430                                <#list relatedFilmsFull as relatedFilm> 
431                                    <li <#if (relatedFilm?index > 4)>class="tw:hidden"</#if>> 
432                                        <#if relatedFilm.id?hasContent> 
433                                            <a href="/l/${relatedFilm.id}" 
434                                               class="tw:font-bold tw:transition-all tw:bg-linear-[currentcolor,currentcolor] tw:bg-no-repeat tw:bg-bottom-left tw:bg-size-[100%_0.0625rem] tw:hover:bg-size-[0_0.0625rem]"> 
435                                                ${relatedFilm.title} 
436                                            </a> 
437                                        <#else> 
438                                            ${relatedFilm.title} 
439                                        </#if> 
440                                        <#if relatedFilm.reals?hasContent> - 
441                                            <#list relatedFilm.reals as real> 
442                                                <#if real.id?hasContent> 
443                                                    <a class="tw:font-bold tw:transition-all tw:bg-linear-[currentcolor,currentcolor] tw:bg-no-repeat tw:bg-bottom-left tw:bg-size-[100%_0.0625rem] tw:hover:bg-size-[0_0.0625rem]" 
444                                                       href="/l/${real.id}"> 
445                                                        ${real.name} 
446                                                    </a> 
447                                                <#else> 
448                                                    ${real.name} 
449                                                </#if> 
450                                                <#if !real?isLast>, </#if> 
451                                            </#list> 
452                                        </#if> 
453                                        <#if relatedFilm.year?hasContent> - ${relatedFilm.year}</#if> 
454                                    </li> 
455                                </#list> 
456                            </ul> 
457                        </div> 
458                    </#if> 
459 
460                    <#if personRepresented?hasContent> 
461                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
462                            <span class="tw:font-bold tw:shrink-0">Personne(s) représentée(s) :</span> 
463                            <span><#list personRepresented as p> 
464                                <#assign dataRepresented = garance.getPersonneDisplayData(p.objectEntryId)> 
465                                <#if dataRepresented.id?hasContent> 
466                                    <a href="/l/${dataRepresented.id}" 
467                                       class="tw:font-bold tw:transition-all tw:bg-linear-[currentcolor,currentcolor] tw:bg-no-repeat tw:bg-bottom-left tw:bg-size-[100%_0.125rem] tw:hover:bg-size-[0_0.125rem]"> 
468                                        ${dataRepresented.name}</a><#else>${dataRepresented.name}</#if><#if !p?isLast>, </#if> 
469                            </#list></span> 
470                        </p> 
471                    </#if> 
472 
473                    <#if personSujet?hasContent> 
474                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
475                            <span class="tw:font-bold tw:shrink-0">Personne(s) sujet :</span> 
476                            <span><#list personSujet as p> 
477                                <#assign dataSujet = garance.getPersonneDisplayData(p.objectEntryId)> 
478                                <#if dataSujet.id?hasContent> 
479                                    <a href="/l/${dataSujet.id}" 
480                                       class="tw:font-bold tw:transition-all tw:bg-linear-[currentcolor,currentcolor] tw:bg-no-repeat tw:bg-bottom-left tw:bg-size-[100%_0.125rem] tw:hover:bg-size-[0_0.125rem]"> 
481                                        ${dataSujet.name}</a><#else>${dataSujet.name}</#if><#if !p?isLast>, </#if> 
482                            </#list></span> 
483                        </p> 
484                    </#if> 
485 
486                </div> 
487            </#if> 
488 
489 
490            <#if showConsultables> 
491                <div id="consultables" class="js-summary-content" tabindex="-1"></div> 
492                <div class="summary-content-wrapper page-wrapper tw:lg:pl-[16.75rem] tw:pb-10"> 
493                    <h2 class="tw:text-prim tw:mb-5">${summary["ConsultablesImage"]?hasContent?then(summary["ConsultablesImage"], "Élément(s) consultable(s)")}</h2> 
494                    <#assign fullConsultables = fullConsultables?sortBy("type") /> 
495                    <div class="wysiwyg js-list-expand"> 
496                        <ul> 
497                            <#list fullConsultables as consultable> 
498                                <li <#if (consultable?index > 4)>class="tw:hidden"</#if>> 
499                                    <a class="tw:font-bold! tw:bg-size-[100%_0.0625rem]! tw:hover:bg-size-[0_0.0625rem]!" 
500                                       href="/l/${consultable.id}"> 
501                                        <#if consultable.level == "MANIFESTATION"> 
502                                        ${[consultable.type, consultable.title, (consultable.numberDoc?hasContent)?then("- " + consultable.numberDoc + " document(s)", "")]?filter(v->v?hasContent)?join(" ")} 
503                                        <#else> 
504                                        ${[consultable.type, consultable.title]?filter(v->v?hasContent)?join(" ")} 
505                                        </#if> 
506                                    </a> 
507                                </li> 
508                            </#list> 
509                        </ul> 
510                        <#if (fullConsultables?size > 5)> 
511                            <button type="button" 
512                                    class="js-expand tw:items-center tw:leading-[1.75rem] tw:group tw:flex tw:gap-[0.3125rem] tw:font-semibold tw:transition-all tw:bg-linear-[currentcolor,currentcolor] tw:bg-no-repeat tw:bg-bottom-left tw:bg-size-[100%_0.125rem] tw:hover:bg-size-[0_0.125rem]"> 
513                                <span>Voir plus</span> 
514                                <span class="icon-chevron-down tw:inline-block tw:text-prim tw:text-base tw:transition-all tw:text-[0.875rem] tw:rotate-0 
515                                tw:group-hover:rotate-180 tw:group-data-[expanded=true]:rotate-180" aria-hidden="true"></span> 
516                            </button> 
517                        </#if> 
518                    </div> 
519                </div> 
520            </#if> 
521            <#if showDescription> 
522                <div id="description" class="js-summary-content" tabindex="-1"></div> 
523                <div class="summary-content-wrapper page-wrapper tw:lg:pl-[16.75rem] tw:pb-10"> 
524                    <h2 class="tw:text-prim tw:mb-5">${summary["DescriptionDuContenuImage"]?hasContent?then(summary["DescriptionDuContenuImage"], "Description du contenu")}</h2> 
525 
526                    <#if imageFixeObjectCategory?hasContent> 
527                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
528                            <span class="tw:font-bold tw:shrink-0">Type de document :</span> 
529                            <span>${imageFixeObjectCategory?map(v->v.values.label)?join(", ")}</span> 
530                        </p> 
531                    </#if> 
532 
533                    <#if imageFixeContentTheme?hasContent> 
534                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
535                            <span class="tw:font-bold tw:shrink-0">Thèmes :</span> 
536                            <span>${imageFixeContentTheme?map(v->v.values.label)?join(", ")}</span> 
537                        </p> 
538                    </#if> 
539 
540                    <#if imageFixeRepresentation?hasContent> 
541                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
542                            <span class="tw:font-bold tw:shrink-0">Représentation :</span> 
543                            <span>${imageFixeRepresentation?map(v->v.values.label)?join(", ")}</span> 
544                        </p> 
545                    </#if> 
546 
547                    <#if imageFixeSourceOfPresentation?hasContent> 
548                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
549                            <span class="tw:font-bold tw:shrink-0">Source de représentation :</span> 
550                            <span>${imageFixeSourceOfPresentation?map(v->v.values.label)?join(", ")}</span> 
551                        </p> 
552                    </#if> 
553 
554                    <#if imageFixeStyle?hasContent> 
555                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
556                            <span class="tw:font-bold tw:shrink-0">Époque/Style/Mouvement :</span> 
557                            <span>${imageFixeStyle?map(v->v.values.label)?join(", ")}</span> 
558                        </p> 
559                    </#if> 
560 
561                    <#if imageFixeSchool?hasContent> 
562                        <p class="tw:flex tw:max-md:flex-col tw:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
563                            <span class="tw:font-bold tw:shrink-0">École :</span> 
564                            <span>${imageFixeSchool?map(v->v.values.label)?join(", ")}</span> 
565                        </p> 
566                    </#if> 
567                </div> 
568            </#if> 
569 
570            <#if showExemplaires> 
571                <div id="exemplaires" class="js-summary-content" tabindex="-1"></div> 
572                <div class="summary-content-wrapper page-wrapper tw:lg:pl-[16.75rem] tw:pb-10"> 
573                    <h2 class="tw:text-prim tw:mb-5">${summary["ExemplairesImage"]?hasContent?then(summary["ExemplairesImage"], "Exemplaires")}</h2> 
574                    <div class="tw:flex tw:max-md:flex-col tw:max-lg:flex-wrap tw:items-start tw:gap-[0.625rem] tw:text-notice tw:mb-[0.625rem]"> 
575                        <p id="archive-tlt" class="tw:leading-[1.375rem] tw:font-bold tw:shrink-0">Appartenance à un 
576                            fonds d'archives :</p> 
577                        <ul aria-labelledby="archive-tlt"> 
578                            <#list relatedArchives as archivePart> 
579                                <#assign archiveDataset = ""> 
580                                <#if archivePart.object.values.dataset?hasContent> 
581                                    <#assign archiveDataset = garance.getPicklistItemName(archivePart.object.values.dataset, "picklistDataset")> 
582                                </#if> 
583                                <li> 
584                                    <a class="tw:font-bold tw:transition-all tw:bg-linear-[currentcolor,currentcolor] tw:bg-no-repeat tw:bg-bottom-left tw:bg-size-[100%_0.0625rem] tw:hover:bg-size-[0_0.0625rem]" 
585                                       href="/l/${archivePart.object.objectEntryId}"><#if archivePart.object.values.cote?hasContent> ${archivePart.object.values.cote}</#if><#if archivePart.object.values.titleComplete?hasContent> [${archivePart.object.values.titleComplete}]</#if><#if archiveDataset?hasContent> (${archiveDataset})</#if></a> 
586                                </li> 
587                            </#list> 
588                        </ul> 
589                    </div> 
590                </div> 
591            </#if> 
592        </div> 
593        <#if showMedia> 
594            <#assign medias = []> 
595            <#if reproductionsVideos?hasContent> 
596                <#assign medias = medias + [{ 
597                "type": "video", 
598                "title": "Vidéos", 
599                "reproductions": reproductionsVideos 
600                }]> 
601            </#if> 
602            <#if reproductionsImages?hasContent> 
603                <#assign medias = medias + [{ 
604                "type": "image", 
605                "title": "Images", 
606                "reproductions": reproductionsImages 
607                }]> 
608            </#if> 
609            <#if bureautiques?hasContent> 
610                <#assign medias = medias + [{ 
611                "type": "fichier", 
612                "title": "Texte", 
613                "reproductions": bureautiques 
614                }]> 
615            </#if> 
616            <div id="ressources" class="js-summary-content" tabindex="-1"></div> 
617            <div class="page-wrapper tw:py-10"> 
618                <h2 id="ressources-tl" 
619                    class="tw:text-prim tw:mb-5">${summary["RessourcesMediaImage"]?hasContent?then(summary["RessourcesMediaImage"], "Ressources média")}</h2> 
620                <@garance.displayMedia data=medias /> 
621            </div> 
622        </#if> 
623 
624        <#if showCollection> 
625            <div id="collections" class="js-summary-content" tabindex="-1"></div> 
626            <div class="page-wrapper tw:py-10"> 
627                <h2 id="collections-tl" 
628                    class="tw:text-prim tw:mb-5">${summary["CollectionsLieesImage"]?hasContent?then(summary["CollectionsLieesImage"], "Collections liées")}</h2> 
629                <@garance.displayCollection relatedObjectsFull /> 
630            </div> 
631        </#if> 
632 
633    </div> 
634</div>