diff --git a/README.md b/README.md
index c844dca..7ed3abd 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,7 @@ git push origin main
cd /var/www/wondif_vue
git pull origin main # récupère le dernier code
-npm ci # installe / met à jour les dépendances
+npm ci # installe / met à jour les dépendances (à exécuter uniquement si nouvelle dépendances installées dans package json)
npm run build # rebuild Nuxt
pm2 restart wondif_vue # redémarre le process
@@ -163,6 +163,22 @@ Array.from(document.querySelectorAll('body > *')).forEach(el => {
}
}
+01_siick_smol_girlfriend_5m50.mp3
+02_siick_lunar_blast 213_5m13.wav
+03_siick_crystal_cavern_5m24.wav
+
+
+01_leon_romanens_8m49_stereo.wav
+02_marie_pierre_8m57_stereo.wav
+03_siick_7m23_stereo.wav
+04_celine_espuna_4m34_stereo.wav
+06_walid_nouh_6m44_stereo.wav
+08_codimp_7m43_stereo.wav
+05_adrien_bourmault_7m53_stereo.wav
+07_rafael_muniz_3m15_stereo.wav
+
+
+
debian@vps-48ebe2d9:~$ history
1 sudo nano ~/.bashrc
2 exit
diff --git a/app/assets/scss/base/_img.scss b/app/assets/scss/base/_img.scss
index d29c3c3..32e0438 100644
--- a/app/assets/scss/base/_img.scss
+++ b/app/assets/scss/base/_img.scss
@@ -13,4 +13,10 @@
margin: 0;
object-fit: cover;
//filter: contrast(0.8);
+}
+
+.img_placeholder {
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.04);
}
\ No newline at end of file
diff --git a/app/components/header/HeaderNav.vue b/app/components/header/HeaderNav.vue
index ab69f46..d9f7067 100644
--- a/app/components/header/HeaderNav.vue
+++ b/app/components/header/HeaderNav.vue
@@ -38,7 +38,7 @@
-
+
@@ -166,7 +166,7 @@
-
+
diff --git a/app/components/section/PageSection.vue b/app/components/section/PageSection.vue
index adfdcc4..a6d9b2c 100644
--- a/app/components/section/PageSection.vue
+++ b/app/components/section/PageSection.vue
@@ -56,6 +56,7 @@
&--brand { background: var(--c-brand_rouge);}
&--dark { background: var(--c-backgroud-black); }
&--brandreverse { background: var(--c-backgroud-brandreverse); }
+ &--jaune { background: var(--c-background-jaune); }
// padding en haut et en bas
&--padded {
diff --git a/app/composables/useArtistesInvitees.js b/app/composables/useArtistesInvitees.js
new file mode 100644
index 0000000..41b955d
--- /dev/null
+++ b/app/composables/useArtistesInvitees.js
@@ -0,0 +1,96 @@
+export function useArtistesInvitees(options = {}) {
+ const queryString = computed(() => {
+ const locale = unref(options.locale) ?? "fr-FR"
+ const sort = unref(options.sort) ?? null
+ const populate = unref(options.populate) ?? null
+ const filters = unref(options.filters) ?? null
+
+ const query = new URLSearchParams()
+ query.set("locale", locale)
+ if (sort) {
+ query.set("sort[0]", sort)
+ }
+ if (populate && typeof populate === "object") {
+ appendPopulate(query, populate)
+ }
+ if (filters && typeof filters === "object") {
+ appendFilters(query, filters)
+ }
+
+ return query.toString()
+ })
+
+ const { data, pending, error, refresh } = useFetch(
+ () => `/api/__strapi__/artistesinvitees?${queryString.value}`,
+ {
+ server: true,
+ key: () => `artistesinvitees:${queryString.value}`,
+ watch: [queryString],
+ }
+ )
+
+ const artistesinvitees = computed(() => {
+ let list = (data.value?.data || []).map(normalizeArtiste)
+
+ const limit = unref(options.limit)
+ if (typeof limit === "number") {
+ list = list.slice(0, Math.max(0, limit))
+ }
+
+ return list
+ })
+
+ return {
+ artistesinvitees,
+ concerts: artistesinvitees,
+ pending,
+ error,
+ refresh,
+ }
+}
+
+function appendPopulate(query, populate, prefix = "populate") {
+ Object.entries(populate).forEach(([key, value]) => {
+ if (value === true) {
+ query.set(`${prefix}[${key}]`, "true")
+ return
+ }
+ if (value && typeof value === "object") {
+ const entries = Object.entries(value)
+ const allTrue = entries.length > 0 && entries.every(([, v]) => v === true)
+ if (allTrue) {
+ const list = entries.map(([k]) => k).join(",")
+ query.set(`${prefix}[${key}][populate]`, list)
+ return
+ }
+ appendPopulate(query, value, `${prefix}[${key}][populate]`)
+ }
+ })
+}
+
+function appendFilters(query, filters, prefix = "filters") {
+ Object.entries(filters).forEach(([key, value]) => {
+ if (value === null || value === undefined) return
+ if (typeof value !== "object") {
+ query.set(`${prefix}[${key}]`, String(value))
+ return
+ }
+ Object.entries(value).forEach(([k, v]) => {
+ if (v === null || v === undefined) return
+ if (typeof v !== "object") {
+ query.set(`${prefix}[${key}][${k}]`, String(v))
+ return
+ }
+ appendFilters(query, v, `${prefix}[${key}][${k}]`)
+ })
+ })
+}
+
+function normalizeArtiste(item) {
+ const a = item.attributes || item || {}
+
+ return {
+ id: item.id,
+ ...a,
+ }
+}
diff --git a/app/pages/concerts/agenda.vue b/app/pages/concerts/agenda.vue
index c054614..8d11da8 100644
--- a/app/pages/concerts/agenda.vue
+++ b/app/pages/concerts/agenda.vue
@@ -32,6 +32,7 @@
-
-
\ No newline at end of file
diff --git a/app/pages/concerts/saison.vue b/app/pages/concerts/saison.vue
index 11a56f4..1f73d89 100644
--- a/app/pages/concerts/saison.vue
+++ b/app/pages/concerts/saison.vue
@@ -32,6 +32,7 @@
+
+
diff --git a/app/pages/orchestre/artistes-invitees.vue b/app/pages/orchestre/artistes-invitees.vue
deleted file mode 100644
index b9b4da4..0000000
--- a/app/pages/orchestre/artistes-invitees.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/pages/orchestre/artistesinvitees.vue b/app/pages/orchestre/artistesinvitees.vue
new file mode 100644
index 0000000..7bf3e05
--- /dev/null
+++ b/app/pages/orchestre/artistesinvitees.vue
@@ -0,0 +1,317 @@
+
+
+
+
+
+
+
+
+ LES ARTISTES INVITÉS
+
+
+ La patte de l’Orchestre national d’Île-de-France, c’est aussi la richesse de ses collaborations artistiques
+
+
+
+
+
+
+ Chefs, solistes, comédiens, chaque saison, de nombreux talents viennent enrichir la programmation de l’Orchestre : découvrez ici tous les artistes de la saison !
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Chargement des artistes...
+
+
+
+ Impossible de charger les artistes.
+
+
+
+
+
+
+
+
+
+ {{ a.nom_artiste_invite }}
+
+
+
+
+ {{ a.postesLabel }}
+
+
+
+
+
+ Aucun artiste pour la direction.
+
+
+
+
+
+
+
+
+
+
+
+ Chargement des artistes...
+
+
+
+ Impossible de charger les artistes.
+
+
+
+
+
+
+
+
+
+ {{ a.nom_artiste_invite }}
+
+
+
+
+ {{ a.postesLabel }}
+
+
+
+
+
+ Aucun autre artiste trouvé.
+
+
+
+
+
+
+
+
+
+
diff --git a/app/pages/orchestre/direction.vue b/app/pages/orchestre/direction.vue
index eb679ac..2db8d5c 100644
--- a/app/pages/orchestre/direction.vue
+++ b/app/pages/orchestre/direction.vue
@@ -4,7 +4,7 @@
-
diff --git a/app/pages/orchestre/discographie.vue b/app/pages/orchestre/discographie.vue
index b9b4da4..dc90619 100644
--- a/app/pages/orchestre/discographie.vue
+++ b/app/pages/orchestre/discographie.vue
@@ -1,10 +1,10 @@
-
+ test
-
diff --git a/app/pages/orchestre/missions.vue b/app/pages/orchestre/missions.vue
index 5f600df..14a4b86 100644
--- a/app/pages/orchestre/missions.vue
+++ b/app/pages/orchestre/missions.vue
@@ -4,7 +4,7 @@
-
diff --git a/app/pages/orchestre/musiciens.vue b/app/pages/orchestre/musiciens.vue
index f173f33..ade2940 100644
--- a/app/pages/orchestre/musiciens.vue
+++ b/app/pages/orchestre/musiciens.vue
@@ -48,6 +48,7 @@
:alt="a.image.alternativeText || a.nom_artiste_ondif || ''"
ratio="square"
/>
+
@@ -95,6 +96,7 @@
:alt="a.image.alternativeText || a.nom_artiste_ondif || ''"
ratio="square"
/>
+
@@ -268,6 +270,12 @@
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;
diff --git a/app/pages/orchestre/partenaires.vue b/app/pages/orchestre/partenaires.vue
index b9b4da4..61fd1c7 100644
--- a/app/pages/orchestre/partenaires.vue
+++ b/app/pages/orchestre/partenaires.vue
@@ -4,7 +4,7 @@
-
diff --git a/app/pages/orchestre/soutenir.vue b/app/pages/orchestre/soutenir.vue
index b9b4da4..61fd1c7 100644
--- a/app/pages/orchestre/soutenir.vue
+++ b/app/pages/orchestre/soutenir.vue
@@ -4,7 +4,7 @@
-
diff --git a/design-system/tokens/_colors.scss b/design-system/tokens/_colors.scss
index a26355f..437fd9c 100644
--- a/design-system/tokens/_colors.scss
+++ b/design-system/tokens/_colors.scss
@@ -14,6 +14,7 @@
--c-backgroud-black: #111;
--c-backgroud-brandreverse: #ACCFCF;
--c-background-blanc-casse: #FCFCFC;
+ --c-background-jaune: #fac020;
/* États */
--c-success: green;
diff --git a/env.txt b/env.txt
deleted file mode 100644
index aeaac16..0000000
--- a/env.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-ENV=developpement
-
-# Nuxt
-NUXT_PUBLIC_SITE_URL=http://localhost:3000
-NUXT_PUBLIC_API_URL=http://localhost:3000
-NUXT_I18N_DEFAULT_LOCALE=fr
-NUXT_I18N_LOCALES=fr,en
-
-# Strapi
-NUXT_PUBLIC_STRAPI_URL=https://bo.orchestre-ile.com/
-NUXT_PUBLICSTRAPI_ADMIN_EMAIL=contact@parisweb.art
-NUXT_STRAPI_TOKEN=
-
-# Métier
-SAISON=2025/2026
\ No newline at end of file
diff --git a/server/api/__strapi__/artistesinvitees.get.js b/server/api/__strapi__/artistesinvitees.get.js
new file mode 100644
index 0000000..08789e8
--- /dev/null
+++ b/server/api/__strapi__/artistesinvitees.get.js
@@ -0,0 +1,7 @@
+import { createStrapiProxyHandler } from "~~/server/utils/strapiEndpoint"
+
+export default defineEventHandler(
+ createStrapiProxyHandler({
+ strapiPath: "/api/artistes-invites",
+ })
+)