j'arrive pas a commit

This commit is contained in:
camille
2026-03-22 13:25:37 +01:00
parent fd385b1393
commit 8c8e6a613a
11 changed files with 1479 additions and 0 deletions
+198
View File
@@ -0,0 +1,198 @@
Je met ici toutes les infos qui m'on été necessaires pour construire ne serais-ce que les fonctionnalités de base, parce que franchement je suis nul en html css javascript donc je vais avoir besoin d'un mémo.
- Cléo
(PS: je fais tout ca dans l'ordre chronologique.. c'est donc un peu le bordel, mais ca peut rendre la correction plus facile si par chance je pense a bien ecrire le nom de chaque fichier et bloc de code dans lequel chaque point du memo s'inscrit)
(PPS: pour des raisons evidentes, je balance les attributs parcousup tout en bas)
(PPPS: ce fichier est surtout destiné a moi meme et a warrhen pour ne pas mourir le jour de la soutenance en ayant deja tout oublié. Pour vous, Monsieur, on a une version plus propre ailleurs. Pardonnez donc les divagations innombrables que vous pourriez lire ci dessous si vous decidiez de le parcourir (note de l'auteur: S'il vous plait, cliquez sur un autre fichier...) malgré tous mes avertissement (et supplications) quant a la totale absence de quelque qualité redactionnelle que ce soit. (Il existe un legende disans qu'un jour, ce memo finira par comprendre de quoi il parle, mais qu'en l'etat des choses il est trop catastrophiquement mal ecrit pour cela. Tellement mal ecrit que j'ai fais au minimum cinqu fautes d'accord dans cette seule ligne, et j'ai meme reussi, allez savoir comment, a ecrire "disans" avec un S et un u est sorti de nulle part derriere "cinqu") )
index.html : a ce qu'il parait, div c'est une boite vide qu'on peut tranquilement remplir sur commande. Pratique.
viewport (ds le head) sert juste a ce que la taille s'adapte a lecran.
src > main.js : on enregistre (register) le composant ligne-resultat.riot apres avoir importé qq composants et la biblio riot
api/parcoursup.js > recupereFormations() : async permet de laisser tourner la page pendant qu'on chope la reponse, await de bloquer le js en attendant le resultat de la requete sans quoi, kaboom
url construit l'url de la requete en fonction des mots clefs, puis fetch envoie la requette http
response.json() transforme en format json utilisable le resultat en text brut de l'api
data renvoie un paquet de trucs, mais seul son tableau result semble interessant de ce que j'ai pu voir dans l'api en faisant mumuse avec les requetes. (Et apres on se demande pourquoi je code lentement.. je comprends deja rien et en plus je fait joujoue avec tout ce qui bouge)
main.js : les variables c pareil qu'en android/xml, et ca c'est cool
> addEventListener : divResultat.innerHtml en gros ca remplace juste tout le contenu de la boite div evoquee plus haut par "chargement"
j'aime toujours pas les fleches. Pas sur de savoir en quoi ca aide a comprendre le code cela dit.
on balance dans formations le resultat de la requete, et pr chaque ligne on met les infos necesaire dans le composant ligne-resultat.riot
et apres on rempli le div avec les formations
Liste des attributs de parcourup, gentiment rédigé par claude.ai:
L'établissement et la formation
Champ Signification
g_ea_lib_vx Nom de l'établissement
fil_lib_voe_acc Filière (ex: Informatique)
lib_for_voe_ins Nom complet de la formation
detail_forma Détail de la formation
fili Type (Licence, BTS, CPGE...)
select_form Sélective ou non sélective
ville_etab Ville
dep_lib Département
region_etab_aff Région
contrat_etab Public ou Privé
lien_form_psup Lien vers la fiche Parcoursup
La carte
Champ Signification
g_olocalisation_des_formations.lat Latitude
g_olocalisation_des_formations.lon Longitude
Les chiffres clés
Champ Signification
capa_fin Nombre de places disponibles
voe_tot Nombre total de candidatures
acc_tot Nombre total d'admis
taux_acces_ens Taux d'accès global (%)
Les candidatures par type de bac
Champ Signification
nb_voe_pp_bg Candidatures bac général
nb_voe_pp_bt Candidatures bac techno
nb_voe_pp_bp Candidatures bac pro
Les admis par type de bac
Champ Signification
pct_bg % admis bac général
pct_bt % admis bac techno
pct_bp % admis bac pro
acc_bg Nombre admis bac général
acc_bt Nombre admis bac techno
acc_bp Nombre admis bac pro
Les admis par mention
Champ Signification
pct_ab % admis mention Assez Bien
pct_b % admis mention Bien
pct_tb % admis mention Très Bien
pct_tbf % admis mention Très Bien Félicitations
pct_sansmention % admis sans mention
La sélectivité
Champ Signification
ran_grp1 Dernier appelé (rang du dernier admis)
prop_tot Nombre total de propositions d'admission
prop_tot_bg Propositions aux bacheliers généraux
+24
View File
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
+16
View File
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Parcoursup but coded by an idiot</title>
</head>
<body>
<h1>Explorateur de formations</h1>
<input type="text" id="requete" placeholder="Ex: informatique, médecine...">
<button id="entrerRequete">Lancer la recherche</button>
<div id="affichageResultats"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
+1137
View File
File diff suppressed because it is too large Load Diff
+19
View File
@@ -0,0 +1,19 @@
{
"name": "parcoursup-app",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"vite": "^8.0.1"
},
"dependencies": {
"@riotjs/compiler": "^10.0.1",
"riot": "^10.1.3",
"rollup-plugin-riot": "^10.0.0"
}
}
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.3 KiB

