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)> (Présumé)</#if><#if auteur.type?hasContent> (${auteur.type})</#if><#if !auteur?isLast> ; </#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)> (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)> (Présumé)</#if><#if auteur.type?hasContent> (${auteur.type})</#if><#if !auteur?isLast> ; </#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)> (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)> (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>