ajout de dev front

This commit is contained in:
2026-04-03 12:06:43 +02:00
parent bc6ad43ea5
commit 3f3f939267
47 changed files with 1302 additions and 188 deletions

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

510
app/pages/index copie 2.vue Normal file
View File

@@ -0,0 +1,510 @@
<template>
<div>
<!-- ================== -->
<!-- PROCHAIN CONCERTS -->
<!-- ================== -->
<!-- Fond noir -->
<PageSection tone="dark" content-size="default">
<SectionTitle tone="invert" pad="md">
CONCERTS À VENIR
</SectionTitle>
</PageSection>
<!-- Listes des prochains conncerts -->
<PageSection padded_size="md" content-size="default" class="remonter_concert_list">
<ConcertCardList>
<ConcertCard
v-for="c in concerts"
:key="c.id"
:id="c.slug_concert"
:title="c.titre_concert"
:lieu="c.representation_concert?.[0]?.lieu_representation?.nom_lieu"
:dateISO="c.representation_concert?.[0]?.date_debut_representation"
:dateLabel="formatDateLong(c.representation_concert?.[0]?.date_debut_representation)"
:description="c.resume_concert"
:imageUrl="c.image_illustration_concert?.url"
:imageAlt="c.image_illustration_concert?.alternativeText"
:href="`/concerts/concert-${c.slug_concert}?from=agenda`"
/>
</ConcertCardList>
</PageSection>
<PageSection tone="dark" padded_size="md" content-size="default" padb="xs" class="theme_tao photo_orchestre_wp remonter_bloc_dessous">
<SectionContent>
<SectionTitle tone="invert" pad="xs">
LORCHESTRE NATIONAL D'ÎLE-DE-FRANCE
</SectionTitle>
<DsMedia :src="orchestre_img" alt="L'Orchestre" class="photo_orchestre_img"/>
</SectionContent>
<SectionContent pad="xs" class="photo_orchestre_cta">
<DsButtonArrow to="/" variant="invert">
Découvrir les musiciens
</DsButtonArrow>
</SectionContent>
</PageSection>
<!-- ================== -->
<!-- PARTOUT ET POUR TOUS -->
<!-- ================== -->
<PageSection padded_size="md" class="theme_ppt_wp">
<SectionContent class="theme_ppt">
<!-- PHOTO DE L'ORCHETSRE -->
<DsMedia :src="orchestre_img" alt="L'Orchestre" class="theme_ppt--img"/>
<!-- PHOTO DE LA CARTE IDF -->
<!-- <DsMedia :src="ppt_img" alt="Carte Île-De-France" class="theme_ppt--img"/> -->
<!-- Avec couleur rouge par dessus -->
<!-- <SectionContent tone="brand_rouge45" pad="" class="theme_ppt--content"> -->
<!-- Sans couleur rouge par dessus -->
<SectionContent tone="" pad="" class="theme_ppt--content">
<SectionTitle tone="invert" pad="xs">
PARTOUT ET POUR TOUS
</SectionTitle>
<SectionContent pad="xs" class="theme_ppt--description">
<DsText tone="invert" size="lg" class="theme_ppt--txt" >
Les 95 musiciennes et musiciens proposent chaque saison plus de 120 concerts dans des salles et théâtres, des lieux culturels et des espaces atypiques de la région francilienne. Porté par une forte mission territoriale, lorchestre sengage à rendre la musique symphonique accessible à toutes et tous, en la faisant vivre au plus près des habitants grâce notamment à des actions culturelles, pédagogiques et participatives au cœur du territoire.
</DsText>
<!-- UN CTA / LIEN SUR L'IMAGE -->
<DsButtonArrow to="/" variant="invert">
Carte des événements
</DsButtonArrow>
</SectionContent>
</SectionContent>
</SectionContent>
</PageSection>
<!-- CARTES PARTOUT ET POUR TOUS -->
<PageSection padded_size="md" class="theme_ppt_wp">
<SectionContent class="theme_ppt">
<SquareCardBlocTextList >
</SquareCardBlocTextList>
</SectionContent>
</PageSection>
<!-- ================== -->
<!-- Tous à l'Orchestre -->
<!-- ================== -->
<PageSection tone="brandreverse" padded_size="md" content-size="default" padb="xs" class="theme_tao">
<SectionContent>
<SectionTitle tone="invert" pad="xs">
TOUS À LORCHESTRE
</SectionTitle>
<SectionContent pad="xs" class="theme_tao--description">
<DsText tone="invert" size="lg" class="theme_tao--txt" >
Phrase daccroche / explicative de cette rubrique par tous et pour tous
</DsText>
</SectionContent>
</SectionContent>
<!-- LES CARTES -->
<FilteredCards />
</PageSection>
<!-- ================== -->
<!-- ACTUALITÉS -->
<!-- ================== -->
<PageSection padded_size="md">
<SectionContent>
<SectionTitle tone="" pad="xs">
ACTUALITÉS
</SectionTitle>
</SectionContent>
<SquareCardBlocTextList >
<SquareCardBlocText
v-for="actuscard in actuscards"
:key="actuscard.id"
:id="actuscard.id"
:imgSrc="actuscard.imgSrc"
:imgAlt="actuscard.imgAlt"
:title="actuscard.title"
:description="actuscard.description"
:url="actuscard.url"
></SquareCardBlocText>
</SquareCardBlocTextList>
</PageSection>
<!-- ================== -->
<!-- ONDIF MAG -->
<!-- ================== -->
<PageSection padded_size="md" position="relative" overflow="hidden" class="theme_mag">
<div class="decoration--mag"><img src="/img/decoration/ellipse_mag.svg" alt=""></div>
<SectionContent>
<SectionTitle tone="" pad="xs">
ONDIF MAG
</SectionTitle>
<SectionContent pad="xs" class="theme_tao--description">
<DsText tone="" size="lg" class="theme_tao--txt" >
Le magazine en ligne de lOrchestre national dÎle-de-France vous invite à découvrir lactualité des concerts de lorchestre, des interprètes, des chefs et cheffes, de la création contemporaine et des projets de lONDIF sur le territoire francilien et au-delà. Portraits de musiciens, de compositeurs, dartistes invités, décryptages dœuvres, partez à la découverte de lactualité musicale !
</DsText>
</SectionContent>
</SectionContent>
<SectionContent pad="xs">
<TextCardLeftList >
<TextCardLeft
v-for="magcard in magcards"
:key="magcard.id"
:id="magcard.id"
:title="magcard.title"
:description="magcard.description"
:url="magcard.url"
></TextCardLeft>
</TextCardLeftList>
</SectionContent>
</PageSection>
<!-- ================== -->
<!-- L'ORCHESTRE POUR LES PROS -->
<!-- ================== -->
<PageSection padded_size="lg">
<SectionContent>
<SectionTitle tone="" pad="xs">
L'ORCHESTRE POUR LES PROS
</SectionTitle>
</SectionContent>
<SectionContent>
<BannierePros />
</SectionContent>
</PageSection>
</div>
</template>
<script setup>
import { onMounted, computed } from 'vue'
const runtimeConfig = useRuntimeConfig()
const config = useAppConfig()
import { clientLog } from '~/utils/clientLog'
import { formatDateLong } from "@/utils/dateFormat.js"
import SectionContent from '../components/section/SectionContent.vue'
import DsHeading from '@root/design-system/primitives/DsHeading.vue'
import DsText from '@root/design-system/primitives/DsText.vue'
import DsMedia from '@root/design-system/primitives/DsMedia.vue'
import DsButton from '@root/design-system/primitives/DsButton.vue'
import DsButtonArrow from '@root/design-system/primitives/DsButtonArrow.vue'
import orchestre_img from '@/assets/img/illustrations/orchestre_1.jpg'
import ppt_img from '@/assets/img/illustrations/map_idf.jpg'
import DsCard from '@root/design-system/components/DsCard.vue'
// Layout utilisé
definePageMeta({ layout: 'default' })
const STRAPI_URL = runtimeConfig.public.strapiUrl
// Config app (pour SEO)
useSeoMeta({
title: config.title
})
console.log("Bienvenue : ",config.title)
//--------------------
// DONNÉES POUR LES CONCERTS À VENIR …
//--------------------
const { concerts, refresh } = useConcerts({
locale: "fr-FR",
populate: {
saison_concert: true,
image_illustration_concert: true,
representation_concert: { lieu_representation: true },
},
filters: {
saison_concert: {
nom_saison: {
$eq: String(runtimeConfig.public.saison),
},
},
},
upcomingOnly: true,
limit: 3,
})
onMounted(() => {
if (!concerts.value?.length) {
refresh()
}
})
//--------------------
// DONNÉES POUR LES ACTUS
//--------------------
const actuscards = ref([
{
id: '1',
imgSrc: '/contenus/actu1_1.jpg',
imgAlt: 'Les prochains concours',
title: "Les prochains concours",
description: `Inscrivez-vous aux auditions de l'Orchestre national d'Île-de-France.
Un nombre maximum de caractère sera défini pour le texte qui figure dans la description de lactu sur la page daccueil.`,
url:"#",
},
{
id: '2',
imgSrc: '/contenus/actu1_1.jpg',
imgAlt: 'Du sur-mesure pour les petites oreilles',
title: "Du sur-mesure pour les petites oreilles",
description: `Les ateliers 0-3 ans sont de retour !`,
url:"#",
},
{
id: '3',
imgSrc: '/contenus/actu1_1.jpg',
imgAlt: "Académie d'Orchestre 2026",
title: "Académie d'Orchestre 2026",
description: `Les ateliers 0-3 ans sont de retour !`,
url:"#",
},
{
id: '4',
imgSrc: '/contenus/actu1_1.jpg',
imgAlt: "Pablo González, nouveau directeur musical pour la saison 27.28",
title: "Pablo González, nouveau directeur musical pour la saison 27.28",
description: ``,
url:"#",
},
])
//--------------------
// DONNÉES POUR ONDIF MAG
//--------------------
const magcards = ref([
{
id: '1',
title: "LA FANTASTIQUE DE BERLIOZ",
description: `Lauteur suppose quun jeune musicien, affecté de cette maladie morale quun écrivain célèbre appelle le vague des passions, voit pour la première fois une femme qui réunit tous les charmes de lêtre idéal que rêvait son imagination...`,
url:"#",
},
{
id: '2',
title: "LITALIE BAROQUE, BERCEAU DU CONCERTO",
description: `Cest dans lItalie baroque du début du XVIIe siècle que naît le Stile Concertato (style concertant), et plus précisément à Venise, autour des grands maîtres qui ont œuvré à la basilique Saint-Marc, comme les Gabrieli.`,
url:"#",
},
{
id: '3',
title: "BEETHOVEN : LA SYMPHONIE N°4, CHEF-DOEUVRE À LA FOIS CLASSIQUE ET ROMANTIQUE",
description: `Avant la première exécution publique de lœuvre au Theater an der Wien, la partition de la Quatrième symphonie de Beethoven avait dabord été créée dans le palais du prince Lobkowitz en mars 1807.`,
url:"#",
},
])
</script>
<style lang="scss">
.remonter_concert_list {
transform: translateY(-170px);
}
.remonter_bloc_dessous {
// parce que le bloc du dessus à un transform: translateY(-170px); alors cela laisse un espace vide que l'on comble avec ce margin-top négatif
margin-top: -170px;
}
.photo_orchestre_wp {
.photo_orchestre_img {
.page-section--inner--default {
max-width: calc(+500px)
}
img {
border-radius: 50px;
max-height: 660px;
}
}
.photo_orchestre_cta {
padding-top: 20px;
}
}
//========================
// PARTOUT ET POUR TOUS
//========================
.theme_ppt_wp {
margin-bottom: 50px;
}
.theme_ppt {
display: grid;
&--img {
grid-row: 1;
grid-column: 1;
max-height: 400px;
}
&--content {
grid-row: 1;
grid-column: 1;
display: grid;
align-items: center;
}
&--description {
max-width: 800px;
align-self: self-start;
// margin-top: 35px;
}
&--txt {
margin-bottom: 35px;
}
}
//========================
// TOUS A L'ORCHESTRE
//========================
.theme_tao {
margin-bottom: 50px;
&--description {
max-width: 800px;
}
&--txt {
margin-bottom: 35px;
}
&--filters {
display: flex;
flex-wrap: wrap;
column-gap: 10px;
row-gap: 14px;
}
&--cardlist {
margin-top: 20px;
&--card {
background-color: var(--c-surface);
border-radius: 10px;
//padding: 50px;
padding: clamp(18px, 2.4vw, 32px);
&--wp {
display: flex;
flex-direction: column;
align-items: center;
}
&--img {
max-width: 280px;
overflow: hidden;
img {
max-height: 280px;
}
@media (min-width: 400px) {
img {
max-height: 350px;
}
}
}
&--content {
max-width: 320px;
padding-top: 20px;
}
}
&--card {
/* base: mobile-first */
width: clamp(260px, 81vw, 360px);
}
@media (min-width: 400px) {
&--card {
width: clamp(260px, 80vw, 360px);
}
}
@media (min-width: 500px) {
&--card {
width: clamp(280px, 63vw, 460px);
}
}
@media (min-width: 700px) {
&--card {
width: clamp(280px, 60vw, 460px);
}
}
@media (min-width: 1024px) {
&--card {
width: clamp(320px, 33vw, 520px);
}
}
@media (min-width: 1440px) {
&--card {
width: clamp(360px, 28vw, 560px);
}
}
}
}
//========================
// MAGAZINE
//========================
.theme_mag {
@media (max-width: 499px) {
min-height: 650px;
}
@media (min-width: 500px) {
min-height: 650px;
}
@media (min-width: 700px) {
min-height: 650px;
}
@media (min-width: 900px) {
min-height: 650px;
}
@media (min-width: 1100px) {
min-height: 650px;
}
@media (min-width: 1300px) {
min-height: 650px;
}
@media (min-width: 1500px) {
min-height: 650px;
}
.decoration--mag {
position: absolute;
top: -20px;
@media (max-width: 499px) {
right: -150px;
}
@media (min-width: 500px) {
right: -120px;
}
@media (min-width: 700px) {
right: -100px;
}
@media (min-width: 900px) {
right: -100px;
}
@media (min-width: 1100px) {
right: -140px;
}
@media (min-width: 1300px) {
right: -100px;
}
@media (min-width: 1500px) {
right: -50px;
}
img {
height: 600px;
}
}
}
</style>

