@@ -4,54 +4,56 @@ import { ref, onMounted } from 'vue'
44const projets = [
55 {
66 id: 1 ,
7- titre: " IoT - Système surveillance température et humidité" ,
7+ titre: ' IoT - Système surveillance température et humidité' ,
88 images: [
99 {
10- src: " https://github.com/raphbag/IoT-Home-Weather-Station/raw/main/.github/preview.jpg" ,
11- alt: " Photo du projet IoT"
10+ src: ' https://github.com/raphbag/IoT-Home-Weather-Station/raw/main/.github/preview.jpg' ,
11+ alt: ' Photo du projet IoT' ,
1212 },
1313 {
14- src: " https://github.com/raphbag/IoT-Home-Weather-Station/raw/main/.github/dashboard.jpg" ,
15- alt: " Dashboard du projet IoT"
16- }
14+ src: ' https://github.com/raphbag/IoT-Home-Weather-Station/raw/main/.github/dashboard.jpg' ,
15+ alt: ' Dashboard du projet IoT' ,
16+ },
1717 ],
18- description: " Projet IoT de surveillance de la température et de l'humidité dans maison, utilisant un ESP32, un capteur DHT22 et la communication MQTT." ,
18+ description:
19+ " Projet IoT de surveillance de la température et de l'humidité dans maison, utilisant un ESP32, un capteur DHT22 et la communication MQTT." ,
1920 liens: [
2021 {
21- url: " https://github.com/raphbag/IoT-Home-Weather-Station" ,
22- label: " Github" ,
23- icon: " /github.svg" ,
24- newTab: true
25- }
22+ url: ' https://github.com/raphbag/IoT-Home-Weather-Station' ,
23+ label: ' Github' ,
24+ icon: ' /github.svg' ,
25+ newTab: true ,
26+ },
2627 ],
27- type: " ESME"
28+ type: ' ESME' ,
2829 },
2930 {
3031 id: 2 ,
31- titre: " WEB - Maquette Omnifood" ,
32+ titre: ' WEB - Maquette Omnifood' ,
3233 images: [
3334 {
34- src: " https://github.com/raphbag/maquette-omnifood/raw/master/.github/preview-omnifood-raphbag.png" ,
35- alt: " Aperçu de ma version de Omnifood"
36- }
35+ src: ' https://github.com/raphbag/maquette-omnifood/raw/master/.github/preview-omnifood-raphbag.png' ,
36+ alt: ' Aperçu de ma version de Omnifood' ,
37+ },
3738 ],
38- description: " Refonte de la maquette Omnifood (omnifood.dev) en utilisant HTML et CSS pour créer un site web responsive et attrayant." ,
39+ description:
40+ ' Refonte de la maquette Omnifood (omnifood.dev) en utilisant HTML et CSS pour créer un site web responsive et attrayant.' ,
3941 liens: [
4042 {
41- url: " https://github.com/raphbag/maquette-omnifood" ,
42- label: " Github" ,
43- icon: " /github.svg" ,
44- newTab: true
43+ url: ' https://github.com/raphbag/maquette-omnifood' ,
44+ label: ' Github' ,
45+ icon: ' /github.svg' ,
46+ newTab: true ,
4547 },
4648 {
47- url: " https://raphbag.github.io/maquette-omnifood" ,
48- label: " Site" ,
49- icon: " https://github.com/raphbag/maquette-omnifood/raw/master/assets/images/icon.png" ,
50- newTab: true
51- }
49+ url: ' https://raphbag.github.io/maquette-omnifood' ,
50+ label: ' Site' ,
51+ icon: ' https://github.com/raphbag/maquette-omnifood/raw/master/assets/images/icon.png' ,
52+ newTab: true ,
53+ },
5254 ],
53- type: " ESME"
54- }
55+ type: ' ESME' ,
56+ },
5557]
5658
5759const visibleProjets = ref ([])
@@ -69,29 +71,60 @@ onMounted(() => {
6971 <main >
7072 <section class =" projets" >
7173 <TransitionGroup name =" fade-projet" tag =" div" >
72- <div
73- class =" projet"
74- v-for =" projet in visibleProjets"
75- :key =" projet.id"
76- >
74+ <div class =" projet" v-for =" projet in visibleProjets" :key =" projet.id" >
7775 <h2 >{{ projet.titre }}</h2 >
7876 <div class =" images" >
7977 <img v-for =" img in projet.images" :src =" img.src" :alt =" img.alt" :key =" img.src" />
8078 </div >
8179 <p >{{ projet.description }}</p >
8280 <div class =" bottom" >
8381 <div class =" liens" >
84- <a v-for =" lien in projet.liens" :key =" lien.url" :href =" lien.url" :target =" lien.newTab ? '_blank' : '_self'" >
82+ <a
83+ v-for =" lien in projet.liens"
84+ :key =" lien.url"
85+ :href =" lien.url"
86+ :target =" lien.newTab ? '_blank' : '_self'"
87+ >
8588 <img :src =" lien.icon" width =" 26px" :alt =" `Icon ${lien.label}`" />
8689 {{ lien.label }}
87- <svg v-if =" lien.newTab" xmlns =" http://www.w3.org/2000/svg" width =" 24" height =" 24" viewBox =" 0 0 24 24" fill =" none" stroke =" #d6d6d6" stroke-width =" 1.5" stroke-linecap =" round" stroke-linejoin =" round" ><g fill =" none" fill-rule =" evenodd" ><path d =" M18 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h5M15 3h6v6M10 14L20.2 3.8" /></g ></svg >
90+ <svg
91+ v-if =" lien.newTab"
92+ xmlns =" http://www.w3.org/2000/svg"
93+ width =" 24"
94+ height =" 24"
95+ viewBox =" 0 0 24 24"
96+ fill =" none"
97+ stroke =" #d6d6d6"
98+ stroke-width =" 1.5"
99+ stroke-linecap =" round"
100+ stroke-linejoin =" round"
101+ >
102+ <g fill =" none" fill-rule =" evenodd" >
103+ <path
104+ d =" M18 14v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8c0-1.1.9-2 2-2h5M15 3h6v6M10 14L20.2 3.8"
105+ />
106+ </g >
107+ </svg >
88108 </a >
89109 </div >
90110 <span v-if =" projet.type === 'ESME'" >
91- <img src =" @/assets/Esme-sudria-logo.png" alt =" Logo ESME Sudria" /> ESME
111+ <img src =" @/assets/Esme-sudria-logo.png" alt =" Logo ESME Sudria" /> ESME
92112 </span >
93113 <span v-else-if =" projet.type === 'Perso'" class =" perso" >
94- <svg xmlns =" http://www.w3.org/2000/svg" width =" 20" height =" 20" viewBox =" 0 0 24 24" fill =" none" stroke =" currentColor" stroke-width =" 2" stroke-linecap =" round" stroke-linejoin =" round" ><path d =" M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" ></path ><circle cx =" 12" cy =" 7" r =" 4" ></circle ></svg >
114+ <svg
115+ xmlns =" http://www.w3.org/2000/svg"
116+ width =" 20"
117+ height =" 20"
118+ viewBox =" 0 0 24 24"
119+ fill =" none"
120+ stroke =" currentColor"
121+ stroke-width =" 2"
122+ stroke-linecap =" round"
123+ stroke-linejoin =" round"
124+ >
125+ <path d =" M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" ></path >
126+ <circle cx =" 12" cy =" 7" r =" 4" ></circle >
127+ </svg >
95128 Perso
96129 </span >
97130 <span v-else class =" autre" >{{ projet.type }}</span >
@@ -103,7 +136,6 @@ onMounted(() => {
103136</template >
104137
105138<style scoped>
106-
107139main {
108140 padding : 0 20px ;
109141}
@@ -142,15 +174,19 @@ h2 {
142174 display : inline-block ;
143175 font-weight : 600 ;
144176 color : #e0e0e0 ;
145- transition : background-position 0.3s ease , color 0.3s ease ;
177+ transition :
178+ background-position 0.3s ease ,
179+ color 0.3s ease ;
146180}
147181
148182h2 :hover {
149183 background : linear-gradient (150deg , #4e54c8 60% , #8f94fb 100% );
150184 background-size : 200% 100% ;
151185 background-position : right center ;
152186 color : #fff ;
153- transition : background-position 0.3s ease , color 0.3s ease ;
187+ transition :
188+ background-position 0.3s ease ,
189+ color 0.3s ease ;
154190}
155191
156192.projet :hover {
@@ -195,15 +231,14 @@ h2:hover {
195231 text-decoration : none ;
196232 border : #797979 0.5px solid ;
197233 border-radius : 10px ;
198- margin-top : 10px ;
199234 padding : 5px ;
200235}
201236
202237.projet a :hover {
203238 flex-wrap : wrap ;
204239 gap : 10px ;
205240 background-color : #797979 ;
206- transition : all 0.3s ease ;
241+ transition : all 0.3s ease ;
207242}
208243
209244.bottom {
@@ -244,11 +279,10 @@ span img {
244279 transform : translateY (30px ) scale (0.95 );
245280}
246281.fade-projet-enter-active {
247- transition : all 0.6s cubic-bezier (.5 ,1.5 ,.5 ,1 );
282+ transition : all 0.6s cubic-bezier (0 .5 , 1.5 , 0 .5 , 1 );
248283}
249284.fade-projet-enter-to {
250285 opacity : 1 ;
251286 transform : translateY (0 ) scale (1 );
252287}
253-
254- </style >
288+ </style >
0 commit comments