+24
View File
@@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg">
<symbol id="bluesky-icon" viewBox="0 0 16 17">
<g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
<defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
</symbol>
<symbol id="discord-icon" viewBox="0 0 20 19">
<path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
</symbol>
<symbol id="documentation-icon" viewBox="0 0 21 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
</symbol>
<symbol id="github-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
</symbol>
<symbol id="social-icon" viewBox="0 0 20 20">
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
<path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
</symbol>
<symbol id="x-icon" viewBox="0 0 19 19">
<path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
</symbol>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

+10
View File
@@ -0,0 +1,10 @@
const API_BASE = "https://data.education.gouv.fr/api/explore/v2.1/catalog/datasets/fr-esr-parcoursup/records";
export async function recupereFormations(motCle, limit = 20) {
const url = `${API_BASE}?where=search("${motCle}")&limit=${limit}`;
const response = await fetch(url);
const data = await response.json();
return data.results;
}
@@ -0,0 +1,15 @@
<ligne-resultat>
<div class="ligne-resultat">
<h3>{ props.formation.fil_lib_voe_acc } — { props.formation.g_ea_lib_vx }</h3>
<p>{ props.formation.ville_etab } ({ props.formation.dep_lib })</p>
<p>Taux d'accès : { props.formation.taux_acces_ens }%</p>
</div>
<style>
.ligne-resultat {
border: 1px solid #ccc;
padding: 10px;
margin: 5px 0;
}
</style>
</ligne-resultat>
+27
View File
@@ -0,0 +1,27 @@
import * as riot from 'riot'
import LigneResultat from './components/ligne-resultat.riot'
import { recupereFormations } from './api/parcoursup.js'
riot.register('ligne-resultat', LigneResultat)
const bouton = document.getElementById("entrerRequete")
const champRecherche = document.getElementById("requete")
const divResultats = document.getElementById("affichageResultats")
bouton.addEventListener("click", async () => {
const motCle = champRecherche.value
divResultats.innerHTML = "Chargement..."
const formations = await recupereFormations(motCle)
divResultats.innerHTML = ""
formations.forEach(f => {
const listeFormations = riot.mount(
document.createElement('ligne-resultat'),
{ formation: f }
)
divResultats.appendChild(listeFormations[0].root)
})
})
+8
View File
@@ -0,0 +1,8 @@
import { defineConfig } from 'vite'
import riot from 'rollup-plugin-riot'
export default defineConfig({
plugins: [
riot()
]
})