View File

@@ -78,7 +78,7 @@
console.log("test 3 : ",appConfig.title) // "Mon site Nuxt"
</script>
<style>
<style lang="scss">
</style>

View File

@@ -32,39 +32,23 @@
</PageSection>
<PageSection tone="dark" padded_size="md" content-size="default" padb="xs" class="theme_tao photo_orchestre_wp remonter_bloc_dessous">
<SectionContent>
<SectionTitle tone="invert" pad="xs">
LORCHESTRE NATIONAL D'ÎLE-DE-FRANCE
</SectionTitle>
<DsMedia :src="orchestre_img" alt="L'Orchestre" class="photo_orchestre_img"/>
</SectionContent>
<SectionContent pad="xs" class="photo_orchestre_cta">
<DsButtonArrow to="/" variant="invert">
Découvrir les musiciens
</DsButtonArrow>
</SectionContent>
</PageSection>
<!-- ================== -->
<!-- PARTOUT ET POUR TOUS -->
<!-- ================== -->
<PageSection padded_size="md" class="theme_ppt_wp">
<PageSection padded_size="md" class="theme_ppt_wp remonter_bloc_dessous">
<SectionContent class="theme_ppt">
<!-- PHOTO DE L'ORCHETSRE -->
<!-- <DsMedia :src="orchestre_img" alt="L'Orchestre" class="theme_ppt--img"/> -->
<DsMedia :src="orchestre_img" alt="L'Orchestre" class="theme_ppt--img"/>
<!-- PHOTO DE LA CARTE IDF -->
<DsMedia :src="ppt_img" alt="Carte Île-De-France" class="theme_ppt--img"/>
<!-- <DsMedia :src="ppt_img" alt="Carte Île-De-France" class="theme_ppt--img"/> -->
<!-- Avec couleur rouge par dessus -->
<SectionContent tone="brand_rouge45" pad="" class="theme_ppt--content">
<!-- <SectionContent tone="brand_rouge45" pad="" class="theme_ppt--content"> -->
<!-- Sans couleur rouge par dessus -->
<!-- <SectionContent tone="" pad="" class="theme_ppt--content"> -->
<SectionContent tone="" pad="" class="theme_ppt--content">
<SectionTitle tone="invert" pad="xs">
PARTOUT ET POUR TOUS
LA MUSIQUE PARTOUT ET POUR TOUS
</SectionTitle>
<SectionContent pad="xs" class="theme_ppt--description">
<DsText tone="invert" size="lg" class="theme_ppt--txt" >
@@ -342,10 +326,18 @@
grid-row: 1;
grid-column: 1;
max-height: 400px;
position: relative;
z-index: 1;
img {
filter: brightness(0.7);
}
}
&--content {
grid-row: 1;
grid-column: 1;
position: relative;
z-index: 2;
display: grid;
align-items: center;

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -0,0 +1,13 @@
<template>
<div>
Chantons avec l'Orchestre : En cours de construction
</div>
</template>
<script setup>
</script>
<style lang="scss">
</style>

View File

@@ -1,13 +1,13 @@
<template>
<div>
Partenariat Grandes Écoles : En cours de construction
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -1,13 +1,144 @@
<template>
<div>
<div class="scolaire--page">
<!-- ================== -->
<!-- FILS D'ARIANE -->
<!-- ================== -->
<PageSection tone="" content-size="default" class="breadcrum_wp">
<Breadcrumb/>
</PageSection>
<!-- ================== -->
<!-- EN-TêTE -->
<!-- ================== -->
<section class="fiche_header_wp">
<div class="fiche_header_wp_gauche"></div>
<div class="fiche_header_inner">
<div class="fiche_header_titres">
<div>
<DsHeading as="h1" tone="default" textcase="uppercase" class="concert-card__title">
ACTIONS CULTURELLES POUR LES SCOLAIRES
</DsHeading>
</div>
<DsText as="p" align="justify">
Ici un texte pour décrire ou faire un chapeau pour cette page scolaires. Ici un texte pour décrire ou faire un chapeau pour cette page scolaires. Ici un texte pour décrire ou faire un chapeau pour cette page scolaires.
</DsText>
</div>
<div class="fiche_header_img">
<DsMedia
v-if="missions?.image_illustration_header?.url"
:src="missions.image_illustration_header.url"
:alt="missions.image_illustration_header.alternativeText || ''"
fit="cover"
ratio="square"
/>
<div v-else class="img_placeholder" aria-hidden="true" />
</div>
</div>
<div class="fiche_header_wp_droite"></div>
</section>
<!-- ================== -->
<!-- CHIFFRES -->
<!-- ================== -->
<PageSection tone="" content-size="default" padded_size="md" class="chiffres_wp">
<Chiffres />
</PageSection>
<!-- ================== -->
<!-- decalage_gauche 1 -->
<!-- ================== -->
<PageSection :content="false">
<Decalage tone="dark" title-tone="invert" position="left" button-tone="invert" ensavoirplus-target="texte_cache" ensavoirplus-group="scolaires-details">
<template #title>
Lycées - Tous à l'Orchestre !
</template>
<DsText as="p" tone="invert" align="justify">
Découvrir lunivers de lorchestre, entrer dans la peau dun professionnel du spectacle, organisez avec vos élèves un concert au sein de votre établissement, sont autant d'apprentissage que l'Orchestre amènent auprès des jeunes lycéens en devenir.
</DsText>
</Decalage>
</PageSection>
<PageSection id="texte_cache" data-ensavoirplus-group="scolaires-details" tone="" content-size="default" padded_size="md" class="fiche_description decalage_ensavoirplus--hidden">
<SectionContent class="description_wp">
<div class="strapi-blocks">
<!-- Paragraph -->
<!-- Heading -->
<h1 class="strapi-blocks__h">La programmation de lOrchestre : richesse et diversité</h1>
<!-- Paragraph -->
<p class="strapi-blocks--p">LOrchestre explore 4 siècles de musique.</p>
<!-- Paragraph -->
<p class="strapi-blocks--p">Musique baroque ou contemporaine, classique ou romantique, nos musiciens, nos solistes et plusieurs chefs de renommée internationale interprètent une grande diversité de chefs-dœuvre musicaux.</p>
<!-- Paragraph -->
<p class="strapi-blocks--p">Avide déchanges et de partages, notre formation se produit aussi dans de hauts lieux de la musique et des festivals internationaux comme le festival Enescu à Bucarest, le festival Haydn à Vienne ou le festival Berlioz en Isère.</p>
<!-- Paragraph --><!-- Heading -->
<h1 class="strapi-blocks__h">Musique classique, culture et éducation</h1>
<!-- Paragraph -->
<p class="strapi-blocks--p">Au-delà des concerts de sa programmation, lOrchestre national dÎle-de-France mène également de nombreuses actions éducatives et culturelles pour faire découvrir la musique classique au plus grand nombre.</p>
<!-- Paragraph -->
<p class="strapi-blocks--p">Rencontre avec les artistes, ateliers de pratique musicale et artistique, concerts éducatifs, spectacles musicaux, concerts participatifs, chacune de nos initiatives place le public au cœur de notre projet artistique !</p>
</div>
</SectionContent>
</PageSection>
<!-- ================== -->
<!-- decalage_droite_2 -->
<!-- ================== -->
<PageSection :content="false">
<Decalage tone="brandreverse" title-tone="invert" position="right" button-tone="invert" ensavoirplus-target="texte_cache_2" ensavoirplus-group="scolaires-details">
<template #title>
Collège
</template>
<DsText as="p" align="justify">
Développer une écoute active, acquérir le vocabulaire spécifique, mettre en perspective la musique quils écoutent et la musique symphonique sont des objectifs des sessions organisées pour les collégiens.
</DsText>
</Decalage>
</PageSection>
<PageSection id="texte_cache_2" data-ensavoirplus-group="scolaires-details" tone="" content-size="default" padded_size="md" class="fiche_description decalage_ensavoirplus--hidden">
<SectionContent class="description_wp">
<div class="strapi-blocks">
<!-- Paragraph -->
<!-- Heading -->
<h1 class="strapi-blocks__h">La programmation de lOrchestre : richesse et diversité</h1>
<!-- Paragraph -->
<p class="strapi-blocks--p">LOrchestre explore 4 siècles de musique.</p>
<!-- Paragraph -->
<p class="strapi-blocks--p">Musique baroque ou contemporaine, classique ou romantique, nos musiciens, nos solistes et plusieurs chefs de renommée internationale interprètent une grande diversité de chefs-dœuvre musicaux.</p>
<!-- Paragraph -->
<p class="strapi-blocks--p">Avide déchanges et de partages, notre formation se produit aussi dans de hauts lieux de la musique et des festivals internationaux comme le festival Enescu à Bucarest, le festival Haydn à Vienne ou le festival Berlioz en Isère.</p>
<!-- Paragraph --><!-- Heading -->
<h1 class="strapi-blocks__h">Musique classique, culture et éducation</h1>
<!-- Paragraph -->
<p class="strapi-blocks--p">Au-delà des concerts de sa programmation, lOrchestre national dÎle-de-France mène également de nombreuses actions éducatives et culturelles pour faire découvrir la musique classique au plus grand nombre.</p>
<!-- Paragraph -->
<p class="strapi-blocks--p">Rencontre avec les artistes, ateliers de pratique musicale et artistique, concerts éducatifs, spectacles musicaux, concerts participatifs, chacune de nos initiatives place le public au cœur de notre projet artistique !</p>
</div>
</SectionContent>
</PageSection>
</div>
</template>
<script lang="ts" setup>
<script setup>
import DsHeading from '@root/design-system/primitives/DsHeading.vue'
import DsText from '@root/design-system/primitives/DsText.vue'
import DsMedia from '@root/design-system/primitives/DsMedia.vue'
</script>
<style>
<style lang="scss">
// =======================
// SPÉCIFIQUE À CETTE PAGE
// =======================
.scolaire--page {
.chiffres_wp {
background-color: var(--c-background-jaune);
margin-bottom: 50px;
}
}
</style>
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -653,7 +653,7 @@
padding-left: 10px;
padding-right: 10px;
> * {
max-width: 570px;
max-width: 640px;
display: flex;
flex-direction: column;
}

View File

@@ -651,7 +651,7 @@
padding-left: 10px;
padding-right: 10px;
> * {
max-width: 570px;
max-width: 640px;
display: flex;
flex-direction: column;
}

View File

@@ -9,7 +9,6 @@
LES ARTISTES INVITÉS
</SectionTitle>
<DsHeading as="h3" tone="invert">
La patte de lOrchestre national dÎle-de-France, cest aussi la richesse de ses collaborations artistiques
</DsHeading>
</SectionContent>
@@ -237,16 +236,16 @@
.theme_bandeau--grid {
> .page-section--inner {
padding-top: 70px;
padding-bottom: 150px;
padding-bottom: 90px;
display: flex;
flex-wrap: wrap;
column-gap: 120px;
row-gap: 30px;
row-gap: 0px;
}
&--left {
max-width: 40%;
h1 {
padding-bottom: 20px;
padding-bottom: 0px;
}
}
&--right {

View File

@@ -8,6 +8,6 @@
</script>
<style>
<style lang="scss">
</style>

View File

@@ -8,6 +8,6 @@
</script>
<style>
<style lang="scss">
</style>

View File

@@ -1,5 +1,5 @@
<template>
<div>
<div class="missions--page">
<!-- ================== -->
<!-- FILS D'ARIANE -->
<!-- ================== -->
@@ -30,7 +30,7 @@
v-if="missions?.image_illustration_header?.url"
:src="missions.image_illustration_header.url"
:alt="missions.image_illustration_header.alternativeText || ''"
fit="contain"
fit="cover"
ratio="square"
/>
@@ -51,6 +51,15 @@
</SectionContent>
</PageSection>
<!-- ================== -->
<!-- CHIFFRES -->
<!-- ================== -->
<PageSection tone="" content-size="default" padded_size="md" class="chiffres_wp">
<Chiffres />
</PageSection>
<!-- ================== -->
<!-- decalage_gauche 1 -->
<!-- ================== -->
@@ -229,7 +238,6 @@
}
}
.fiche_header_wp_gauche_carre {
@media (min-width: 0px) and (max-width: 600px) {
display: none;
}
@@ -239,7 +247,6 @@
}
}
.fiche_header_wp_droite {
@media (min-width: 0px) and (max-width: 600px) {
display: none;
}
@@ -331,7 +338,6 @@
}
.fiche_header_titres {
@media (min-width: 0px) and (max-width: 600px) {
grid-column: 1;
grid-row: 1;
@@ -395,7 +401,6 @@
}
.fiche_header_img {
@media (min-width: 0px) and (max-width: 600px) {
grid-column: 1 / 4;
grid-row: 2 / 3;
@@ -415,7 +420,6 @@
}
.fiche_header_infos {
@media (min-width: 0px) and (max-width: 600px) {
grid-column: 1 / 2;
grid-row: 4;
@@ -443,7 +447,6 @@
}
}
.fiche_header_bandeau {
@media (min-width: 0px) and (max-width: 600px) {
grid-column: 1 / 3;
grid-row: 4;
@@ -457,18 +460,27 @@
}
.fiche_description > * {
max-width: 570px;
max-width: 640px;
display: flex;
flex-direction: column;
}
.fiche_description {
.page-section--inner {
@media (max-width: 599px) {
padding-left: 10px;
padding-right: 10px;
padding-left: 10px;
padding-right: 10px;
}
}
}
// =======================
// SPÉCIFIQUE À CETTE PAGE
// =======================
.missions--page {
.chiffres_wp {
background-color: #31ae13c2;
margin-bottom: 50px;
}
}
</style>

View File

@@ -0,0 +1,320 @@
<template>
<div>
<!-- ================== -->
<!-- Fond noir -->
<!-- ================== -->
<PageSection tone="dark" content-size="default" class="theme_bandeau--grid">
<SectionContent pad="xs" class="theme_bandeau--grid--left">
<SectionTitle tone="invert" pad="">
LES MUSICIENS
</SectionTitle>
<DsHeading as="h3" tone="invert">
</DsHeading>
</SectionContent>
<SectionContent pad="xs" class="theme_bandeau--grid--right">
<DsText tone="invert" size="lg" class="theme_bandeau--grid--right--text" >
Les 95 musiciennes et musiciens proposent chaque saison plus de 120 concerts dans des salles et théâtres, des lieux culturels et des espaces atypiques de la région francilienne.
</DsText>
</SectionContent>
</PageSection>
<!-- ================== -->
<!-- Listes des musiciens -->
<!-- ================== -->
<!-- ================== -->
<!-- DIRECTION -->
<!-- ================== -->
<PageSection padded_size="md" content-size="default" class="musiciens_list_section remonter_artistes_list">
<section v-if="pending" aria-busy="true" aria-live="polite">
<DsText as="p" tone="default">Chargement des artistes...</DsText>
</section>
<section v-else-if="error">
<DsText as="p" tone="default">Impossible de charger les artistes.</DsText>
</section>
<section v-else-if="artistesDirection.length" class="musiciens_list">
<article v-for="a in artistesDirection" :key="a.id" class="musicien_card">
<DsMedia
v-if="a.image?.url"
:src="a.image.url"
:alt="a.image.alternativeText || a.nom_artiste_ondif || ''"
ratio="square"
/>
<div v-else class="musicien_card_media-placeholder" aria-hidden="true" />
<DsHeading as="h4" tone="default" class="musicien_card_nom">
<NuxtLink :to="`/orchestre/artiste-${a.slug_artiste_ondif}?from=musiciens`">
{{ a.nom_artiste_ondif }}
</NuxtLink>
</DsHeading>
<DsText
v-if="a.postesLabel"
as="p"
tone="default"
size="md"
class="musicien_card_postes"
>
{{ a.postesLabel }}
</DsText>
</article>
</section>
<section v-else>
<DsText as="p" tone="default">Aucun artiste pour la direction.</DsText>
</section>
</PageSection>
<!-- ================== -->
<!-- MUSICIENS -->
<!-- ================== -->
<PageSection padded_size="md" content-size="default" class="musiciens_list_section musiciens_list_wp">
<section v-if="pending" aria-busy="true" aria-live="polite">
<DsText as="p" tone="default">Chargement des artistes...</DsText>
</section>
<section v-else-if="error">
<DsText as="p" tone="default">Impossible de charger les artistes.</DsText>
</section>
<section v-else-if="artistesAutres.length" class="musiciens_list">
<article v-for="a in artistesAutres" :key="a.id" class="musicien_card">
<DsMedia
v-if="a.image?.url"
:src="a.image.url"
:alt="a.image.alternativeText || a.nom_artiste_ondif || ''"
ratio="square"
/>
<div v-else class="musicien_card_media-placeholder" aria-hidden="true" />
<DsHeading as="h4" tone="default" class="musicien_card_nom">
<NuxtLink :to="`/orchestre/artiste-${a.slug_artiste_ondif}?from=musiciens`">
{{ a.nom_artiste_ondif }}
</NuxtLink>
</DsHeading>
<DsText
v-if="a.postesLabel"
as="p"
tone="default"
size="md"
class="musicien_card_postes"
>
{{ a.postesLabel }}
</DsText>
</article>
</section>
<section v-else>
<DsText as="p" tone="default">Aucun autre artiste trouvé.</DsText>
</section>
</PageSection>
</div>
</template>
<script setup>
import DsHeading from '@root/design-system/primitives/DsHeading.vue'
import DsText from '@root/design-system/primitives/DsText.vue'
import DsMedia from '@root/design-system/primitives/DsMedia.vue'
const runtimeConfig = useRuntimeConfig()
const saisonFiltre = computed(() => String(runtimeConfig.public.saison || '').trim())
const artistesFilters = computed(() => {
if (!saisonFiltre.value) return null
return {
saisons_artiste_ondif: {
nom_saison: {
$eq: saisonFiltre.value,
},
},
}
})
//--------------------
// DONNÉES POUR LES ARTISTES
//--------------------
const { items: artistes, pending, error } = useStrapi(
"/api/__strapi__/artistes",
{
locale: "fr-FR",
sort: "ordre_artiste_ondif:asc",
populate: {
saisons_artiste_ondif: true,
image_illustration_artiste_ondif: true,
postes_artiste_ondif: true,
},
filters: artistesFilters,
}
)
const artistesDisplay = computed(() => {
return (artistes.value || []).map((artiste) => ({
...artiste,
image: getArtisteImage(artiste),
postesLabel: getPostesLabel(artiste),
}))
})
const postesDirection = [
"direction",
"cheffe assistante",
"chef assistante",
]
const artistesDirection = computed(() =>
artistesDisplay.value.filter((a) => isDirectionArtist(a))
)
const artistesAutres = computed(() =>
artistesDisplay.value.filter((a) => !isDirectionArtist(a))
)
function getArtisteImage(artiste) {
const media = artiste?.image_illustration_artiste_ondif
const rows = extractStrapiList(media)
if (rows.length) return rows[0]
if (media && typeof media === "object" && media.url) return media
return null
}
function getPostesLabel(artiste) {
const postes = extractStrapiList(artiste?.postes_artiste_ondif)
return postes
.map((p) => p?.nom_poste)
.filter(Boolean)
.join(", ")
}
function isDirectionArtist(artiste) {
const postes = extractStrapiList(artiste?.postes_artiste_ondif)
.map((p) => String(p?.nom_poste || "").trim().toLowerCase())
.filter(Boolean)
return postes.some((poste) => postesDirection.includes(poste))
}
function extractStrapiList(value) {
if (!value) return []
if (Array.isArray(value)) return value.map(normalizeStrapiItem).filter(Boolean)
if (value?.data) {
const rows = Array.isArray(value.data) ? value.data : [value.data]
return rows.map(normalizeStrapiItem).filter(Boolean)
}
if (typeof value === "object") return [normalizeStrapiItem(value)].filter(Boolean)
return []
}
function normalizeStrapiItem(item) {
if (!item || typeof item !== "object") return null
if (item.attributes && typeof item.attributes === "object") {
return { id: item.id, ...item.attributes }
}
return item
}
</script>
<style lang="scss">
.remonter_artistes_list {
transform: translateY(-90px);
}
.theme_bandeau--grid {
> .page-section--inner {
padding-top: 70px;
padding-bottom: 90px;
display: flex;
flex-wrap: wrap;
column-gap: 120px;
row-gap: 30px;
}
&--left {
max-width: 40%;
h1 {
padding-bottom: 20px;
}
}
&--right {
max-width: 60%;
&--text {
max-width: 500px;
}
}
}
.musiciens_list_wp {
// parce que le bloc du dessus à un transform: translateY(-170px); alors cela laisse un espace vide que l'on comble avec ce margin-top négatif
margin-top: -120px;
}
.musiciens_list {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 28px;
}
.musicien_card {
display: flex;
flex-direction: column;
gap: 10px;
}
.musicien_card_media-placeholder {
width: 100%;
aspect-ratio: 1 / 1;
background: rgba(0, 0, 0, 0.04);
}
.musicien_card_nom {
margin-top: 8px;
margin-left: 5px;
&:hover {
color: var(--c-brand_rouge);
}
}
.musicien_card_postes {
margin-left: 5px;
text-transform: lowercase;
&::first-letter {
text-transform: uppercase;
}
}
@media (max-width: 980px) {
.musiciens_list {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 400px) {
.musiciens_list {
grid-template-columns: 1fr;
padding-left: 5px;
padding-right: 5px;
}
}
@media (max-width: 600px) {
.musiciens_list {
padding-left: 5px;
padding-right: 5px;
}
}
</style>

View File

@@ -3,20 +3,20 @@
<!-- ================== -->
<!-- Fond noir -->
<!-- ================== -->
<PageSection tone="bleu" content-size="default" class="theme_bandeau--grid">
<PageSection tone="dark" content-size="default" class="theme_bandeau--grid">
<SectionContent pad="xs" class="theme_bandeau--grid--left">
<SectionTitle tone="invert" pad="">
LES MUSICIENS
</SectionTitle>
<DsHeading as="h3" tone="invert">
95 musiciens engagés Partout et pour tous en Île-de-France !
</DsHeading>
</SectionContent>
<SectionContent pad="xs" class="theme_bandeau--grid--right">
<DsText tone="invert" size="lg" class="theme_bandeau--grid--right--text" >
Les 95 musiciennes et musiciens proposent chaque saison plus de 120 concerts dans des salles et théâtres, des lieux culturels et des espaces atypiques de la région francilienne. Porté par une forte mission territoriale, lorchestre sengage à rendre la musique symphonique accessible à toutes et tous, en la faisant vivre au plus près des habitants grâce notamment à des actions culturelles, pédagogiques et participatives au cœur du territoire.
Les 95 musiciennes et musiciens proposent chaque saison plus de 120 concerts dans des salles et théâtres, des lieux culturels et des espaces atypiques de la région francilienne.
</DsText>
</SectionContent>
</PageSection>
@@ -66,6 +66,33 @@
{{ a.postesLabel }}
</DsText>
</article>
<!-- ICI ON MET À LA SUITE LES MUSICIENS DE L'ORCHESTRE -->
<article v-for="a in artistesAutres" :key="a.id" class="musicien_card">
<DsMedia
v-if="a.image?.url"
:src="a.image.url"
:alt="a.image.alternativeText || a.nom_artiste_ondif || ''"
ratio="square"
/>
<div v-else class="musicien_card_media-placeholder" aria-hidden="true" />
<DsHeading as="h4" tone="default" class="musicien_card_nom">
<NuxtLink :to="`/orchestre/artiste-${a.slug_artiste_ondif}?from=musiciens`">
{{ a.nom_artiste_ondif }}
</NuxtLink>
</DsHeading>
<DsText
v-if="a.postesLabel"
as="p"
tone="default"
size="md"
class="musicien_card_postes"
>
{{ a.postesLabel }}
</DsText>
</article>
</section>
<section v-else>
@@ -237,16 +264,16 @@
.theme_bandeau--grid {
> .page-section--inner {
padding-top: 70px;
padding-bottom: 150px;
padding-bottom: 90px;
display: flex;
flex-wrap: wrap;
column-gap: 120px;
row-gap: 30px;
row-gap: 0px;
}
&--left {
max-width: 40%;
h1 {
padding-bottom: 20px;
padding-bottom: 0px;
}
}
&--right {

View File

@@ -8,6 +8,6 @@
</script>
<style>
<style lang="scss">
</style>

View File

@@ -8,6 +8,6 @@
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>

View File

@@ -4,10 +4,10 @@
</div>
</template>
<script lang="ts" setup>
<script setup>
</script>
<style>
<style lang="scss">
</style>