2024-09-30

This commit is contained in:
gcch 2024-09-30 18:19:25 +02:00
commit 888b94cbf4
574 changed files with 1489 additions and 1282 deletions

View file

@ -169,6 +169,10 @@ body {
letter-spacing: 0.5px;
}
em {
font-style: italic;
}
/**
* Réinitialisation des styles des <button>.
*/

View file

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../src/sass/base/polices/_lato.scss","../../src/sass/base/polices/_myriad.scss","../../src/sass/abstracts/_variables.scss","../../src/sass/base/_base.scss","../../src/sass/base/_typographie.scss","../../src/sass/base/elements/_boutons.scss","../../src/sass/base/elements/_images.scss","../../src/sass/base/elements/_liens.scss","../../src/sass/base/elements/_listes.scss","../../src/sass/layouts/_en-tete.scss","../../src/sass/layouts/_menu-categories-produits.scss","../../src/sass/layouts/_colonnes-photos.scss","../../src/sass/layouts/_grille-produits.scss","../../src/sass/layouts/_informations-produit.scss","../../src/sass/layouts/_produits-similaires.scss","../../src/sass/layouts/_pied-de-page.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AChGJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AChBJ;AACE;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;AAEA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;;;ACnBF;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAIA;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;AAAA;AAGA;EACE;;;ACxDF;EACE;EACA;EACA;;;ACHF;AAAA;AAAA;AAGA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;;ACfJ;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;;;ACbF;AAAA;AAAA;AAAA;AAAA;AAKA;AACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE,kHAK4B;EAE9B;AAEA;AAMA;AAAA;AAAA;;AALA;EAEE;;AAMF;AACE;EACA;EACA;AAEA;EACA;EAEA;EACA;AAEA;AAMA;AAKA;;AAVA;EAEE;;AAIF;EACE;;AAIF;EACE;IACE;;;AAMJ;EACE;IACE;;;;AClER;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAMA;AACE;EACA;AAEA;EACA;AAEA;EACA;;AAEA;EACE;EACA,qLAEkE;;;AC5BxE;AACE;EACA;EACA;AAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAWA;;AATA;EACE;;AAEA;AAAA;EAEE;;AAKJ;EACE;EACA;EACA;EACA;EACA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;EACE;EACA;EACA;EACA;EACA;;AAYF;AACE;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EAEA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;IACE;;;AAMR;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;ACvGR;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACE;EACA;EACA;AAEA;EACA;EACA;EAEA;EACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOA;EACE;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAMA;AAAA;AAAA;AAAA;AAAA;;AAJA;EACE;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;;AAGF;EACE;IACE;IACA;;;AAKN;EACE;;AAGF;EACE;;;AC/ER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACE;EACA;AAEA;EACA;EACA;AAAA;AAAA;AAIA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;;AAMF;EACE;;;AC5CR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AC9EV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACE;EAEA;EAGA;EACA;EAGA;EAEA;EACA;EACA;EACA;EACA;AAuGA;AAyGA;;AA9MA;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;;AAGF;EACE;;AAMR;EACE;;AAEA;EACE;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;AAEA;AAMA;AAwCA;AAqBA;;AAlEA;EACE;EACA;;AAIF;EACE;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEI;IACE;IACA;;;AAKN;EAEI;IACE;IACA;;;AAOR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;IACE;;;AAKN;EACE;;AAeJ;EACE;;AAKJ;EACE;EACA;EACA;AAEA;;AACA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;AAEA;;AAEE;EACE;IACE;;;;AAQZ;EACE;IACE;;EAGF;IACE;;;AC3QJ;EACE;EACA;EACA;EACA,qBACE;EAEF;EACA;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AC7FZ;AAAA;AAAA;AAGA;AACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA","file":"main.css"}
{"version":3,"sourceRoot":"","sources":["../../src/sass/base/polices/_lato.scss","../../src/sass/base/polices/_myriad.scss","../../src/sass/abstracts/_variables.scss","../../src/sass/base/_base.scss","../../src/sass/base/_typographie.scss","../../src/sass/base/elements/_boutons.scss","../../src/sass/base/elements/_images.scss","../../src/sass/base/elements/_liens.scss","../../src/sass/base/elements/_listes.scss","../../src/sass/layouts/_en-tete.scss","../../src/sass/layouts/_menu-categories-produits.scss","../../src/sass/layouts/_colonnes-photos.scss","../../src/sass/layouts/_grille-produits.scss","../../src/sass/layouts/_informations-produit.scss","../../src/sass/layouts/_produits-similaires.scss","../../src/sass/layouts/_pied-de-page.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AChGJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AChBJ;AACE;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;AAEA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;;;ACnBF;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAIA;EACE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;AAAA;AAGA;EACE;;;ACxDF;EACE;EACA;EACA;;;AAGF;EACE;;;ACPF;AAAA;AAAA;AAGA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;;ACfJ;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;;;ACbF;AAAA;AAAA;AAAA;AAAA;AAKA;AACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE,kHAK4B;EAE9B;AAEA;AAMA;AAAA;AAAA;;AALA;EAEE;;AAMF;AACE;EACA;EACA;AAEA;EACA;EAEA;EACA;AAEA;AAMA;AAKA;;AAVA;EAEE;;AAIF;EACE;;AAIF;EACE;IACE;;;AAMJ;EACE;IACE;;;;AClER;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAMA;AACE;EACA;AAEA;EACA;AAEA;EACA;;AAEA;EACE;EACA,qLAEkE;;;AC5BxE;AACE;EACA;EACA;AAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAWA;;AATA;EACE;;AAEA;AAAA;EAEE;;AAKJ;EACE;EACA;EACA;EACA;EACA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;EACE;EACA;EACA;EACA;EACA;;AAYF;AACE;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EAEA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;IACE;;;AAMR;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;ACvGR;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACE;EACA;EACA;AAEA;EACA;EACA;EAEA;EACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOA;EACE;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAMA;AAAA;AAAA;AAAA;AAAA;;AAJA;EACE;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;;AAGF;EACE;IACE;IACA;;;AAKN;EACE;;AAGF;EACE;;;AC/ER;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACE;EACA;AAEA;EACA;EACA;AAAA;AAAA;AAIA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;;AAMF;EACE;;;AC5CR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AC9EV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACE;EAEA;EAGA;EACA;EAGA;EAEA;EACA;EACA;EACA;EACA;AAuGA;AAyGA;;AA9MA;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;;AAGF;EACE;;AAMR;EACE;;AAEA;EACE;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;AAEA;AAMA;AAwCA;AAqBA;;AAlEA;EACE;EACA;;AAIF;EACE;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEI;IACE;IACA;;;AAKN;EAEI;IACE;IACA;;;AAOR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;IACE;;;AAKN;EACE;;AAeJ;EACE;;AAKJ;EACE;EACA;EACA;AAEA;;AACA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;AAEA;;AAEE;EACE;IACE;;;;AAQZ;EACE;IACE;;EAGF;IACE;;;AC3QJ;EACE;EACA;EACA;EACA,qBACE;EAEF;EACA;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AC7FZ;AAAA;AAAA;AAGA;AACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA","file":"main.css"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="9.3 20.1 80 80"><g pointer-events="none"><path fill="#5C0F1F" d="M83.926 63.384c-1.174-3.057-4.293-5.039-8.407-5.797 6.641-4.402 10.216-10.523 8.353-15.375-2.402-6.254-12.935-8.027-23.523-3.96-2.729 1.048-5.19 2.382-7.306 3.89l-.021-.059c-2.401-6.254-12.937-8.027-23.524-3.959-10.59 4.069-17.226 12.437-14.825 18.692 1.086 2.826 3.836 4.734 7.497 5.605-6.069 4.344-9.251 10.133-7.471 14.766 2.402 6.256 12.936 8.027 23.524 3.959 2.648-1.017 5.048-2.303 7.123-3.757.065.244.139.487.231.726 2.402 6.256 12.935 8.028 23.523 3.96 10.592-4.068 17.228-12.437 14.826-18.691"/><path fill="#FFF" d="M28.24 68.504c3.558.724 38.032 0 40.277 0 2.243 0 2.071-1.981 2.071-1.981s.449-1.174-7.345-1.644c-7.795-.468-13.807.769-17.576 1.616-3.77.85-15.123-.111-16.396-.174-1.271-.062-4.589 1.458-1.031 2.183m40.282-7.88c-20.14-.264-29.552 1.45-36.553 1.02-4.725-.293-4.802-1.9-4.868-2.658-.065-.76 0-1.537 7.794-1.924 7.795-.389 12.594 1.381 17.789 1.584 5.196.201 14.564.158 15.838.188 2.296.052 4.592 1.85 0 1.79M29.56 50.537s27.889-.449 38.268.358c2.238.176 1.958 1.989 1.958 1.989s-1.042 1.658-7.576 1.618c-7.802-.051-12.018-2.154-17.215-2.363-5.195-.21-15.473.554-16.745.607s-2.625-2.209 1.31-2.209"/></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -7,6 +7,10 @@
"file": "chunk-7BKSRZNG.js",
"name": "chunk-7BKSRZNG"
},
"_chunk-RU7WR4KH.js": {
"file": "chunk-RU7WR4KH.js",
"name": "chunk-RU7WR4KH"
},
"_exports.js": {
"file": "exports.js",
"name": "exports"
@ -95,7 +99,13 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts",
"isEntry": true,
"imports": [
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts"
"_chunk-7BKSRZNG.js",
"_index.js",
"_index2.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts",
"_exports.js"
]
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add-item.ts": {
@ -147,13 +157,29 @@
"_Either.js"
]
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts": {
"file": "scripts-bouton-panier.js",
"name": "scripts-bouton-panier",
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts",
"isEntry": true,
"imports": [
"_chunk-7BKSRZNG.js",
"_index.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/dom.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
"_exports.js",
"_Either.js"
]
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts": {
"file": "scripts-page-panier.js",
"name": "scripts-page-panier",
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts",
"isEntry": true,
"imports": [
"_index.js",
"_chunk-RU7WR4KH.js",
"_chunk-7BKSRZNG.js",
"_index2.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
@ -162,12 +188,13 @@
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/gardes.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-remove-item.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-remove-item.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts",
"_Either.js",
"_exports.js"
"_exports.js",
"_index.js",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts"
]
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts": {
@ -176,16 +203,17 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts",
"isEntry": true,
"imports": [
"_index.js",
"_chunk-RU7WR4KH.js",
"_chunk-7BKSRZNG.js",
"_index.js",
"_index2.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/dom.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/gardes.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add-item.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add-item.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts",
"_Either.js",

View file

@ -1 +1 @@
{"version":3,"file":"cart-add-item.js","sources":["../../src/scripts/lib/schemas/cart-add-item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCStoreCartAddItemArgs } from \"../../types/api/cart-add-item\";\n\nexport const WCStoreCartAddItemArgsItemsSchema = v.object({\n /** Variation attribute name. */\n attribute: v.string(),\n /** Variation attribute value. */\n value: v.string(),\n});\n\nexport const WCStoreCartAddItemArgsSchema = v.object({\n /** The basket item product or variation ID. */\n id: v.optional(v.number()),\n /** Quantity of this item to add to the basket. */\n quantity: v.optional(v.number()),\n /** Chosen attributes (for variations). */\n variation: v.optional(v.array(WCStoreCartAddItemArgsItemsSchema)),\n});\n\nexport const parseWCStoreCartAddItemArgs: (args: unknown) => WCStoreCartAddItemArgs = (args) =>\n v.parse(WCStoreCartAddItemArgsSchema, args);\n"],"names":["WCStoreCartAddItemArgsItemsSchema","v.object","v.string","WCStoreCartAddItemArgsSchema","v.optional","v.number","v.array","parseWCStoreCartAddItemArgs","args","v.parse"],"mappings":"mEAIa,MAAAA,EAAoCC,EAAS,CAExD,UAAWC,EAAS,EAEpB,MAAOA,EAAS,CAClB,CAAC,EAEYC,EAA+BF,EAAS,CAEnD,GAAIG,EAAWC,GAAU,EAEzB,SAAUD,EAAWC,GAAU,EAE/B,UAAWD,EAAWE,EAAQN,CAAiC,CAAC,CAClE,CAAC,EAEYO,EAA0EC,GACrFC,EAAQN,EAA8BK,CAAI"}
{"version":3,"file":"cart-add-item.js","sources":["../../src/scripts/lib/schemas/cart-add-item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCStoreCartAddItemArgs } from \"../types/api/cart-add-item\";\n\nexport const WCStoreCartAddItemArgsItemsSchema = v.object({\n /** Variation attribute name. */\n attribute: v.string(),\n /** Variation attribute value. */\n value: v.string(),\n});\n\nexport const WCStoreCartAddItemArgsSchema = v.object({\n /** The basket item product or variation ID. */\n id: v.optional(v.number()),\n /** Quantity of this item to add to the basket. */\n quantity: v.optional(v.number()),\n /** Chosen attributes (for variations). */\n variation: v.optional(v.array(WCStoreCartAddItemArgsItemsSchema)),\n});\n\nexport const parseWCStoreCartAddItemArgs: (args: unknown) => WCStoreCartAddItemArgs = (args) =>\n v.parse(WCStoreCartAddItemArgsSchema, args);\n"],"names":["WCStoreCartAddItemArgsItemsSchema","v.object","v.string","WCStoreCartAddItemArgsSchema","v.optional","v.number","v.array","parseWCStoreCartAddItemArgs","args","v.parse"],"mappings":"mEAIa,MAAAA,EAAoCC,EAAS,CAExD,UAAWC,EAAS,EAEpB,MAAOA,EAAS,CAClB,CAAC,EAEYC,EAA+BF,EAAS,CAEnD,GAAIG,EAAWC,GAAU,EAEzB,SAAUD,EAAWC,GAAU,EAE/B,UAAWD,EAAWE,EAAQN,CAAiC,CAAC,CAClE,CAAC,EAEYO,EAA0EC,GACrFC,EAAQN,EAA8BK,CAAI"}

View file

@ -1 +1 @@
{"version":3,"file":"cart-remove-item.js","sources":["../../src/scripts/lib/schemas/cart-remove-item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCStoreCartRemoveItemArgs } from \"../../types/api/cart-remove-item\";\n\nexport const WCStoreCartRemoveItemArgsSchema = v.object({\n /** Unique identifier (key) for the basket item. */\n key: v.string(),\n});\n\nexport const parseWCStoreCartRemoveItemArgs = (args: WCStoreCartRemoveItemArgs): WCStoreCartRemoveItemArgs =>\n v.parse(WCStoreCartRemoveItemArgsSchema, args);\n"],"names":["WCStoreCartRemoveItemArgsSchema","v.object","v.string"],"mappings":"uCAIa,MAAAA,EAAkCC,EAAS,CAEtD,IAAKC,EAAS,CAChB,CAAC"}
{"version":3,"file":"cart-remove-item.js","sources":["../../src/scripts/lib/schemas/cart-remove-item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCStoreCartRemoveItemArgs } from \"../types/api/cart-remove-item\";\n\nexport const WCStoreCartRemoveItemArgsSchema = v.object({\n /** Unique identifier (key) for the basket item. */\n key: v.string(),\n});\n\nexport const parseWCStoreCartRemoveItemArgs = (args: WCStoreCartRemoveItemArgs): WCStoreCartRemoveItemArgs =>\n v.parse(WCStoreCartRemoveItemArgsSchema, args);\n"],"names":["WCStoreCartRemoveItemArgsSchema","v.object","v.string"],"mappings":"uCAIa,MAAAA,EAAkCC,EAAS,CAEtD,IAAKC,EAAS,CAChB,CAAC"}

View file

@ -0,0 +1,2 @@
function o(r,t,e){let n=u=>r(u,...t);return e===void 0?n:Object.assign(n,{lazy:e,lazyArgs:t})}function i(r,t,e){let n=r.length-t.length;if(n===0)return r(...t);if(n===1)return o(r,t,e);throw new Error("Wrong number of arguments")}function g(...r){return i(f,r)}function f(r,t){return t(r),r}export{g as r,i as u};
//# sourceMappingURL=chunk-RU7WR4KH.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"chunk-RU7WR4KH.js","sources":["../../../../../../node_modules/.pnpm/remeda@2.14.0/node_modules/remeda/dist/chunk-K26VP6CL.js","../../../../../../node_modules/.pnpm/remeda@2.14.0/node_modules/remeda/dist/chunk-RAAYCPUM.js","../../../../../../node_modules/.pnpm/remeda@2.14.0/node_modules/remeda/dist/chunk-RU7WR4KH.js"],"sourcesContent":["function u(t,n,a){let o=r=>t(r,...n);return a===void 0?o:Object.assign(o,{lazy:a,lazyArgs:n})}export{u as a};\n","import{a as t}from\"./chunk-K26VP6CL.js\";function u(r,n,a){let o=r.length-n.length;if(o===0)return r(...n);if(o===1)return t(r,n,a);throw new Error(\"Wrong number of arguments\")}export{u as a};\n","import{a as t}from\"./chunk-RAAYCPUM.js\";function r(...n){return t(e,n)}function e(n,o){return o(n),n}export{r as a};\n"],"names":["u","t","n","a","o","r","e"],"mappings":"AAAA,SAASA,EAAEC,EAAEC,EAAEC,EAAE,CAAC,IAAIC,EAAEC,GAAGJ,EAAEI,EAAE,GAAGH,CAAC,EAAE,OAAOC,IAAI,OAAOC,EAAE,OAAO,OAAOA,EAAE,CAAC,KAAKD,EAAE,SAASD,CAAC,CAAC,CAAC,CCArD,SAASF,EAAE,EAAEE,EAAEC,EAAE,CAAC,IAAIC,EAAE,EAAE,OAAOF,EAAE,OAAO,GAAGE,IAAI,EAAE,OAAO,EAAE,GAAGF,CAAC,EAAE,GAAGE,IAAI,EAAE,OAAOH,EAAE,EAAEC,EAAEC,CAAC,EAAE,MAAM,IAAI,MAAM,2BAA2B,CAAC,CCAvI,SAASE,KAAKH,EAAE,CAAC,OAAOD,EAAEK,EAAEJ,CAAC,CAAC,CAAC,SAASI,EAAEJ,EAAEE,EAAE,CAAC,OAAOA,EAAEF,CAAC,EAAEA,CAAC","x_google_ignoreList":[0,1,2]}

View file

@ -1,2 +1,2 @@
const E="aria-selected",T="hidden",a="data-contient-articles",t="disabled",s="data-cle-panier",_=".compte-panier a[rel='cart']",o="#selecteur-variation",e="#bouton-ajout-panier",n="a[role='tab']",c="section[role='tabpanel']",R="article",S="button.detail-produit__actions__suppression";export{s as A,R as S,S as a,_ as b,e as c,o as d,n as e,c as f,E as g,T as h,t as i,a as j};
const E="aria-selected",T="hidden",a="data-contient-articles",t="disabled",s="data-cle-panier",_=".compte-panier a[rel='cart']",o="#selecteur-variation",e="#bouton-ajout-panier",n="a[role='tab']",c="section[role='tabpanel']",R="article",S="button.detail-produit__actions__suppression";export{a as A,_ as S,R as a,s as b,S as c,e as d,o as e,n as f,c as g,E as h,T as i,t as j};
//# sourceMappingURL=dom.js.map

View file

@ -1,2 +1,2 @@
import{x as m}from"./chunk-7BKSRZNG.js";import{e as n,f as a,g as c,h as o}from"./erreurs.js";import{E as s,r as E,l as i}from"./Either.js";import"./exports.js";function p(e){return e!==null}function l(e){return e===void 0?!0:typeof e=="string"||Array.isArray(e)?e.length===0:Object.keys(e).length===0}const f=e=>e,L=e=>r=>s.encase(()=>e.querySelector(r)).mapLeft(t=>n(c(r))).chain(t=>p(t)?E(t):i(n(o(r)))),R=e=>r=>s.encase(()=>m(e.querySelectorAll(r),Array.from)).mapLeft(t=>n(c(r))).chain(t=>l(t)?i(n(o(r))):E(t)),S=e=>e.caseOf({Left:a,Right:f}),g=e=>e.caseOf({Left:a,Right:f});export{L as a,S as b,R as c,g as r};
import{x as m}from"./chunk-7BKSRZNG.js";import{e as n,f as a,g as c,h as o}from"./erreurs.js";import{E as s,r as E,l as i}from"./Either.js";import"./exports.js";function p(e){return e!==null}function l(e){return e===void 0?!0:typeof e=="string"||Array.isArray(e)?e.length===0:Object.keys(e).length===0}const f=e=>e,L=e=>r=>s.encase(()=>e.querySelector(r)).mapLeft(t=>n(c(r))).chain(t=>p(t)?E(t):i(n(o(r)))),R=e=>r=>s.encase(()=>m(e.querySelectorAll(r),Array.from)).mapLeft(t=>n(c(r))).chain(t=>l(t)?i(n(o(r))):E(t)),S=e=>e.caseOf({Left:a,Right:f}),g=e=>e.caseOf({Left:a,Right:f});export{g as a,L as b,R as c,S as r};
//# sourceMappingURL=dom2.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
{"version":3,"file":"erreurs2.js","sources":["../../src/scripts/lib/schemas/erreurs.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCError } from \"../../types/api/erreurs\";\n\nexport const WCErrorBodySchema = v.object({\n code: v.string(),\n data: v.object({\n status: v.number(),\n }),\n message: v.string(),\n});\n\nexport const WCErrorSchema = v.object({\n body: WCErrorBodySchema,\n status: v.number(),\n});\n\nexport const isWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);\n"],"names":["WCErrorBodySchema","v.object","v.string","v.number","WCErrorSchema","isWCError","donnees","v.is"],"mappings":"qDAIa,MAAAA,EAAoBC,EAAS,CACxC,KAAMC,EAAS,EACf,KAAMD,EAAS,CACb,OAAQE,EAAS,CAAA,CAClB,EACD,QAASD,EAAS,CACpB,CAAC,EAEYE,EAAgBH,EAAS,CACpC,KAAMD,EACN,OAAQG,EAAS,CACnB,CAAC,EAEYE,EAAaC,GAAyCC,EAAKH,EAAeE,CAAO"}
{"version":3,"file":"erreurs2.js","sources":["../../src/scripts/lib/schemas/erreurs.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCError } from \"../types/api/erreurs\";\n\nexport const WCErrorBodySchema = v.object({\n code: v.string(),\n data: v.object({\n status: v.number(),\n }),\n message: v.string(),\n});\n\nexport const WCErrorSchema = v.object({\n body: WCErrorBodySchema,\n status: v.number(),\n});\n\nexport const isWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);\n"],"names":["WCErrorBodySchema","v.object","v.string","v.number","WCErrorSchema","isWCError","donnees","v.is"],"mappings":"qDAIa,MAAAA,EAAoBC,EAAS,CACxC,KAAMC,EAAS,EACf,KAAMD,EAAS,CACb,OAAQE,EAAS,CAAA,CAClB,EACD,QAASD,EAAS,CACpB,CAAC,EAEYE,EAAgBH,EAAS,CACpC,KAAMD,EACN,OAAQG,EAAS,CACnB,CAAC,EAEYE,EAAaC,GAAyCC,EAAKH,EAAeE,CAAO"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
{"version":3,"file":"gardes.js","sources":["../../src/scripts/lib/gardes.ts"],"sourcesContent":["import type { Constructor } from \"../types/classes\";\n\nconst estElement = <T extends HTMLElement>(typeElement: Constructor<T>) => (element: unknown): element is T =>\n element instanceof typeElement;\n\nexport const estHTMLSelectElement = estElement<HTMLSelectElement>(HTMLSelectElement);\n\nexport const estError = (erreur: unknown): erreur is Error => erreur instanceof Error;\n\nexport const estReponse500 = (reponse: Response): boolean => reponse.status === 500;\n"],"names":["estElement","typeElement","element","estHTMLSelectElement","estError","erreur","estReponse500","reponse"],"mappings":"AAEA,MAAMA,EAAqCC,GAAiCC,GAC1EA,aAAmBD,EAERE,EAAuBH,EAA8B,iBAAiB,EAEtEI,EAAYC,GAAqCA,aAAkB,MAEnEC,EAAiBC,GAA+BA,EAAQ,SAAW"}
{"version":3,"file":"gardes.js","sources":["../../src/scripts/lib/gardes.ts"],"sourcesContent":["import type { Constructor } from \"./types/classes\";\n\nconst estElement = <T extends HTMLElement>(typeElement: Constructor<T>) => (element: unknown): element is T =>\n element instanceof typeElement;\n\nexport const estHTMLSelectElement = estElement<HTMLSelectElement>(HTMLSelectElement);\n\nexport const estError = (erreur: unknown): erreur is Error => erreur instanceof Error;\n\nexport const estReponse500 = (reponse: Response): boolean => reponse.status === 500;\n"],"names":["estElement","typeElement","element","estHTMLSelectElement","estError","erreur","estReponse500","reponse"],"mappings":"AAEA,MAAMA,EAAqCC,GAAiCC,GAC1EA,aAAmBD,EAERE,EAAuBH,EAA8B,iBAAiB,EAEtEI,EAAYC,GAAqCA,aAAkB,MAEnEC,EAAiBC,GAA+BA,EAAQ,SAAW"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{c as e}from"./api2.js";const n=o=>fetch(o.route,{body:o.corps,credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[e]:o.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)});export{n as p};
import{x as a}from"./chunk-7BKSRZNG.js";import{z as i,N as o}from"./index.js";import{p as n}from"./index2.js";import{c as p}from"./api2.js";import{a as c,b as m,c as d,d as l,E as u}from"./erreurs.js";import{i as r}from"./erreurs2.js";import"./exports.js";const y=e=>fetch(e.route,{body:e.corps,credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[p]:e.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)}),N=(e,s)=>i(e).with({body:o.select(),status:400},r,c).with({body:o.select(),status:401},r,m).with({body:o.select(),status:404},r,d).with(o._,t=>n(s,t)).otherwise(t=>a(t,u,l));export{y as p,N as t};
//# sourceMappingURL=reseau.js.map

View file

@ -1 +1 @@
{"version":3,"file":"reseau.js","sources":["../../src/scripts/lib/reseau.ts"],"sourcesContent":["import { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from \"../constantes/api.ts\";\n\ntype ArgumentsPostBackendWC = {\n corps: BodyInit;\n nonce: string;\n route: string;\n};\n\nexport const postBackendWC = (args: ArgumentsPostBackendWC) =>\n fetch(\n args.route,\n {\n body: args.corps,\n credentials: \"same-origin\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n },\n method: \"POST\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n"],"names":["ENTETE_WC_NONCE","postBackendWC","args"],"mappings":"AAQa,OAAA,KAAAA,MAAA,YAAA,MAAAC,EAAiBC,GAC5B,MACEA,EAAK,MACL,CACE,KAAMA,EAAK,MACX,YAAa,cACb,QAAS,CACP,OAAU,mBACV,eAAgB,mBAChB,CAACF,CAAe,EAAGE,EAAK,KAC1B,EACA,OAAQ,OACR,KAAM,cACN,OAAQ,YAAY,QAAQ,GAAI,CAClC,CACF"}
{"version":3,"file":"reseau.js","sources":["../../src/scripts/lib/reseau.ts"],"sourcesContent":["import { pipe } from \"remeda\";\nimport { match, P } from \"ts-pattern\";\nimport { type GenericSchema, parse } from \"valibot\";\n\nimport { ENTETE_WC_NONCE } from \"../constantes/api.ts\";\nimport {\n ErreurInconnue,\n leveBadRequestError,\n leveErreur,\n leveNotFoundError,\n leveUnauthorizedError,\n type UnknownError,\n} from \"./erreurs.ts\";\nimport { isWCError } from \"./schemas/erreurs.ts\";\n\ntype ArgumentsPostBackendWC = {\n corps: BodyInit;\n nonce: string;\n route: string;\n};\n\nexport const postBackendWC = (args: ArgumentsPostBackendWC) =>\n fetch(\n args.route,\n {\n body: args.corps,\n credentials: \"same-origin\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n },\n method: \"POST\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const traiteReponseBackendWCSelonCodesHTTP = (corpsReponse: unknown, schemaReponse: GenericSchema) =>\n match(corpsReponse)\n // Réponses problématiques\n .with({ body: P.select(), status: 400 }, isWCError, leveBadRequestError)\n .with({ body: P.select(), status: 401 }, isWCError, leveUnauthorizedError)\n .with({ body: P.select(), status: 404 }, isWCError, leveNotFoundError)\n // Réponse OK (201)\n .with(P._, corpsOkInconnu => parse(schemaReponse, corpsOkInconnu))\n // Réponses inconnues\n .otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>));\n"],"names":["x","z","N","parse","ENTETE_WC_NONCE","leveBadRequestError","leveUnauthorizedError","leveNotFoundError","leveErreur","ErreurInconnue","isWCError","postBackendWC","args","traiteReponseBackendWCSelonCodesHTTP","corpsReponse","schemaReponse","match","P","corpsOkInconnu","e","pipe"],"mappings":"AAqBa,OAAA,KAAAA,MAAA,sBAAA,OAAA,KAAAC,EAAA,KAAAC,MAAA,aAAA,OAAA,KAAAC,MAAA,cAAA,OAAA,KAAAC,MAAA,YAAA,OAAA,KAAAC,EAAA,KAAAC,EAAA,KAAAC,EAAA,KAAAC,EAAA,KAAAC,MAAA,eAAA,OAAA,KAAAC,MAAA,gBAAA,MAAA,eAAA,MAAAC,EAAiBC,GAC5B,MACEA,EAAK,MACL,CACE,KAAMA,EAAK,MACX,YAAa,cACb,QAAS,CACP,OAAU,mBACV,eAAgB,mBAChB,CAACR,CAAe,EAAGQ,EAAK,KAC1B,EACA,OAAQ,OACR,KAAM,cACN,OAAQ,YAAY,QAAQ,GAAI,CAClC,CACF,EAEWC,EAAuC,CAACC,EAAuBC,IAC1EC,EAAMF,CAAY,EAEf,KAAK,CAAE,KAAMG,EAAE,OAAO,EAAG,OAAQ,GAAO,EAAAP,EAAWL,CAAmB,EACtE,KAAK,CAAE,KAAMY,EAAE,SAAU,OAAQ,GAAA,EAAOP,EAAWJ,CAAqB,EACxE,KAAK,CAAE,KAAMW,EAAE,OAAA,EAAU,OAAQ,GAAI,EAAGP,EAAWH,CAAiB,EAEpE,KAAKU,EAAE,EAAqBC,GAAAf,EAAMY,EAAeG,CAAc,CAAC,EAEhE,UAAUC,GAAKC,EAAKD,EAAGV,EAAgBD,CAAwB,CAAC"}

View file

@ -0,0 +1,2 @@
import{x as r}from"./chunk-7BKSRZNG.js";import{z as i,N as a}from"./index.js";import{S as s,A as m}from"./dom.js";import{r as p}from"./dom2.js";import{r as c}from"./utils.js";import"./erreurs.js";import"./exports.js";import"./Either.js";const u=()=>{const e=r(c(s),p),o=new BroadcastChannel("bouton_panier");o.onmessage=n=>{i(n.data).with({donnees:a.select(),type:"maj_panier"},t=>{e.textContent=`cart (${String(t)})`,e.setAttribute(m,String(t>0))}).otherwise(()=>console.debug("lol"))},console.debug("scripts-bouton-panier",e)};document.addEventListener("DOMContentLoaded",()=>{u()});
//# sourceMappingURL=scripts-bouton-panier.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"scripts-bouton-panier.js","sources":["../../src/scripts/scripts-bouton-panier.ts"],"sourcesContent":["/**\n * Scripts pour la mise à jour trans-fenêtres/trans-onglets du Bouton du Panier.\n */\n\nimport { pipe } from \"remeda\";\nimport { match, P } from \"ts-pattern\";\n\nimport { ATTRIBUT_CONTIENT_ARTICLES, SELECTEUR_BOUTON_PANIER } from \"./constantes/dom.ts\";\nimport { recupereElementOuLeve } from \"./lib/dom.ts\";\nimport { recupereElementDocumentEither } from \"./lib/utils.ts\";\n\nconst initialiseBoutonPanier = (): void => {\n /** Le « Bouton » vers le Panier dont le texte est un indicateur du nombre de Produits dedans. */\n const BOUTON_PANIER: HTMLAnchorElement = pipe(\n recupereElementDocumentEither<HTMLAnchorElement>(SELECTEUR_BOUTON_PANIER),\n recupereElementOuLeve,\n );\n\n const canalBoutonPanier: BroadcastChannel = new BroadcastChannel(\"bouton_panier\");\n\n canalBoutonPanier.onmessage = (message: MessageEvent) => {\n match(message.data)\n .with({ donnees: P.select(), type: \"maj_panier\" }, (nombreArticlesPanier: number) => {\n BOUTON_PANIER.textContent = `cart (${String(nombreArticlesPanier)})`;\n BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(nombreArticlesPanier > 0));\n })\n .otherwise(() => console.debug(\"lol\"));\n };\n\n console.debug(\"scripts-bouton-panier\", BOUTON_PANIER);\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n initialiseBoutonPanier();\n});\n"],"names":["initialiseBoutonPanier","BOUTON_PANIER","pipe","recupereElementDocumentEither","SELECTEUR_BOUTON_PANIER","recupereElementOuLeve","canalBoutonPanier","message","match","P","nombreArticlesPanier","ATTRIBUT_CONTIENT_ARTICLES"],"mappings":"6OAWA,MAAMA,EAAyB,IAAY,CAEzC,MAAMC,EAAmCC,EACvCC,EAAiDC,CAAuB,EACxEC,CAAA,EAGIC,EAAsC,IAAI,iBAAiB,eAAe,EAE9DA,EAAA,UAAaC,GAA0B,CACvDC,EAAMD,EAAQ,IAAI,EACf,KAAK,CAAE,QAASE,EAAE,OAAU,EAAA,KAAM,YAAa,EAAIC,GAAiC,CACnFT,EAAc,YAAc,SAAS,OAAOS,CAAoB,CAAC,IACjET,EAAc,aAAaU,EAA4B,OAAOD,EAAuB,CAAC,CAAC,CAAA,CACxF,EACA,UAAU,IAAM,QAAQ,MAAM,KAAK,CAAC,CAAA,EAGjC,QAAA,MAAM,wBAAyBT,CAAa,CACtD,EAEA,SAAS,iBAAiB,mBAAoB,IAAM,CAC3BD,GACzB,CAAC"}

View file

@ -1,2 +1,2 @@
import{r as m,z as R,N as o}from"./index.js";import{x as E}from"./chunk-7BKSRZNG.js";import{p as c}from"./index2.js";import{R as S}from"./api2.js";import{S as d,A as _,a as A}from"./dom.js";import{r as I,a as N}from"./dom2.js";import{r as p,D as h,l as v,a as C,b as T,c as P,E as L,d as b}from"./erreurs.js";import{e as g,a as O}from"./gardes.js";import{p as y}from"./reseau.js";import{W as w}from"./cart-remove-item.js";import{W as U}from"./cart.js";import{i as a}from"./erreurs2.js";import{r as B}from"./utils.js";import{M as D,E as W}from"./Either.js";import"./exports.js";const l=_etats,M=E(B(d),I),k=()=>{console.debug(l),M.forEach(r=>{const i=D.fromNullable(r.getAttribute(_));N(r)(A).ifLeft(()=>p(new h(`L'entrée « ${i.orDefault("CLE_PANIER_INEXISTANTE")} » n'a pas de Bouton de suppression.`))).ifRight(n=>{n.addEventListener("click",()=>{const u=i.ifNothing(()=>{r.remove()}).orDefault("CLE_IMPOSSIBLE");n.textContent="removing...",W.encase(()=>c(w,{key:u})).map(f=>{y({corps:JSON.stringify(f),nonce:l.nonce,route:S}).then(async e=>{g(e)&&v("500 Server Error"),E(await e.json(),m(t=>console.debug(t)),t=>R(t).with({body:o.select(),status:400},a,C).with({body:o.select(),status:401},a,T).with({body:o.select(),status:404},a,P).with(o._,s=>c(U,s)).otherwise(s=>E(s,L,b)),m(()=>r.remove()))}).catch(e=>{O(e)?(p(e),console.error(e)):console.error("e n'est pas une Erreur ?!",e)})})})})})};document.addEventListener("DOMContentLoaded",()=>{k()});
import{r as E}from"./chunk-RU7WR4KH.js";import{x as t}from"./chunk-7BKSRZNG.js";import{p}from"./index2.js";import{R as f}from"./api2.js";import{a as l,b as R,c as C}from"./dom.js";import{a as S,b as u}from"./dom2.js";import{r as n,D as T,l as A}from"./erreurs.js";import{e as N,a as _}from"./gardes.js";import{p as I,t as P}from"./reseau.js";import{W as d}from"./cart.js";import{W as L}from"./cart-remove-item.js";import{a as v}from"./utils.js";import{M as h,E as b}from"./Either.js";import"./exports.js";import"./index.js";import"./erreurs2.js";const m=_etats,g=t(v(l),S),O=()=>{console.debug(m),g.forEach(r=>{const s=h.fromNullable(r.getAttribute(R));u(r)(C).ifLeft(()=>t(new T(`L'entrée « ${s.orDefault("CLE_PANIER_INEXISTANTE")} » n'a pas de Bouton de suppression.`),n)).ifRight(a=>{a.addEventListener("click",()=>{const i=s.ifNothing(()=>{r.remove()}).orDefault("CLE_PANIER_INEXISTANTE");a.textContent="C= C= C= C= C=┌(;・ω・)┘",b.encase(()=>p(L,{key:i})).map(c=>{I({corps:JSON.stringify(c),nonce:m.nonce,route:f}).then(async e=>{N(e)&&A("500 Server Error"),t(await e.json(),E(o=>console.debug(o)),o=>P(o,d),E(()=>r.remove()))}).catch(e=>{_(e)?(n(e),console.error(e)):console.error("e n'est pas une Erreur ?!",e)})})})})})};document.addEventListener("DOMContentLoaded",()=>{O()});
//# sourceMappingURL=scripts-page-panier.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{u as O,r as m,z as I,N as n}from"./index.js";import{x as s}from"./chunk-7BKSRZNG.js";import{p as g}from"./index2.js";import{b as L,c as R}from"./api2.js";import{b as U,c as h,d as v,e as b,f as w,g as u,h as l,i as S,j as y}from"./dom.js";import{b as T,r as _}from"./dom2.js";import{l as P,a as B,b as D,c as x,E as j,d as J,r as M}from"./erreurs.js";import{b as W,e as G,a as k}from"./gardes.js";import{p as q}from"./cart-add-item.js";import{W as z}from"./cart.js";import{i as c}from"./erreurs2.js";import{a as d,r as C}from"./utils.js";import{M as H,E as V}from"./Either.js";import"./exports.js";function p(...r){return O(F,r)}var F=(r,e)=>r[e];const Q=_etats,$=r=>{r.forEach(e=>{e[0].setAttribute(u,"false"),e[1].setAttribute(l,"true")})},A=s(d(U),T),a=s(d(h),T),i=s(d(v),T),K=s(C(b),_),X=s(C(w),_),Y=()=>{const r=new Map;K.forEach((e,t)=>{const o=e.getAttribute("id"),E=X[t];if(!o)throw new Error("Le lien ne dispose pas d'ID !");if(!E)throw new Error("Le lien ne dispose pas de section correspondante !");r.set(o,[e,E]),e.addEventListener("click",N=>{N.preventDefault();const f=e.getAttribute(u)==="true";$(s(r.values(),Array.from)),!f&&(e.setAttribute(u,"true"),E.removeAttribute(l))})}),i.addEventListener("change",e=>{s(e.target,H.fromNullable,t=>t.filter(W),t=>t.map(o=>o.validity.valid),t=>t.ifJust(o=>a.toggleAttribute(S,!o)))}),a.addEventListener("click",e=>Z())},Z=()=>{a.textContent="Adding...",V.encase(()=>q({id:Number(i.value),quantity:1})).map(r=>{fetch(L,{body:JSON.stringify(r),credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[R]:Q.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(async e=>{G(e)&&P("500 Server Error"),s(await e.json(),t=>I(t).with({body:n.select(),status:400},c,B).with({body:n.select(),status:401},c,D).with({body:n.select(),status:404},c,x).with(n._,o=>g(z,o)).otherwise(o=>s(o,j,J)),m(t=>console.debug("Panier",t)),p("items"),p("length"),m(t=>{A.textContent=`cart (${String(t)})`,A.setAttribute(y,String(t>0)),a.textContent="Added to cart!",setTimeout(()=>{i.value=i.options.item(0)?.value??"--",a.toggleAttribute(S,!0),a.textContent="Add to cart"},3e3)}))}).catch(e=>{k(e)?(M(e),console.error(e)):console.error("e n'est pas une Erreur ?!",e),a.textContent="Add to cart"})})};document.addEventListener("DOMContentLoaded",()=>{Y()});
import{u as N,r as p}from"./chunk-RU7WR4KH.js";import{x as s}from"./chunk-7BKSRZNG.js";import{z as O,N as i}from"./index.js";import{p as g}from"./index2.js";import{b as h,c as I}from"./api2.js";import{S as L,d as v,e as U,f as b,g as R,h as u,i as T,j as A}from"./dom.js";import{r as m,a as f}from"./dom2.js";import{l as w,a as y,b as P,c as B,E as D,d as j,r as M}from"./erreurs.js";import{b as x,e as J,a as W}from"./gardes.js";import{W as G}from"./cart.js";import{p as k}from"./cart-add-item.js";import{i as c}from"./erreurs2.js";import{r as d,a as _}from"./utils.js";import{M as q,E as z}from"./Either.js";import"./exports.js";function l(...o){return N(H,o)}var H=(o,e)=>o[e];const V=_etats,F=o=>{o.forEach(e=>{e[0].setAttribute(u,"false"),e[1].setAttribute(T,"true")})};s(d(L),m);const n=s(d(v),m),E=s(d(U),m),Q=s(_(b),f),K=s(_(R),f),X=()=>{const o=new Map;Q.forEach((e,t)=>{const r=e.getAttribute("id"),a=K[t];if(!r)throw new Error("Le lien ne dispose pas d'ID !");if(!a)throw new Error("Le lien ne dispose pas de section correspondante !");o.set(r,[e,a]),e.addEventListener("click",S=>{S.preventDefault();const C=e.getAttribute(u)==="true";F(s(o.values(),Array.from)),!C&&(e.setAttribute(u,"true"),a.removeAttribute(T))})}),E.addEventListener("change",e=>{s(e.target,q.fromNullable,t=>t.filter(x),t=>t.map(r=>r.validity.valid),t=>t.ifJust(r=>n.toggleAttribute(A,!r)))}),n.addEventListener("click",e=>Y())},Y=()=>{n.textContent="Adding...";const o=new BroadcastChannel("bouton_panier");z.encase(()=>k({id:Number(E.value),quantity:1})).map(e=>{fetch(h,{body:JSON.stringify(e),credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[I]:V.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(async t=>{J(t)&&w("500 Server Error"),s(await t.json(),r=>O(r).with({body:i.select(),status:400},c,y).with({body:i.select(),status:401},c,P).with({body:i.select(),status:404},c,B).with(i._,a=>g(G,a)).otherwise(a=>s(a,D,j)),p(r=>console.debug("Panier",r)),l("items"),l("length"),p(r=>{n.textContent="Added to cart!",o.postMessage({donnees:r,type:"maj_panier"}),setTimeout(()=>{E.value=E.options.item(0)?.value??"--",n.toggleAttribute(A,!0),n.textContent="Add to cart"},3e3)}))}).catch(t=>{W(t)?(M(t),console.error(t)):console.error("e n'est pas une Erreur ?!",t),n.textContent="Add to cart"})})};document.addEventListener("DOMContentLoaded",()=>{X()});
//# sourceMappingURL=scripts-page-produit.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{c as e,a as r}from"./dom2.js";import"./chunk-7BKSRZNG.js";import"./erreurs.js";import"./exports.js";import"./Either.js";const p=e(document),u=r(document);export{u as a,p as r};
import{c as e,b as r}from"./dom2.js";import"./chunk-7BKSRZNG.js";import"./erreurs.js";import"./exports.js";import"./Either.js";const p=e(document),u=r(document);export{p as a,u as r};
//# sourceMappingURL=utils.js.map

View file

@ -0,0 +1,20 @@
{
"background_color": "#FFF",
"display": "standalone",
"icons": [
{
"sizes": "192x192",
"src": "img/android-chrome-192x192.png",
"type": "image/png"
},
{
"sizes": "512x512",
"src": "img/android-chrome-512x512.png",
"type": "image/png"
}
],
"name": "Haiku Atelier",
"short_name": "Haiku Atelier",
"theme_color": "#5C0F1F",
"start_url": "https://haikuatelier.fr.ddev.site"
}

View file

@ -30,6 +30,12 @@ function charge_scripts_haiku_atelier_2024(): void {
src: get_template_directory_uri() . "/assets/js/gaffe.js",
version: filemtime(get_template_directory() . "/assets/js/gaffe.js"),
);
wp_enqueue_script_module(
id: "haiku-atelier-2024-bouton-panier",
deps: [],
src: get_template_directory_uri() . "/assets/js/scripts-bouton-panier.js",
version: filemtime(get_template_directory() . "/assets/js/scripts-bouton-panier.js"),
);
}
add_action("wp_enqueue_scripts", "charge_scripts_haiku_atelier_2024");

View file

@ -30,8 +30,8 @@ $contexte["produit"] = $produit;
$contexte["produits_meme_collection"] = $produits_meme_collection;
$contexte["tailles_produit"] = $valeurs_attribut_tailles;
// echo "<pre>"
// print_r($produit);
// echo "<br><br><br><br><br><br><pre>";
// print_r(carbon_get_the_post_meta("photos_colonne_droite"));
// echo "</pre>";
/**

View file

@ -67,7 +67,7 @@ function recupere_informations_produit_page_produit($donnees_produit): mixed {
),
"photos_colonne_droite" => array_map(
$callback = "genere_balise_img",
$array = get_post_meta($post_id = $donnees_produit->get_id(), $key = "_photos_colonne_droite|||0|value"),
$array = carbon_get_the_post_meta("photos_colonne_droite"),
),
"photo_repos" => wp_get_attachment_image(
get_post_meta($post_id = $donnees_produit->get_id(), $key = "_photos_colonne_gauche|||0|value")[0],

View file

@ -5,3 +5,7 @@ body {
color: var(--couleur-noir);
letter-spacing: 0.5px;
}
em {
font-style: italic;
}

View file

@ -19,7 +19,7 @@ import {
} from "@sentry/browser";
import { pipe } from "remeda";
import type { BrowserTransportOptions } from "./types/sentry";
import type { BrowserTransportOptions } from "./lib/types/sentry";
import { ENTETE_GLITCHTIP_RATE_LIMITS, ENTETE_GLITCHTIP_RETRY_AFTER } from "./constantes/api";

View file

@ -1,7 +1,7 @@
import { Either, identity, Left, Right } from "purify-ts";
import { isEmpty, isNonNull, pipe } from "remeda";
import type { ElementParent } from "../types/dom.d.ts";
import type { ElementParent } from "./types/dom.d.ts";
import { creeSyntaxError, ERREUR_SELECTEUR_INEXISTANT, ERREUR_SYNTAXE_INVALIDE, reporteEtLeveErreur } from "./erreurs";

View file

@ -4,7 +4,7 @@
import { captureException } from "@sentry/browser";
import type { WCErrorBody } from "../types/api/erreurs";
import type { WCErrorBody } from "./types/api/erreurs";
/* Messages d'erreur */
export const ERREUR_SYNTAXE_INVALIDE = (selecteur: string): string => `Le selecteur "${selecteur}" est invalide`;

View file

@ -1,4 +1,4 @@
import type { Constructor } from "../types/classes";
import type { Constructor } from "./types/classes";
const estElement = <T extends HTMLElement>(typeElement: Constructor<T>) => (element: unknown): element is T =>
element instanceof typeElement;

View file

@ -1,4 +1,17 @@
import { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from "../constantes/api.ts";
import { pipe } from "remeda";
import { match, P } from "ts-pattern";
import { type GenericSchema, parse } from "valibot";
import { ENTETE_WC_NONCE } from "../constantes/api.ts";
import {
ErreurInconnue,
leveBadRequestError,
leveErreur,
leveNotFoundError,
leveUnauthorizedError,
type UnknownError,
} from "./erreurs.ts";
import { isWCError } from "./schemas/erreurs.ts";
type ArgumentsPostBackendWC = {
corps: BodyInit;
@ -22,3 +35,14 @@ export const postBackendWC = (args: ArgumentsPostBackendWC) =>
signal: AbortSignal.timeout(5000),
},
);
export const traiteReponseBackendWCSelonCodesHTTP = (corpsReponse: unknown, schemaReponse: GenericSchema) =>
match(corpsReponse)
// Réponses problématiques
.with({ body: P.select(), status: 400 }, isWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, isWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, isWCError, leveNotFoundError)
// Réponse OK (201)
.with(P._, corpsOkInconnu => parse(schemaReponse, corpsOkInconnu))
// Réponses inconnues
.otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>));

View file

@ -1,6 +1,6 @@
import * as v from "valibot";
import type { WCStoreCartAddItemArgs } from "../../types/api/cart-add-item";
import type { WCStoreCartAddItemArgs } from "../types/api/cart-add-item";
export const WCStoreCartAddItemArgsItemsSchema = v.object({
/** Variation attribute name. */

View file

@ -1,6 +1,6 @@
import * as v from "valibot";
import type { WCStoreCartRemoveItemArgs } from "../../types/api/cart-remove-item";
import type { WCStoreCartRemoveItemArgs } from "../types/api/cart-remove-item";
export const WCStoreCartRemoveItemArgsSchema = v.object({
/** Unique identifier (key) for the basket item. */

View file

@ -1,6 +1,6 @@
import * as v from "valibot";
import type { WCError } from "../../types/api/erreurs";
import type { WCError } from "../types/api/erreurs";
export const WCErrorBodySchema = v.object({
code: v.string(),

View file

@ -1,9 +1,6 @@
import type { InferOutput } from "valibot";
import type {
WCStoreCartAddItemArgsItemsSchema,
WCStoreCartAddItemArgsSchema,
} from "../../lib/schemas/cart-add-item.ts";
import type { WCStoreCartAddItemArgsItemsSchema, WCStoreCartAddItemArgsSchema } from "../../schemas/cart-add-item.ts";
export type WCStoreCartAddItemArgsItems = InferOutput<typeof WCStoreCartAddItemArgsItemsSchema>;
export type WCStoreCartAddItemArgs = InferOutput<typeof WCStoreCartAddItemArgsSchema>;

View file

@ -1,5 +1,5 @@
import type { InferOutput } from "valibot";
import type { WCStoreCartRemoveItemArgsSchema } from "../../lib/schemas/cart-remove-item.ts";
import type { WCStoreCartRemoveItemArgsSchema } from "../../schemas/cart-remove-item.ts";
export type WCStoreCartRemoveItemArgs = InferOutput<typeof WCStoreCartRemoveItemArgsSchema>;

View file

@ -1,5 +1,5 @@
import type { InferOutput } from "valibot";
import type { WCStoreCartSchema } from "../../lib/schemas/cart.ts";
import type { WCStoreCartSchema } from "../../schemas/cart.ts";
export type WCStoreCart = InferOutput<typeof WCStoreCartSchema>;

View file

@ -1,6 +1,6 @@
import type { InferOutput } from "valibot";
import type { WCErrorBodySchema, WCErrorSchema } from "../../lib/schemas/erreurs.ts";
import type { WCErrorBodySchema, WCErrorSchema } from "../../schemas/erreurs.ts";
export type WCErrorBody = InferOutput<typeof WCErrorBodySchema>;
export type WCError = InferOutput<typeof WCErrorSchema>;

View file

@ -0,0 +1,35 @@
/**
* Scripts pour la mise à jour trans-fenêtres/trans-onglets du Bouton du Panier.
*/
import { pipe } from "remeda";
import { match, P } from "ts-pattern";
import { ATTRIBUT_CONTIENT_ARTICLES, SELECTEUR_BOUTON_PANIER } from "./constantes/dom.ts";
import { recupereElementOuLeve } from "./lib/dom.ts";
import { recupereElementDocumentEither } from "./lib/utils.ts";
const initialiseBoutonPanier = (): void => {
/** Le « Bouton » vers le Panier dont le texte est un indicateur du nombre de Produits dedans. */
const BOUTON_PANIER: HTMLAnchorElement = pipe(
recupereElementDocumentEither<HTMLAnchorElement>(SELECTEUR_BOUTON_PANIER),
recupereElementOuLeve,
);
const canalBoutonPanier: BroadcastChannel = new BroadcastChannel("bouton_panier");
canalBoutonPanier.onmessage = (message: MessageEvent) => {
match(message.data)
.with({ donnees: P.select(), type: "maj_panier" }, (nombreArticlesPanier: number) => {
BOUTON_PANIER.textContent = `cart (${String(nombreArticlesPanier)})`;
BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(nombreArticlesPanier > 0));
})
.otherwise(() => console.debug("lol"));
};
console.debug("scripts-bouton-panier", BOUTON_PANIER);
};
document.addEventListener("DOMContentLoaded", () => {
initialiseBoutonPanier();
});

View file

@ -1,9 +1,8 @@
import { Either, Maybe } from "purify-ts";
import { pipe, tap } from "remeda";
import { match, P } from "ts-pattern";
import { parse } from "valibot";
import type { WCStoreCartRemoveItemArgs } from "./types/api/cart-remove-item";
import type { WCStoreCartRemoveItemArgs } from "./lib/types/api/cart-remove-item";
import { ROUTE_API_RETIRE_ARTICLE_PANIER } from "./constantes/api.ts";
import {
@ -12,22 +11,11 @@ import {
SELECTEUR_ENTREES_PANIER,
} from "./constantes/dom.ts";
import { recupereElementAvecSelecteur, recupereElementsOuLeve } from "./lib/dom.ts";
import {
DOMElementAbsentError,
ErreurInconnue,
leveBadRequestError,
leveErreur,
leveNotFoundError,
leveServerError,
leveUnauthorizedError,
reporteErreur,
type UnknownError,
} from "./lib/erreurs.ts";
import { DOMElementAbsentError, leveServerError, reporteErreur } from "./lib/erreurs.ts";
import { estError, estReponse500 } from "./lib/gardes.ts";
import { postBackendWC } from "./lib/reseau.ts";
import { WCStoreCartRemoveItemArgsSchema } from "./lib/schemas/cart-remove-item.ts";
import { postBackendWC, traiteReponseBackendWCSelonCodesHTTP } from "./lib/reseau.ts";
import { WCStoreCartSchema } from "./lib/schemas/cart.ts";
import { isWCError } from "./lib/schemas/erreurs.ts";
import { WCStoreCartRemoveItemArgsSchema } from "./lib/schemas/cart-remove-item.ts";
import { recupereElementsDocumentEither } from "./lib/utils.ts";
/**
@ -73,26 +61,28 @@ const initialiseScriptsPagePanier = (): void => {
recupereElementAvecSelecteur(entree)<HTMLButtonElement>(SELECTEUR_BOUTON_SUPPRESSION_PANIER)
// Remplace la SyntaxError par une Erreur plus détaillée et parlante
.ifLeft(() =>
reporteErreur(
pipe(
new DOMElementAbsentError(
`L'entrée « ${maybeClePanier.orDefault("CLE_PANIER_INEXISTANTE")} » n'a pas de Bouton de suppression.`,
),
reporteErreur,
)
)
// Créé l'Écouteur d'Événement pour le click sur le Bouton
.ifRight((boutonPanier: HTMLButtonElement) => {
boutonPanier.addEventListener("click", (): void => {
// Retire l'entrée du DOM si la clé Panier n'existe pas et arrête précocement
const clePanier = maybeClePanier
.ifNothing(() => {
entree.remove();
return;
})
.orDefault("CLE_IMPOSSIBLE");
const clePanier = maybeClePanier.ifNothing(() => {
entree.remove();
return;
})
.orDefault("CLE_PANIER_INEXISTANTE");
// TODO: Créer une boucle d'animation
// Affiche un texte de chargement dans le Bouton
boutonPanier.textContent = "removing...";
boutonPanier.textContent = "C= C= C= C= C=┌(;・ω・)┘";
// Chaîne de la requête
Either
.encase<Error, WCStoreCartRemoveItemArgs>(() => parse(WCStoreCartRemoveItemArgsSchema, { key: clePanier }))
.map(
@ -111,16 +101,9 @@ const initialiseScriptsPagePanier = (): void => {
await reponse.json(),
tap((a) => console.debug(a)),
// Traite tous les codes HTTPs possibles
(corpsReponse: unknown) =>
match(corpsReponse)
// Réponses problématiques
.with({ body: P.select(), status: 400 }, isWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, isWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, isWCError, leveNotFoundError)
// Réponse OK (201)
.with(P._, corpsOkInconnu => parse(WCStoreCartSchema, corpsOkInconnu))
// Réponses inconnues
.otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>)),
(corpsReponse: unknown) => traiteReponseBackendWCSelonCodesHTTP(corpsReponse, WCStoreCartSchema),
// TODO: Mettre à jour la quantité dans le bouton Panier
// Retire l'entrée du Panier du DOM
tap(() => entree.remove()),
);
})
@ -134,11 +117,6 @@ const initialiseScriptsPagePanier = (): void => {
});
},
);
// Retire l'entrée du Panier du DOM
// setTimeout(() => {
// entree.remove();
// }, 3200);
});
});
});

View file

@ -5,8 +5,8 @@ import { pipe, prop, tap } from "remeda";
import { match, P } from "ts-pattern";
import { parse } from "valibot";
import type { WCStoreCart } from "./types/api/cart";
import type { WCStoreCartAddItemArgs } from "./types/api/cart-add-item.ts";
import type { WCStoreCart } from "./lib/types/api/cart";
import type { WCStoreCartAddItemArgs } from "./lib/types/api/cart-add-item.ts";
import { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from "./constantes/api.ts";
import {
@ -32,8 +32,8 @@ import {
type UnknownError,
} from "./lib/erreurs.ts";
import { estError, estHTMLSelectElement, estReponse500 } from "./lib/gardes.ts";
import { parseWCStoreCartAddItemArgs } from "./lib/schemas/cart-add-item.ts";
import { WCStoreCartSchema } from "./lib/schemas/cart.ts";
import { parseWCStoreCartAddItemArgs } from "./lib/schemas/cart-add-item.ts";
import { isWCError } from "./lib/schemas/erreurs.ts";
import { recupereElementDocumentEither, recupereElementsDocumentEither } from "./lib/utils.ts";
@ -149,6 +149,9 @@ const ajouteProduitAuPanier = () => {
/* État de chargement */
BOUTON_AJOUT_PANIER.textContent = "Adding...";
// Initialise le BroadcastChanel du Bouton du Panier
const canalBoutonPanier: BroadcastChannel = new BroadcastChannel("bouton_panier");
// TODO: Rendre ça moins long
// TODO: Créer une méthode pour fetch()
// TODO: Créer une méthode pour traiter les codes HTTP
@ -206,10 +209,14 @@ const ajouteProduitAuPanier = () => {
* 2. Met à jour le Bouton d'ajout au Panier avec un message de succès
* 3. (3 secondes) Réinitialise le Sélecteur de Quantité et le Bouton d'Ajout au Panier
*/
BOUTON_PANIER.textContent = `cart (${String(nombreArticlesPanier)})`;
BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(nombreArticlesPanier > 0));
// BOUTON_PANIER.textContent = `cart (${String(nombreArticlesPanier)})`;
// BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(nombreArticlesPanier > 0));
BOUTON_AJOUT_PANIER.textContent = "Added to cart!";
// TODO: Test
canalBoutonPanier.postMessage({ donnees: nombreArticlesPanier, type: "maj_panier" });
// TODO: Prévoir un cas où ce Timeout est annulé quand l'Utilisateur agit avant sur le Sélecteur
setTimeout(() => {
SELECTEUR_VARIATION.value = SELECTEUR_VARIATION.options.item(0)?.value ?? "--";
BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, true);

View file

@ -1,13 +1,15 @@
<!DOCTYPE html>
<head>
<meta charset="{{ site.charset }}" />
<meta name="description" content="{{ site.description }}" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="apple-touch-icon" href="{{site.theme.link}}/assets/img/apple-touch-icon.png" />
<link rel="icon" href="{{site.theme.link}}/assets/img/favicon.ico" sizes="48x48" />
<link rel="icon" href="{{site.theme.link}}/assets/img/favicon.svg" type="image/svg+xml" />
<link rel="manifest" href="{{site.theme.link}}/assets/site.webmanifest" />
{# <link
href="{{ site.theme.link }}/static/img/favicon.svg"
rel="shortcut icon"

View file

@ -62,7 +62,6 @@
</section>
<section class="actions-produit">
{# TODO: Ajouter au Panier sans rafraîchir la Page #}
<button class="bouton-case-pleine" disabled id="bouton-ajout-panier" type="button">Add to cart</button>
</section>
</div>