fix(catégorie-produits) corrige l'affichage et le fonctionnement

This commit is contained in:
gcch 2024-10-27 11:52:03 +01:00
commit 4dd34abcb2
35 changed files with 112 additions and 75 deletions

View file

@ -44,4 +44,4 @@ function charge_scripts_page_boutique(): void {
add_action("wp_enqueue_scripts", "charge_scripts_page_boutique");
// Rendu
Timber::render($filenames = $modeles, $data = $contexte);
Timber::render(filenames: $modeles, data: $contexte);

View file

@ -59,7 +59,7 @@
"name": "dom",
"src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts",
"isEntry": true,
"integrity": "sha512-sBvmh7rcrkOQYptsjBeL4VAI014hZuVMxVv+xVSWW/QeiPFSuzzRPZvrgeESMc5d/AuZjjXMx8RIwttwCrTExA=="
"integrity": "sha512-LNBiVSz8Rz7341AqVtU/QJQ+5f5/dsQJNo0r+SodLcv1kaqP8urS8/ZCvDjFiZOKVnF0G9eYMHOM0BWW+29rwQ=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts": {
"file": "messages3.js",
@ -352,7 +352,7 @@
"_pipe.XPB0wEfw.js",
"_Either.wHNxn7Os.js"
],
"integrity": "sha512-HOmTEJ5Q/hJb0Ev9jzBh/IMqAtYVwihrHzbwi5c6A/fo4fTgHOw4IhIyBE+U5BvTZNNnLaOg29+Btvv2hJECxg=="
"integrity": "sha512-HLY61VTmZ296Y9acLq7HubLxScSHkCMOQ8cgZapmHMmvZTgB6gMp+B+uA023J4k2joVa2lcXZq7aU6oEGbGbMA=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-a-propos.ts": {
"file": "scripts-page-a-propos.js",
@ -402,7 +402,7 @@
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/products.ts"
],
"integrity": "sha512-p1xnli/+LIbtBGD5fzqLpPiFBi+uyTH3JNgBneeKjEOahuFHUq809jyNqWUdSExRdZVLDaa8dzf5I5OWswxHbg=="
"integrity": "sha512-Mf0HRdID1HQJgsTvS3RCaccdfxG7rqNI5cSY6iIJmQgQVZD0OdX4taQMCamzGhVhIm9BO1UU/ueRY/BCSxOH/Q=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts": {
"file": "scripts-page-panier.js",
@ -435,7 +435,7 @@
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts"
],
"integrity": "sha512-ioKkzTgEAM22Qovjy7beC7F2qKksda3bns0RvR8KP1w3OBiSXyWXdXXtX9jZ4hzMENeHycR9hmW1rd8L7MiW4Q=="
"integrity": "sha512-dTOpJIa6HVma1+FBxOKQvhhMJdMz9hNz/XGLYiljbEwVMMCq/Gw2d05KJ5cr58FRp5MoPMomq0UhPKUhUMEm/w=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts": {
"file": "scripts-page-produit.js",
@ -465,6 +465,6 @@
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts"
],
"integrity": "sha512-vIONGYucJ7URVdvDdIX0RWKjtljzbNUezIMmwA8ls/BSLqWhetweZ4hvNweF1LL/1XB01EaS4ZAxhG02szb2qw=="
"integrity": "sha512-o7HIHj2on+5ihVMOUbyR3xw048EFnGORL4HiMDknVDYCUNNii2ZwNLm5DESxfHbirK5e900lKm/SDsXixtQYyQ=="
}
}

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":"cart-update-item.js","sources":["../../src/scripts/lib/schemas/api/cart-update-item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nexport const WCStoreCartUpdateItemArgsSchema = v.object({\n /** Unique identifier (key) for the basket item to update. */\n key: v.string(),\n /** New quantity of the item in the basket. */\n quantity: v.pipe(v.number(), v.minValue(1)),\n});\n"],"names":["v.object","v.string","v.pipe","v.number","v.minValue"],"mappings":";AAEa,MAAA,kCAAkCA,OAAS;AAAA;AAAA,EAEtD,KAAKC,OAAS;AAAA;AAAA,EAEd,UAAUC,KAAOC,OAAY,GAAAC,SAAW,CAAC,CAAC;AAC5C,CAAC;"}
{"version":3,"file":"cart-update-item.js","sources":["../../src/scripts/lib/schemas/api/cart-update-item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nexport const WCStoreCartUpdateItemArgsSchema = v.object({\n /** Unique identifier (key) for the basket item to update. */\n key: v.string(),\n /** New quantity of the item in the basket. */\n quantity: v.pipe(v.number(), v.minValue(1)),\n});\n"],"names":["v.object","v.string","v.pipe","v.number","v.minValue"],"mappings":";AAEa,MAAA,kCAAkCA,OAAS;AAAA;AAAA,EAEtD,KAAKC,OAAS;AAAA;AAAA,EAEd,UAAUC,KAAOC,UAAYC,SAAW,CAAC,CAAC;AAC5C,CAAC;"}

View file

@ -1 +1 @@
{"version":3,"file":"cart.js","sources":["../../src/scripts/lib/schemas/api/cart.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport { CATALOG_VISIBILITIES } from \"../../../constantes/cart.ts\";\nimport { WCStoreBillingAddressSchema, WCStoreShippingAddressSchema } from \"./adresses.ts\";\nimport { WCStoreShippingRateSchema } from \"./couts-livraison.ts\";\n\nexport const WCStoreCartItemTotalsSchema = v.object({\n currency_code: v.string(),\n currency_decimal_separator: v.string(),\n currency_minor_unit: v.number(),\n currency_prefix: v.string(),\n currency_suffix: v.string(),\n currency_symbol: v.string(),\n currency_thousand_separator: v.string(),\n line_subtotal: v.string(),\n line_subtotal_tax: v.string(),\n line_total: v.string(),\n line_total_tax: v.string(),\n});\n\nexport const WCStoreCartItemSchema = v.object({\n backorders_allowed: v.boolean(),\n catalog_visibility: v.enum(CATALOG_VISIBILITIES),\n description: v.string(),\n extensions: v.unknown(),\n id: v.number(),\n images: v.array(v.unknown()),\n item_data: v.array(v.unknown()),\n key: v.string(),\n low_stock_remaining: v.union([v.null()]),\n name: v.string(),\n permalink: v.pipe(v.string(), v.url()),\n prices: v.unknown(),\n quantity: v.number(),\n quantity_limits: v.unknown(),\n short_description: v.string(),\n show_backorder_badge: v.boolean(),\n sku: v.string(),\n sold_individually: v.boolean(),\n totals: WCStoreCartItemTotalsSchema,\n type: v.string(),\n variation: v.array(v.unknown()),\n});\n\nexport const WCStoreCartTotalsSchema = v.object({\n currency_code: v.string(),\n currency_decimal_separator: v.string(),\n currency_minor_unit: v.number(),\n currency_prefix: v.string(),\n currency_suffix: v.string(),\n currency_symbol: v.string(),\n currency_thousand_separator: v.string(),\n tax_lines: v.array(v.unknown()),\n total_discount: v.string(),\n total_discount_tax: v.string(),\n total_fees: v.string(),\n total_fees_tax: v.string(),\n total_items: v.string(),\n total_items_tax: v.string(),\n total_price: v.string(),\n total_shipping: v.union([v.string(), v.null()]),\n total_shipping_tax: v.union([v.string(), v.null()]),\n total_tax: v.string(),\n});\n\nexport const WCStoreCartSchema = v.object({\n billing_address: WCStoreBillingAddressSchema,\n coupons: v.unknown(),\n cross_sells: v.unknown(),\n errors: v.unknown(),\n extensions: v.unknown(),\n fees: v.unknown(),\n has_calculated_shipping: v.boolean(),\n items: v.array(WCStoreCartItemSchema),\n items_count: v.pipe(v.number(), v.integer()),\n items_weight: v.pipe(v.number(), v.integer()),\n needs_payment: v.boolean(),\n needs_shipping: v.boolean(),\n payment_methods: v.unknown(),\n payment_requirements: v.unknown(),\n shipping_address: WCStoreShippingAddressSchema,\n shipping_rates: v.array(WCStoreShippingRateSchema),\n totals: WCStoreCartTotalsSchema,\n});\n"],"names":["v.object","v.string","v.number","v.boolean","v.enum","v.unknown","v.array","v.union","v.null","v.pipe","v.url","v.integer"],"mappings":";;;;AAMa,MAAA,8BAA8BA,OAAS;AAAA,EAClD,eAAeC,OAAS;AAAA,EACxB,4BAA4BA,OAAS;AAAA,EACrC,qBAAqBC,OAAS;AAAA,EAC9B,iBAAiBD,OAAS;AAAA,EAC1B,iBAAiBA,OAAS;AAAA,EAC1B,iBAAiBA,OAAS;AAAA,EAC1B,6BAA6BA,OAAS;AAAA,EACtC,eAAeA,OAAS;AAAA,EACxB,mBAAmBA,OAAS;AAAA,EAC5B,YAAYA,OAAS;AAAA,EACrB,gBAAgBA,OAAS;AAC3B,CAAC;AAEY,MAAA,wBAAwBD,OAAS;AAAA,EAC5C,oBAAoBG,QAAU;AAAA,EAC9B,oBAAoBC,MAAO,oBAAoB;AAAA,EAC/C,aAAaH,OAAS;AAAA,EACtB,YAAYI,QAAU;AAAA,EACtB,IAAIH,OAAS;AAAA,EACb,QAAQI,MAAQD,SAAW;AAAA,EAC3B,WAAWC,MAAQD,SAAW;AAAA,EAC9B,KAAKJ,OAAS;AAAA,EACd,qBAAqBM,MAAQ,CAACC,MAAE,CAAM,CAAC;AAAA,EACvC,MAAMP,OAAS;AAAA,EACf,WAAWQ,KAAOR,OAAY,GAAAS,KAAO;AAAA,EACrC,QAAQL,QAAU;AAAA,EAClB,UAAUH,OAAS;AAAA,EACnB,iBAAiBG,QAAU;AAAA,EAC3B,mBAAmBJ,OAAS;AAAA,EAC5B,sBAAsBE,QAAU;AAAA,EAChC,KAAKF,OAAS;AAAA,EACd,mBAAmBE,QAAU;AAAA,EAC7B,QAAQ;AAAA,EACR,MAAMF,OAAS;AAAA,EACf,WAAWK,MAAQD,SAAW;AAChC,CAAC;AAEY,MAAA,0BAA0BL,OAAS;AAAA,EAC9C,eAAeC,OAAS;AAAA,EACxB,4BAA4BA,OAAS;AAAA,EACrC,qBAAqBC,OAAS;AAAA,EAC9B,iBAAiBD,OAAS;AAAA,EAC1B,iBAAiBA,OAAS;AAAA,EAC1B,iBAAiBA,OAAS;AAAA,EAC1B,6BAA6BA,OAAS;AAAA,EACtC,WAAWK,MAAQD,SAAW;AAAA,EAC9B,gBAAgBJ,OAAS;AAAA,EACzB,oBAAoBA,OAAS;AAAA,EAC7B,YAAYA,OAAS;AAAA,EACrB,gBAAgBA,OAAS;AAAA,EACzB,aAAaA,OAAS;AAAA,EACtB,iBAAiBA,OAAS;AAAA,EAC1B,aAAaA,OAAS;AAAA,EACtB,gBAAgBM,MAAQ,CAACN,UAAYO,MAAQ,CAAA,CAAC;AAAA,EAC9C,oBAAoBD,MAAQ,CAACN,UAAYO,MAAQ,CAAA,CAAC;AAAA,EAClD,WAAWP,OAAS;AACtB,CAAC;AAEY,MAAA,oBAAoBD,OAAS;AAAA,EACxC,iBAAiB;AAAA,EACjB,SAASK,QAAU;AAAA,EACnB,aAAaA,QAAU;AAAA,EACvB,QAAQA,QAAU;AAAA,EAClB,YAAYA,QAAU;AAAA,EACtB,MAAMA,QAAU;AAAA,EAChB,yBAAyBF,QAAU;AAAA,EACnC,OAAOG,MAAQ,qBAAqB;AAAA,EACpC,aAAaG,KAAOP,OAAY,GAAAS,SAAW;AAAA,EAC3C,cAAcF,KAAOP,OAAY,GAAAS,SAAW;AAAA,EAC5C,eAAeR,QAAU;AAAA,EACzB,gBAAgBA,QAAU;AAAA,EAC1B,iBAAiBE,QAAU;AAAA,EAC3B,sBAAsBA,QAAU;AAAA,EAChC,kBAAkB;AAAA,EAClB,gBAAgBC,MAAQ,yBAAyB;AAAA,EACjD,QAAQ;AACV,CAAC;"}
{"version":3,"file":"cart.js","sources":["../../src/scripts/lib/schemas/api/cart.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport { CATALOG_VISIBILITIES } from \"../../../constantes/cart.ts\";\nimport { WCStoreBillingAddressSchema, WCStoreShippingAddressSchema } from \"./adresses.ts\";\nimport { WCStoreShippingRateSchema } from \"./couts-livraison.ts\";\n\nexport const WCStoreCartItemTotalsSchema = v.object({\n currency_code: v.string(),\n currency_decimal_separator: v.string(),\n currency_minor_unit: v.number(),\n currency_prefix: v.string(),\n currency_suffix: v.string(),\n currency_symbol: v.string(),\n currency_thousand_separator: v.string(),\n line_subtotal: v.string(),\n line_subtotal_tax: v.string(),\n line_total: v.string(),\n line_total_tax: v.string(),\n});\n\nexport const WCStoreCartItemSchema = v.object({\n backorders_allowed: v.boolean(),\n catalog_visibility: v.enum(CATALOG_VISIBILITIES),\n description: v.string(),\n extensions: v.unknown(),\n id: v.number(),\n images: v.array(v.unknown()),\n item_data: v.array(v.unknown()),\n key: v.string(),\n low_stock_remaining: v.union([v.null()]),\n name: v.string(),\n permalink: v.pipe(v.string(), v.url()),\n prices: v.unknown(),\n quantity: v.number(),\n quantity_limits: v.unknown(),\n short_description: v.string(),\n show_backorder_badge: v.boolean(),\n sku: v.string(),\n sold_individually: v.boolean(),\n totals: WCStoreCartItemTotalsSchema,\n type: v.string(),\n variation: v.array(v.unknown()),\n});\n\nexport const WCStoreCartTotalsSchema = v.object({\n currency_code: v.string(),\n currency_decimal_separator: v.string(),\n currency_minor_unit: v.number(),\n currency_prefix: v.string(),\n currency_suffix: v.string(),\n currency_symbol: v.string(),\n currency_thousand_separator: v.string(),\n tax_lines: v.array(v.unknown()),\n total_discount: v.string(),\n total_discount_tax: v.string(),\n total_fees: v.string(),\n total_fees_tax: v.string(),\n total_items: v.string(),\n total_items_tax: v.string(),\n total_price: v.string(),\n total_shipping: v.union([v.string(), v.null()]),\n total_shipping_tax: v.union([v.string(), v.null()]),\n total_tax: v.string(),\n});\n\nexport const WCStoreCartSchema = v.object({\n billing_address: WCStoreBillingAddressSchema,\n coupons: v.unknown(),\n cross_sells: v.unknown(),\n errors: v.unknown(),\n extensions: v.unknown(),\n fees: v.unknown(),\n has_calculated_shipping: v.boolean(),\n items: v.array(WCStoreCartItemSchema),\n items_count: v.pipe(v.number(), v.integer()),\n items_weight: v.pipe(v.number(), v.integer()),\n needs_payment: v.boolean(),\n needs_shipping: v.boolean(),\n payment_methods: v.unknown(),\n payment_requirements: v.unknown(),\n shipping_address: WCStoreShippingAddressSchema,\n shipping_rates: v.array(WCStoreShippingRateSchema),\n totals: WCStoreCartTotalsSchema,\n});\n"],"names":["v.object","v.string","v.number","v.boolean","v.enum","v.unknown","v.array","v.union","v.null","v.pipe","v.url","v.integer"],"mappings":";;;;AAMa,MAAA,8BAA8BA,OAAS;AAAA,EAClD,eAAeC,OAAS;AAAA,EACxB,4BAA4BA,OAAS;AAAA,EACrC,qBAAqBC,OAAS;AAAA,EAC9B,iBAAiBD,OAAS;AAAA,EAC1B,iBAAiBA,OAAS;AAAA,EAC1B,iBAAiBA,OAAS;AAAA,EAC1B,6BAA6BA,OAAS;AAAA,EACtC,eAAeA,OAAS;AAAA,EACxB,mBAAmBA,OAAS;AAAA,EAC5B,YAAYA,OAAS;AAAA,EACrB,gBAAgBA,OAAS;AAC3B,CAAC;AAEY,MAAA,wBAAwBD,OAAS;AAAA,EAC5C,oBAAoBG,QAAU;AAAA,EAC9B,oBAAoBC,MAAO,oBAAoB;AAAA,EAC/C,aAAaH,OAAS;AAAA,EACtB,YAAYI,QAAU;AAAA,EACtB,IAAIH,OAAS;AAAA,EACb,QAAQI,MAAQD,SAAW;AAAA,EAC3B,WAAWC,MAAQD,SAAW;AAAA,EAC9B,KAAKJ,OAAS;AAAA,EACd,qBAAqBM,MAAQ,CAACC,MAAE,CAAM,CAAC;AAAA,EACvC,MAAMP,OAAS;AAAA,EACf,WAAWQ,KAAOR,OAAY,GAAAS,KAAO;AAAA,EACrC,QAAQL,QAAU;AAAA,EAClB,UAAUH,OAAS;AAAA,EACnB,iBAAiBG,QAAU;AAAA,EAC3B,mBAAmBJ,OAAS;AAAA,EAC5B,sBAAsBE,QAAU;AAAA,EAChC,KAAKF,OAAS;AAAA,EACd,mBAAmBE,QAAU;AAAA,EAC7B,QAAQ;AAAA,EACR,MAAMF,OAAS;AAAA,EACf,WAAWK,MAAQD,QAAW,CAAA;AAChC,CAAC;AAEY,MAAA,0BAA0BL,OAAS;AAAA,EAC9C,eAAeC,OAAS;AAAA,EACxB,4BAA4BA,OAAS;AAAA,EACrC,qBAAqBC,OAAS;AAAA,EAC9B,iBAAiBD,OAAS;AAAA,EAC1B,iBAAiBA,OAAS;AAAA,EAC1B,iBAAiBA,OAAS;AAAA,EAC1B,6BAA6BA,OAAS;AAAA,EACtC,WAAWK,MAAQD,SAAW;AAAA,EAC9B,gBAAgBJ,OAAS;AAAA,EACzB,oBAAoBA,OAAS;AAAA,EAC7B,YAAYA,OAAS;AAAA,EACrB,gBAAgBA,OAAS;AAAA,EACzB,aAAaA,OAAS;AAAA,EACtB,iBAAiBA,OAAS;AAAA,EAC1B,aAAaA,OAAS;AAAA,EACtB,gBAAgBM,MAAQ,CAACN,UAAYO,MAAQ,CAAA,CAAC;AAAA,EAC9C,oBAAoBD,MAAQ,CAACN,UAAYO,MAAQ,CAAA,CAAC;AAAA,EAClD,WAAWP,OAAS;AACtB,CAAC;AAEY,MAAA,oBAAoBD,OAAS;AAAA,EACxC,iBAAiB;AAAA,EACjB,SAASK,QAAU;AAAA,EACnB,aAAaA,QAAU;AAAA,EACvB,QAAQA,QAAU;AAAA,EAClB,YAAYA,QAAU;AAAA,EACtB,MAAMA,QAAU;AAAA,EAChB,yBAAyBF,QAAU;AAAA,EACnC,OAAOG,MAAQ,qBAAqB;AAAA,EACpC,aAAaG,KAAOP,OAAY,GAAAS,SAAW;AAAA,EAC3C,cAAcF,KAAOP,OAAY,GAAAS,SAAW;AAAA,EAC5C,eAAeR,QAAU;AAAA,EACzB,gBAAgBA,QAAU;AAAA,EAC1B,iBAAiBE,QAAU;AAAA,EAC3B,sBAAsBA,QAAU;AAAA,EAChC,kBAAkB;AAAA,EAClB,gBAAgBC,MAAQ,yBAAyB;AAAA,EACjD,QAAQ;AACV,CAAC;"}

View file

@ -6,8 +6,9 @@ const ATTRIBUT_CONTIENT_ARTICLES = "data-contient-articles";
const ATTRIBUT_DESACTIVE = "disabled";
const ATTRIBUT_HIDDEN = "hidden";
const ATTRIBUT_INDEX = "data-index";
const ATTRIBUT_PAGE = "data-page";
const ATTRIBUT_MENU_MOBILE_ACTIVE = "data-menu-mobile-active";
const ATTRIBUT_PAGE = "data-page";
const ATTRIBUT_ID_CATEGORIE_PRODUITS = "data-id-categorie-produits";
const SELECTEUR_BOUTON_MENU_MOBILE = "#bouton-menu-mobile";
const SELECTEUR_BOUTON_PANIER = ".compte-panier a[rel='cart']";
const SELECTEUR_MENU_MOBILE = "#menu-mobile";
@ -36,14 +37,15 @@ const SELECTEUR_GRILLE_PRODUITS = "#page-boutique .grille-produits";
const SELECTEUR_BOUTON_PLUS_PRODUITS = "#page-boutique #bouton-plus-de-produits";
export {
ATTRIBUT_CONTIENT_ARTICLES as A,
SELECTEUR_BOUTON_AJOUT_PANIER as B,
SELECTEUR_SELECTEUR_QUANTITE as C,
SELECTEUR_LIENS_ONGLETS as D,
SELECTEUR_SECTIONS_CONTENUS as E,
ATTRIBUT_ARIA_SELECTED as F,
SELECTEUR_BOUTON_MENU_MOBILE as G,
SELECTEUR_MENU_MOBILE as H,
ATTRIBUT_MENU_MOBILE_ACTIVE as I,
ATTRIBUT_DESACTIVE as B,
SELECTEUR_BOUTON_AJOUT_PANIER as C,
SELECTEUR_SELECTEUR_QUANTITE as D,
SELECTEUR_LIENS_ONGLETS as E,
SELECTEUR_SECTIONS_CONTENUS as F,
ATTRIBUT_ARIA_SELECTED as G,
SELECTEUR_BOUTON_MENU_MOBILE as H,
SELECTEUR_MENU_MOBILE as I,
ATTRIBUT_MENU_MOBILE_ACTIVE as J,
SELECTEUR_BOUTON_PANIER as S,
SELECTEUR_CONTENEUR_STORYTELLING as a,
SELECTEUR_IMAGES_STORYTELLING as b,
@ -52,24 +54,24 @@ export {
ATTRIBUT_ARIA_HIDDEN as e,
SELECTEUR_GRILLE_PRODUITS as f,
SELECTEUR_BOUTON_PLUS_PRODUITS as g,
ATTRIBUT_PAGE as h,
ATTRIBUT_HIDDEN as i,
SELECTEUR_ENTREES_PANIER as j,
SELECTEUR_CONTENEUR_PANIER as k,
SELECTEUR_SOUS_TOTAL_PRODUITS as l,
SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT as m,
SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE as n,
SELECTEUR_TOTAL_PANIER as o,
SELECTEUR_BOUTON_SEPARATION_ADRESSES as p,
SELECTEUR_FORMULAIRE_PANIER as q,
SELECTEUR_FORMULAIRE_FACTURATION as r,
SELECTEUR_BOUTON_ACTIONS_FORMULAIRE as s,
ATTRIBUT_CLE_PANIER as t,
SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE as u,
SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER as v,
SELECTEUR_BOUTON_ADDITION_QUANTITE as w,
SELECTEUR_BOUTON_SUPPRESSION_PANIER as x,
SELECTEUR_PRIX_LIGNE_PANIER as y,
ATTRIBUT_DESACTIVE as z
ATTRIBUT_ID_CATEGORIE_PRODUITS as h,
ATTRIBUT_PAGE as i,
ATTRIBUT_HIDDEN as j,
SELECTEUR_ENTREES_PANIER as k,
SELECTEUR_CONTENEUR_PANIER as l,
SELECTEUR_SOUS_TOTAL_PRODUITS as m,
SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT as n,
SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE as o,
SELECTEUR_TOTAL_PANIER as p,
SELECTEUR_BOUTON_SEPARATION_ADRESSES as q,
SELECTEUR_FORMULAIRE_PANIER as r,
SELECTEUR_FORMULAIRE_FACTURATION as s,
SELECTEUR_BOUTON_ACTIONS_FORMULAIRE as t,
ATTRIBUT_CLE_PANIER as u,
SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE as v,
SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER as w,
SELECTEUR_BOUTON_ADDITION_QUANTITE as x,
SELECTEUR_BOUTON_SUPPRESSION_PANIER as y,
SELECTEUR_PRIX_LIGNE_PANIER as z
};
//# sourceMappingURL=dom.js.map

View file

@ -1 +1 @@
{"version":3,"file":"dom.js","sources":["../../src/scripts/constantes/dom.ts"],"sourcesContent":["/** Constantes de valeurs pour la manipulation du DOM : sélecteurs et attributs. */\n\nexport const ATTRIBUT_ARIA_HIDDEN = \"aria-hidden\";\nexport const ATTRIBUT_ARIA_SELECTED = \"aria-selected\";\nexport const ATTRIBUT_CACHE = \"data-cache\";\nexport const ATTRIBUT_CLE_PANIER = \"data-cle-panier\";\nexport const ATTRIBUT_CONTIENT_ARTICLES = \"data-contient-articles\";\nexport const ATTRIBUT_DESACTIVE = \"disabled\";\nexport const ATTRIBUT_HIDDEN = \"hidden\";\nexport const ATTRIBUT_INDEX = \"data-index\";\nexport const ATTRIBUT_PAGE = \"data-page\";\nexport const ATTRIBUT_MENU_MOBILE_ACTIVE = \"data-menu-mobile-active\";\n\n// En-tête\nexport const SELECTEUR_BOUTON_MENU_MOBILE = \"#bouton-menu-mobile\";\nexport const SELECTEUR_BOUTON_PANIER = \".compte-panier a[rel='cart']\";\nexport const SELECTEUR_MENU_MOBILE = \"#menu-mobile\";\n\n// ???\nexport const SELECTEUR_CONTENEUR_PANIER = \"#page-panier\";\nexport const SELECTEUR_SELECTEUR_QUANTITE = \"#selecteur-variation\";\nexport const SELECTEUR_BOUTON_AJOUT_PANIER = \"#bouton-ajout-panier\";\nexport const SELECTEUR_LIENS_ONGLETS = \"a[role='tab']\";\nexport const SELECTEUR_SECTIONS_CONTENUS = \"section[role='tabpanel']\";\n\n// Panier\nexport const SELECTEUR_ENTREES_PANIER = \"article\";\nexport const SELECTEUR_BOUTON_SUPPRESSION_PANIER = \"button.detail-produit__actions__suppression\";\nexport const SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE = \"button.detail-produit__actions__soustraction\";\nexport const SELECTEUR_BOUTON_ADDITION_QUANTITE = \"button.detail-produit__actions__addition\";\nexport const SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER = \"input\";\nexport const SELECTEUR_PRIX_LIGNE_PANIER = \".detail-produit__nom-prix span\";\nexport const SELECTEUR_SOUS_TOTAL_PRODUITS = \"#panneau-panier #sous-total-produits strong\";\nexport const SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT = \"#panneau-panier #sous-total-livraison strong\";\nexport const SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE = \"#panneau-panier #sous-total-livraison span\";\nexport const SELECTEUR_TOTAL_PANIER = \"#panneau-panier .panneau__pied-de-page p span\";\nexport const SELECTEUR_BOUTON_SEPARATION_ADRESSES = \"#separation-adresses\";\nexport const SELECTEUR_FORMULAIRE_PANIER = \"#panneau-informations-client form\";\nexport const SELECTEUR_FORMULAIRE_LIVRAISON = \"#panneau-informations-client .panneau__formulaires__livraison\";\nexport const SELECTEUR_FORMULAIRE_FACTURATION = \"#panneau-informations-client .panneau__formulaires__facturation\";\nexport const SELECTEUR_BOUTON_ACTIONS_FORMULAIRE = \"#panneau-informations-client .panneau__pied-de-page button\";\n\n// Accueil\nexport const SELECTEUR_CONTENEUR_STORYTELLING = \".storytelling\";\nexport const SELECTEUR_IMAGES_STORYTELLING = \".storytelling__image\";\n\n// Boutique\nexport const SELECTEUR_GRILLE_PRODUITS = \"#page-boutique .grille-produits\";\nexport const SELECTEUR_BOUTON_PLUS_PRODUITS = \"#page-boutique #bouton-plus-de-produits\";\n"],"names":[],"mappings":"AAEO,MAAM,uBAAuB;AAC7B,MAAM,yBAAyB;AAC/B,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,qBAAqB;AAC3B,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AACtB,MAAM,8BAA8B;AAGpC,MAAM,+BAA+B;AACrC,MAAM,0BAA0B;AAChC,MAAM,wBAAwB;AAG9B,MAAM,6BAA6B;AACnC,MAAM,+BAA+B;AACrC,MAAM,gCAAgC;AACtC,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AAGpC,MAAM,2BAA2B;AACjC,MAAM,sCAAsC;AAC5C,MAAM,yCAAyC;AAC/C,MAAM,qCAAqC;AAC3C,MAAM,wCAAwC;AAC9C,MAAM,8BAA8B;AACpC,MAAM,gCAAgC;AACtC,MAAM,sCAAsC;AAC5C,MAAM,6CAA6C;AACnD,MAAM,yBAAyB;AAC/B,MAAM,uCAAuC;AAC7C,MAAM,8BAA8B;AAEpC,MAAM,mCAAmC;AACzC,MAAM,sCAAsC;AAG5C,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AAGtC,MAAM,4BAA4B;AAClC,MAAM,iCAAiC;"}
{"version":3,"file":"dom.js","sources":["../../src/scripts/constantes/dom.ts"],"sourcesContent":["/** Constantes de valeurs pour la manipulation du DOM : sélecteurs et attributs. */\n\nexport const ATTRIBUT_ARIA_HIDDEN = \"aria-hidden\";\nexport const ATTRIBUT_ARIA_SELECTED = \"aria-selected\";\nexport const ATTRIBUT_CACHE = \"data-cache\";\nexport const ATTRIBUT_CLE_PANIER = \"data-cle-panier\";\nexport const ATTRIBUT_CONTIENT_ARTICLES = \"data-contient-articles\";\nexport const ATTRIBUT_DESACTIVE = \"disabled\";\nexport const ATTRIBUT_HIDDEN = \"hidden\";\nexport const ATTRIBUT_INDEX = \"data-index\";\nexport const ATTRIBUT_MENU_MOBILE_ACTIVE = \"data-menu-mobile-active\";\nexport const ATTRIBUT_PAGE = \"data-page\";\nexport const ATTRIBUT_ID_CATEGORIE_PRODUITS = \"data-id-categorie-produits\";\n\n// En-tête\nexport const SELECTEUR_BOUTON_MENU_MOBILE = \"#bouton-menu-mobile\";\nexport const SELECTEUR_BOUTON_PANIER = \".compte-panier a[rel='cart']\";\nexport const SELECTEUR_MENU_MOBILE = \"#menu-mobile\";\n\n// ???\nexport const SELECTEUR_CONTENEUR_PANIER = \"#page-panier\";\nexport const SELECTEUR_SELECTEUR_QUANTITE = \"#selecteur-variation\";\nexport const SELECTEUR_BOUTON_AJOUT_PANIER = \"#bouton-ajout-panier\";\nexport const SELECTEUR_LIENS_ONGLETS = \"a[role='tab']\";\nexport const SELECTEUR_SECTIONS_CONTENUS = \"section[role='tabpanel']\";\n\n// Panier\nexport const SELECTEUR_ENTREES_PANIER = \"article\";\nexport const SELECTEUR_BOUTON_SUPPRESSION_PANIER = \"button.detail-produit__actions__suppression\";\nexport const SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE = \"button.detail-produit__actions__soustraction\";\nexport const SELECTEUR_BOUTON_ADDITION_QUANTITE = \"button.detail-produit__actions__addition\";\nexport const SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER = \"input\";\nexport const SELECTEUR_PRIX_LIGNE_PANIER = \".detail-produit__nom-prix span\";\nexport const SELECTEUR_SOUS_TOTAL_PRODUITS = \"#panneau-panier #sous-total-produits strong\";\nexport const SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT = \"#panneau-panier #sous-total-livraison strong\";\nexport const SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE = \"#panneau-panier #sous-total-livraison span\";\nexport const SELECTEUR_TOTAL_PANIER = \"#panneau-panier .panneau__pied-de-page p span\";\nexport const SELECTEUR_BOUTON_SEPARATION_ADRESSES = \"#separation-adresses\";\nexport const SELECTEUR_FORMULAIRE_PANIER = \"#panneau-informations-client form\";\nexport const SELECTEUR_FORMULAIRE_LIVRAISON = \"#panneau-informations-client .panneau__formulaires__livraison\";\nexport const SELECTEUR_FORMULAIRE_FACTURATION = \"#panneau-informations-client .panneau__formulaires__facturation\";\nexport const SELECTEUR_BOUTON_ACTIONS_FORMULAIRE = \"#panneau-informations-client .panneau__pied-de-page button\";\n\n// Accueil\nexport const SELECTEUR_CONTENEUR_STORYTELLING = \".storytelling\";\nexport const SELECTEUR_IMAGES_STORYTELLING = \".storytelling__image\";\n\n// Boutique\nexport const SELECTEUR_GRILLE_PRODUITS = \"#page-boutique .grille-produits\";\nexport const SELECTEUR_BOUTON_PLUS_PRODUITS = \"#page-boutique #bouton-plus-de-produits\";\n"],"names":[],"mappings":"AAEO,MAAM,uBAAuB;AAC7B,MAAM,yBAAyB;AAC/B,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,qBAAqB;AAC3B,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,8BAA8B;AACpC,MAAM,gBAAgB;AACtB,MAAM,iCAAiC;AAGvC,MAAM,+BAA+B;AACrC,MAAM,0BAA0B;AAChC,MAAM,wBAAwB;AAG9B,MAAM,6BAA6B;AACnC,MAAM,+BAA+B;AACrC,MAAM,gCAAgC;AACtC,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AAGpC,MAAM,2BAA2B;AACjC,MAAM,sCAAsC;AAC5C,MAAM,yCAAyC;AAC/C,MAAM,qCAAqC;AAC3C,MAAM,wCAAwC;AAC9C,MAAM,8BAA8B;AACpC,MAAM,gCAAgC;AACtC,MAAM,sCAAsC;AAC5C,MAAM,6CAA6C;AACnD,MAAM,yBAAyB;AAC/B,MAAM,uCAAuC;AAC7C,MAAM,8BAA8B;AAEpC,MAAM,mCAAmC;AACzC,MAAM,sCAAsC;AAG5C,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AAGtC,MAAM,4BAA4B;AAClC,MAAM,iCAAiC;"}

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":"gestion-panier.js","sources":["../../src/scripts/lib/gestion-panier.ts"],"sourcesContent":["/**\n * Fonctions liées à la gestion du Panier.\n */\n\nimport { type Either, EitherAsync, Left, Right } from \"purify-ts\";\n\nimport { ENTETE_WC_NONCE, ROUTE_API_PANIER } from \"../constantes/api.ts\";\n\n/** États utiles pour les scripts. */\ninterface Etats {\n /** Un nonce pour l'authentification de requêtes API */\n nonce: string;\n}\n\n// @ts-expect-error -- États injectés par le modèle PHP\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP\nconst ETATS: Etats = _etats;\n\nconst requeteRecuperePanier = (): Promise<Either<Error, Response>> =>\n fetch(\n ROUTE_API_PANIER,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: ETATS.nonce,\n },\n method: \"GET\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n )\n .then(Right)\n .catch(Left);\n\nexport const recuperePanier = EitherAsync\n .fromPromise(requeteRecuperePanier)\n .map(a => a.json())\n .ifLeft(e => {\n console.error(e);\n });\n"],"names":["Right","Left"],"mappings":";;;AAgBA,MAAM,QAAe;AAErB,MAAM,wBAAwB,MAC5B;AAAA,EACE;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,MAAM;AAAA,IAC3B;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAClC;AACF,EACG,KAAKA,KAAK,EACV,MAAMC,IAAI;AAEe,YAC3B,YAAY,qBAAqB,EACjC,IAAI,CAAK,MAAA,EAAE,KAAM,CAAA,EACjB,OAAO,CAAK,MAAA;AACX,UAAQ,MAAM,CAAC;AACjB,CAAC;"}
{"version":3,"file":"gestion-panier.js","sources":["../../src/scripts/lib/gestion-panier.ts"],"sourcesContent":["/**\n * Fonctions liées à la gestion du Panier.\n */\n\nimport { type Either, EitherAsync, Left, Right } from \"purify-ts\";\n\nimport { ENTETE_WC_NONCE, ROUTE_API_PANIER } from \"../constantes/api.ts\";\n\n/** États utiles pour les scripts. */\ninterface Etats {\n /** Un nonce pour l'authentification de requêtes API */\n nonce: string;\n}\n\n// @ts-expect-error -- États injectés par le modèle PHP\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP\nconst ETATS: Etats = _etats;\n\nconst requeteRecuperePanier = (): Promise<Either<Error, Response>> =>\n fetch(\n ROUTE_API_PANIER,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: ETATS.nonce,\n },\n method: \"GET\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n )\n .then(Right)\n .catch(Left);\n\nexport const recuperePanier = EitherAsync\n .fromPromise(requeteRecuperePanier)\n .map(a => a.json())\n .ifLeft(e => {\n console.error(e);\n });\n"],"names":["Right","Left"],"mappings":";;;AAgBA,MAAM,QAAe;AAErB,MAAM,wBAAwB,MAC5B;AAAA,EACE;AAAA,EACA;AAAA,IACE,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,MAAM;AAAA,IAC3B;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAAA;AAEpC,EACG,KAAKA,KAAK,EACV,MAAMC,IAAI;AAEe,YAC3B,YAAY,qBAAqB,EACjC,IAAI,CAAK,MAAA,EAAE,KAAM,CAAA,EACjB,OAAO,CAAK,MAAA;AACX,UAAQ,MAAM,CAAC;AACjB,CAAC;"}

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":"pipe.XPB0wEfw.js","sources":["../../../../../../node_modules/.pnpm/@mobily+ts-belt@4.0.0-rc.5/node_modules/@mobily/ts-belt/dist/pipe.mjs"],"sourcesContent":["function pipe() {\n let e = arguments[0];\n for (let t = 1, p = arguments.length; t < p; t++) {\n e = arguments[t](e);\n }\n return e;\n}\n\nexport { pipe };\n"],"names":[],"mappings":"AAAA,SAAS,OAAO;AACd,MAAI,IAAI,UAAU,CAAC;AACnB,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AAChD,QAAI,UAAU,CAAC,EAAE,CAAC;AAAA,EACnB;AACD,SAAO;AACT;","x_google_ignoreList":[0]}
{"version":3,"file":"pipe.XPB0wEfw.js","sources":["../../../../../../node_modules/.pnpm/@mobily+ts-belt@4.0.0-rc.5/node_modules/@mobily/ts-belt/dist/pipe.mjs"],"sourcesContent":["function pipe() {\n let e = arguments[0];\n for (let t = 1, p = arguments.length; t < p; t++) {\n e = arguments[t](e);\n }\n return e;\n}\n\nexport { pipe };\n"],"names":[],"mappings":"AAAA,SAAS,OAAO;AACd,MAAI,IAAI,UAAU,CAAC;AACnB,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;AAChD,QAAI,UAAU,CAAC,EAAE,CAAC;AAAA,EACtB;AACE,SAAO;AACT;","x_google_ignoreList":[0]}

View file

@ -1 +1 @@
{"version":3,"file":"reseau.js","sources":["../../src/scripts/lib/reseau.ts"],"sourcesContent":["import { pipe } from \"@mobily/ts-belt\";\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 { estWCError } from \"./schemas/api/erreurs.ts\";\n\ntype ArgumentsGetBackendWC = {\n authString?: string;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n /** Paramètres de recherche (« query args ») à injecter dans l'URL de la requête. */\n searchParams: string;\n};\n\ntype ArgumentsPostBackendWC = {\n /** Le corps de la requête (ses arguments). */\n corps: BodyInit;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n};\n\nexport const getBackend = (args: ArgumentsGetBackendWC) =>\n fetch(\n `${args.route}?${args.searchParams}`,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"GET\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const postBackend = (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 = <R, S extends GenericSchema<R>>(\n corpsReponse: unknown,\n schemaReponse: S,\n): R =>\n match(corpsReponse)\n // Réponses problématiques\n .with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)\n .with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)\n .with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)\n // Réponse OK (201)\n .with(P._, corpsOkInconnu => parse<S>(schemaReponse, corpsOkInconnu))\n // Réponses inconnues\n .otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>));\n"],"names":["match","P"],"mappings":";;;;;;;AAkCa,MAAA,aAAa,CAAC,SACzB;AAAA,EACE,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY;AAAA,EAClC;AAAA,IACE,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,KAAK;AAAA;AAAA,MAExB,GAAI,KAAK,cAAc,EAAE,eAAe,SAAS,KAAK,UAAU,GAAG;AAAA,IACrE;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAClC;AACF;AAEW,MAAA,cAAc,CAAC,SAC1B;AAAA,EACE,KAAK;AAAA,EACL;AAAA,IACE,MAAM,KAAK;AAAA,IACX,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,KAAK;AAAA,IAC1B;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAClC;AACF;AAEW,MAAA,uCAAuC,CAClD,cACA,kBAEAA,EAAM,YAAY,EAEf,KAAK,EAAE,MAAMC,EAAE,OAAO,GAAG,QAAQ,IAAO,GAAA,YAAY,mBAAmB,EACvE,KAAK,EAAE,MAAMA,EAAE,UAAU,QAAQ,IAAA,GAAO,YAAY,qBAAqB,EACzE,KAAK,EAAE,MAAMA,EAAE,OAAA,GAAU,QAAQ,IAAI,GAAG,YAAY,iBAAiB,EAErE,KAAKA,EAAE,GAAG,CAAkB,mBAAA,MAAS,eAAe,cAAc,CAAC,EAEnE,UAAU,CAAA,MAAK,KAAK,GAAG,gBAAgB,UAAwB,CAAC;"}
{"version":3,"file":"reseau.js","sources":["../../src/scripts/lib/reseau.ts"],"sourcesContent":["import { pipe } from \"@mobily/ts-belt\";\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 { estWCError } from \"./schemas/api/erreurs.ts\";\n\ntype ArgumentsGetBackendWC = {\n authString?: string;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n /** Paramètres de recherche (« query args ») à injecter dans l'URL de la requête. */\n searchParams: string;\n};\n\ntype ArgumentsPostBackendWC = {\n /** Le corps de la requête (ses arguments). */\n corps: BodyInit;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n};\n\nexport const getBackend = (args: ArgumentsGetBackendWC) =>\n fetch(\n `${args.route}?${args.searchParams}`,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"GET\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const postBackend = (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 = <R, S extends GenericSchema<R>>(\n corpsReponse: unknown,\n schemaReponse: S,\n): R =>\n match(corpsReponse)\n // Réponses problématiques\n .with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)\n .with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)\n .with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)\n // Réponse OK (201)\n .with(P._, corpsOkInconnu => parse<S>(schemaReponse, corpsOkInconnu))\n // Réponses inconnues\n .otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>));\n"],"names":["match","P"],"mappings":";;;;;;;AAkCa,MAAA,aAAa,CAAC,SACzB;AAAA,EACE,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY;AAAA,EAClC;AAAA,IACE,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,KAAK;AAAA;AAAA,MAExB,GAAI,KAAK,cAAc,EAAE,eAAe,SAAS,KAAK,UAAU,GAAG;AAAA,IACrE;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAAA;AAEpC;AAEW,MAAA,cAAc,CAAC,SAC1B;AAAA,EACE,KAAK;AAAA,EACL;AAAA,IACE,MAAM,KAAK;AAAA,IACX,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,KAAK;AAAA,IAC1B;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAAA;AAEpC;AAEW,MAAA,uCAAuC,CAClD,cACA,kBAEAA,EAAM,YAAY,EAEf,KAAK,EAAE,MAAMC,EAAE,OAAO,GAAG,QAAQ,IAAO,GAAA,YAAY,mBAAmB,EACvE,KAAK,EAAE,MAAMA,EAAE,UAAU,QAAQ,IAAA,GAAO,YAAY,qBAAqB,EACzE,KAAK,EAAE,MAAMA,EAAE,OAAA,GAAU,QAAQ,IAAI,GAAG,YAAY,iBAAiB,EAErE,KAAKA,EAAE,GAAG,CAAkB,mBAAA,MAAS,eAAe,cAAc,CAAC,EAEnE,UAAU,CAAA,MAAK,KAAK,GAAG,gBAAgB,UAAwB,CAAC;"}

View file

@ -1 +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 \"@mobily/ts-belt\";\n\nimport type { MessageMajBoutonPanier } from \"./lib/types/messages\";\n\nimport { ATTRIBUT_CONTIENT_ARTICLES, SELECTEUR_BOUTON_PANIER } from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER } from \"./constantes/messages.ts\";\nimport { recupereElementOuLeve } from \"./lib/dom.ts\";\nimport { valideMessageMajBoutonPanier } from \"./lib/messages.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 const CANAL_BOUTON_PANIER: BroadcastChannel = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);\n\n CANAL_BOUTON_PANIER.onmessage = (evenementMessage: MessageEvent<unknown>): void => {\n valideMessageMajBoutonPanier(evenementMessage)\n // Met à jour le Bouton du Panier\n .ifRight((message: MessageMajBoutonPanier) => {\n BOUTON_PANIER.textContent = `cart (${String(message.donnees.quantiteProduits)})`;\n BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(message.donnees.quantiteProduits > 0));\n });\n };\n\n // Ferme le BroadcastChannel à la fermeture de la page\n document.addEventListener(\"visibilitychange\", (): void => {\n CANAL_BOUTON_PANIER.close();\n });\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n initialiseBoutonPanier();\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAcA,MAAM,yBAAyB,MAAY;AAEzC,QAAM,gBAAmC;AAAA,IACvC,8BAAiD,uBAAuB;AAAA,IACxE;AAAA,EAAA;AAEI,QAAA,sBAAwC,IAAI,iBAAiB,uBAAuB;AAEtE,sBAAA,YAAY,CAAC,qBAAkD;AACjF,iCAA6B,gBAAgB,EAE1C,QAAQ,CAAC,YAAoC;AAC5C,oBAAc,cAAc,SAAS,OAAO,QAAQ,QAAQ,gBAAgB,CAAC;AAC7E,oBAAc,aAAa,4BAA4B,OAAO,QAAQ,QAAQ,mBAAmB,CAAC,CAAC;AAAA,IAAA,CACpG;AAAA,EAAA;AAII,WAAA,iBAAiB,oBAAoB,MAAY;AACxD,wBAAoB,MAAM;AAAA,EAAA,CAC3B;AACH;AAEA,SAAS,iBAAiB,oBAAoB,MAAM;AAC3B;AACzB,CAAC;"}
{"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 \"@mobily/ts-belt\";\n\nimport type { MessageMajBoutonPanier } from \"./lib/types/messages\";\n\nimport { ATTRIBUT_CONTIENT_ARTICLES, SELECTEUR_BOUTON_PANIER } from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER } from \"./constantes/messages.ts\";\nimport { recupereElementOuLeve } from \"./lib/dom.ts\";\nimport { valideMessageMajBoutonPanier } from \"./lib/messages.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 const CANAL_BOUTON_PANIER: BroadcastChannel = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);\n\n CANAL_BOUTON_PANIER.onmessage = (evenementMessage: MessageEvent<unknown>): void => {\n valideMessageMajBoutonPanier(evenementMessage)\n // Met à jour le Bouton du Panier\n .ifRight((message: MessageMajBoutonPanier) => {\n BOUTON_PANIER.textContent = `cart (${String(message.donnees.quantiteProduits)})`;\n BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(message.donnees.quantiteProduits > 0));\n });\n };\n\n // Ferme le BroadcastChannel à la fermeture de la page\n document.addEventListener(\"visibilitychange\", (): void => {\n CANAL_BOUTON_PANIER.close();\n });\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n initialiseBoutonPanier();\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAcA,MAAM,yBAAyB,MAAY;AAEzC,QAAM,gBAAmC;AAAA,IACvC,8BAAiD,uBAAuB;AAAA,IACxE;AAAA,EACF;AACM,QAAA,sBAAwC,IAAI,iBAAiB,uBAAuB;AAEtE,sBAAA,YAAY,CAAC,qBAAkD;AACjF,iCAA6B,gBAAgB,EAE1C,QAAQ,CAAC,YAAoC;AAC5C,oBAAc,cAAc,SAAS,OAAO,QAAQ,QAAQ,gBAAgB,CAAC;AAC7E,oBAAc,aAAa,4BAA4B,OAAO,QAAQ,QAAQ,mBAAmB,CAAC,CAAC;AAAA,IAAA,CACpG;AAAA,EACL;AAGS,WAAA,iBAAiB,oBAAoB,MAAY;AACxD,wBAAoB,MAAM;AAAA,EAAA,CAC3B;AACH;AAEA,SAAS,iBAAiB,oBAAoB,MAAM;AAC3B,yBAAA;AACzB,CAAC;"}

View file

@ -1,7 +1,7 @@
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
import { G as SELECTEUR_BOUTON_MENU_MOBILE, H as SELECTEUR_MENU_MOBILE, I as ATTRIBUT_MENU_MOBILE_ACTIVE } from "./dom.js";
import { H as SELECTEUR_BOUTON_MENU_MOBILE, I as SELECTEUR_MENU_MOBILE, J as ATTRIBUT_MENU_MOBILE_ACTIVE } from "./dom.js";
import { a as recupereElementDansDocumentOuLeve } from "./utils.js";
import "./dom2.js";
import "./erreurs.js";

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
{"version":3,"file":"scripts-page-accueil.js","sources":["../../src/scripts/scripts-page-accueil.ts"],"sourcesContent":["// Scripts pour la Page d'accueil\n\nimport {\n ATTRIBUT_ARIA_HIDDEN,\n ATTRIBUT_CACHE,\n ATTRIBUT_INDEX,\n SELECTEUR_CONTENEUR_STORYTELLING,\n SELECTEUR_IMAGES_STORYTELLING,\n} from \"./constantes/dom.ts\";\nimport { estEntreDeuxNombres } from \"./lib/nombres.ts\";\nimport { recupereElementDansDocumentOuLeve, recupereElementsDansDocumentOuLeve } from \"./lib/utils.ts\";\n\nconst initialiseScrollStorytelling = (): void => {\n /** Le Conteneur des images du storytelling. */\n const CONTENEUR_STORYTELLING = recupereElementDansDocumentOuLeve<HTMLElement>(SELECTEUR_CONTENEUR_STORYTELLING);\n /** Les Images du storytelling. */\n const IMAGES_STORYTELLING = recupereElementsDansDocumentOuLeve<HTMLDivElement>(SELECTEUR_IMAGES_STORYTELLING);\n\n // Variables mutables\n /** La position du défilement (en pixels) du Conteneur des images du storytelling. */\n let positionDefilementConteneur = 0;\n /** Booléen permettant de limiter le rafraîchissement des images du storytelling. */\n let aucunRafraichissement = false;\n\n const majImages = (): void => {\n // Limite le rafraîchissement des images\n if (!aucunRafraichissement) {\n window.requestAnimationFrame((): void => {\n const changeVisibiliteImage = (image: HTMLDivElement, visible: boolean) => {\n image.toggleAttribute(ATTRIBUT_CACHE, visible);\n image.toggleAttribute(ATTRIBUT_ARIA_HIDDEN, visible);\n };\n\n // Met à jour la position du défilement dans le Conteneur\n positionDefilementConteneur = CONTENEUR_STORYTELLING.scrollTop;\n\n // Met à jour l'attribut de visibilité des images en fonction du défilement\n IMAGES_STORYTELLING.forEach((image: HTMLDivElement): void => {\n const indexImage = Number(image.getAttribute(ATTRIBUT_INDEX));\n const hauteurImage = image.getBoundingClientRect().height;\n const debutYImage = hauteurImage * (indexImage - 1);\n const finYImage = hauteurImage * indexImage;\n\n estEntreDeuxNombres(positionDefilementConteneur, debutYImage, finYImage)\n ? changeVisibiliteImage(image, false)\n : changeVisibiliteImage(image, true);\n });\n\n aucunRafraichissement = false;\n });\n aucunRafraichissement = true;\n }\n };\n\n // Initialise l'Observateur de Redimensionnement (ResizeObserver)\n new ResizeObserver((): void => majImages()).observe(CONTENEUR_STORYTELLING);\n // Initialise la mise à jour des images au défilement sur le Conteneur\n CONTENEUR_STORYTELLING.addEventListener(\"scroll\", (): void => majImages());\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialiseScrollStorytelling();\n});\n"],"names":[],"mappings":";;;;;;;;AAYA,MAAM,+BAA+B,MAAY;AAEzC,QAAA,yBAAyB,kCAA+C,gCAAgC;AAExG,QAAA,sBAAsB,mCAAmD,6BAA6B;AAI5G,MAAI,8BAA8B;AAElC,MAAI,wBAAwB;AAE5B,QAAM,YAAY,MAAY;AAE5B,QAAI,CAAC,uBAAuB;AAC1B,aAAO,sBAAsB,MAAY;AACjC,cAAA,wBAAwB,CAAC,OAAuB,YAAqB;AACnE,gBAAA,gBAAgB,gBAAgB,OAAO;AACvC,gBAAA,gBAAgB,sBAAsB,OAAO;AAAA,QAAA;AAIrD,sCAA8B,uBAAuB;AAGjC,4BAAA,QAAQ,CAAC,UAAgC;AAC3D,gBAAM,aAAa,OAAO,MAAM,aAAa,cAAc,CAAC;AACtD,gBAAA,eAAe,MAAM,sBAAA,EAAwB;AAC7C,gBAAA,cAAc,gBAAgB,aAAa;AACjD,gBAAM,YAAY,eAAe;AAEb,8BAAA,6BAA6B,aAAa,SAAS,IACnE,sBAAsB,OAAO,KAAK,IAClC,sBAAsB,OAAO,IAAI;AAAA,QAAA,CACtC;AAEuB,gCAAA;AAAA,MAAA,CACzB;AACuB,8BAAA;AAAA,IAC1B;AAAA,EAAA;AAIF,MAAI,eAAe,MAAY,UAAA,CAAW,EAAE,QAAQ,sBAAsB;AAE1E,yBAAuB,iBAAiB,UAAU,MAAY,UAAW,CAAA;AAC3E;AAEA,SAAS,iBAAiB,oBAAoB,MAAY;AAC3B;AAC/B,CAAC;"}
{"version":3,"file":"scripts-page-accueil.js","sources":["../../src/scripts/scripts-page-accueil.ts"],"sourcesContent":["// Scripts pour la Page d'accueil\n\nimport {\n ATTRIBUT_ARIA_HIDDEN,\n ATTRIBUT_CACHE,\n ATTRIBUT_INDEX,\n SELECTEUR_CONTENEUR_STORYTELLING,\n SELECTEUR_IMAGES_STORYTELLING,\n} from \"./constantes/dom.ts\";\nimport { estEntreDeuxNombres } from \"./lib/nombres.ts\";\nimport { recupereElementDansDocumentOuLeve, recupereElementsDansDocumentOuLeve } from \"./lib/utils.ts\";\n\nconst initialiseScrollStorytelling = (): void => {\n /** Le Conteneur des images du storytelling. */\n const CONTENEUR_STORYTELLING = recupereElementDansDocumentOuLeve<HTMLElement>(SELECTEUR_CONTENEUR_STORYTELLING);\n /** Les Images du storytelling. */\n const IMAGES_STORYTELLING = recupereElementsDansDocumentOuLeve<HTMLDivElement>(SELECTEUR_IMAGES_STORYTELLING);\n\n // Variables mutables\n /** La position du défilement (en pixels) du Conteneur des images du storytelling. */\n let positionDefilementConteneur = 0;\n /** Booléen permettant de limiter le rafraîchissement des images du storytelling. */\n let aucunRafraichissement = false;\n\n const majImages = (): void => {\n // Limite le rafraîchissement des images\n if (!aucunRafraichissement) {\n window.requestAnimationFrame((): void => {\n const changeVisibiliteImage = (image: HTMLDivElement, visible: boolean) => {\n image.toggleAttribute(ATTRIBUT_CACHE, visible);\n image.toggleAttribute(ATTRIBUT_ARIA_HIDDEN, visible);\n };\n\n // Met à jour la position du défilement dans le Conteneur\n positionDefilementConteneur = CONTENEUR_STORYTELLING.scrollTop;\n\n // Met à jour l'attribut de visibilité des images en fonction du défilement\n IMAGES_STORYTELLING.forEach((image: HTMLDivElement): void => {\n const indexImage = Number(image.getAttribute(ATTRIBUT_INDEX));\n const hauteurImage = image.getBoundingClientRect().height;\n const debutYImage = hauteurImage * (indexImage - 1);\n const finYImage = hauteurImage * indexImage;\n\n estEntreDeuxNombres(positionDefilementConteneur, debutYImage, finYImage)\n ? changeVisibiliteImage(image, false)\n : changeVisibiliteImage(image, true);\n });\n\n aucunRafraichissement = false;\n });\n aucunRafraichissement = true;\n }\n };\n\n // Initialise l'Observateur de Redimensionnement (ResizeObserver)\n new ResizeObserver((): void => majImages()).observe(CONTENEUR_STORYTELLING);\n // Initialise la mise à jour des images au défilement sur le Conteneur\n CONTENEUR_STORYTELLING.addEventListener(\"scroll\", (): void => majImages());\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialiseScrollStorytelling();\n});\n"],"names":[],"mappings":";;;;;;;;AAYA,MAAM,+BAA+B,MAAY;AAEzC,QAAA,yBAAyB,kCAA+C,gCAAgC;AAExG,QAAA,sBAAsB,mCAAmD,6BAA6B;AAI5G,MAAI,8BAA8B;AAElC,MAAI,wBAAwB;AAE5B,QAAM,YAAY,MAAY;AAE5B,QAAI,CAAC,uBAAuB;AAC1B,aAAO,sBAAsB,MAAY;AACjC,cAAA,wBAAwB,CAAC,OAAuB,YAAqB;AACnE,gBAAA,gBAAgB,gBAAgB,OAAO;AACvC,gBAAA,gBAAgB,sBAAsB,OAAO;AAAA,QACrD;AAGA,sCAA8B,uBAAuB;AAGjC,4BAAA,QAAQ,CAAC,UAAgC;AAC3D,gBAAM,aAAa,OAAO,MAAM,aAAa,cAAc,CAAC;AACtD,gBAAA,eAAe,MAAM,sBAAA,EAAwB;AAC7C,gBAAA,cAAc,gBAAgB,aAAa;AACjD,gBAAM,YAAY,eAAe;AAEb,8BAAA,6BAA6B,aAAa,SAAS,IACnE,sBAAsB,OAAO,KAAK,IAClC,sBAAsB,OAAO,IAAI;AAAA,QAAA,CACtC;AAEuB,gCAAA;AAAA,MAAA,CACzB;AACuB,8BAAA;AAAA,IAAA;AAAA,EAE5B;AAGA,MAAI,eAAe,MAAY,UAAW,CAAA,EAAE,QAAQ,sBAAsB;AAE1E,yBAAuB,iBAAiB,UAAU,MAAY,UAAA,CAAW;AAC3E;AAEA,SAAS,iBAAiB,oBAAoB,MAAY;AAC3B,+BAAA;AAC/B,CAAC;"}

View file

@ -1,7 +1,7 @@
import { z, N } from "./index.CeK6pfoJ.js";
import { p as parse } from "./index.Dco04HYW.js";
import { R as ROUTE_API_NOUVELLE_PRODUCTS } from "./api.js";
import { f as SELECTEUR_GRILLE_PRODUITS, g as SELECTEUR_BOUTON_PLUS_PRODUITS, h as ATTRIBUT_PAGE, i as ATTRIBUT_HIDDEN } from "./dom.js";
import { f as SELECTEUR_GRILLE_PRODUITS, g as SELECTEUR_BOUTON_PLUS_PRODUITS, h as ATTRIBUT_ID_CATEGORIE_PRODUITS, i as ATTRIBUT_PAGE, j as ATTRIBUT_HIDDEN } from "./dom.js";
import { h as html } from "./dom2.js";
import { l as leveServerError } from "./erreurs.js";
import { e as estReponse500 } from "./gardes.js";
@ -19,11 +19,14 @@ const ETATS_PAGE = _etats;
const GRILLE_PRODUITS = recupereElementDansDocumentOuLeve(SELECTEUR_GRILLE_PRODUITS);
const BOUTON_PLUS_DE_PRODUITS = recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_PLUS_PRODUITS);
const initialisePageBoutique = () => {
const idCategorieProduits = GRILLE_PRODUITS.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS);
BOUTON_PLUS_DE_PRODUITS.addEventListener("click", () => {
const nouvellePage = Number(GRILLE_PRODUITS.getAttribute(ATTRIBUT_PAGE)) + 1;
const args = {
page: nouvellePage,
per_page: 13
per_page: 13,
// Ajoute conditionnellement la Catégorie de Produits
...idCategorieProduits && { category: idCategorieProduits }
};
Either.encase(() => parse(WCV3ProductsArgsSchema, args)).map(
async (args2) => {

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
import { z } from "./index.CeK6pfoJ.js";
import { p as parse } from "./index.Dco04HYW.js";
import { a as ROUTE_API_RETIRE_ARTICLE_PANIER, b as ROUTE_API_MAJ_ARTICLE_PANIER, c as ROUTE_API_MAJ_CLIENT } from "./api.js";
import { j as SELECTEUR_ENTREES_PANIER, k as SELECTEUR_CONTENEUR_PANIER, l as SELECTEUR_SOUS_TOTAL_PRODUITS, m as SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT, n as SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, o as SELECTEUR_TOTAL_PANIER, p as SELECTEUR_BOUTON_SEPARATION_ADRESSES, q as SELECTEUR_FORMULAIRE_PANIER, r as SELECTEUR_FORMULAIRE_FACTURATION, s as SELECTEUR_BOUTON_ACTIONS_FORMULAIRE, t as ATTRIBUT_CLE_PANIER, u as SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE, v as SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER, w as SELECTEUR_BOUTON_ADDITION_QUANTITE, x as SELECTEUR_BOUTON_SUPPRESSION_PANIER, A as ATTRIBUT_CONTIENT_ARTICLES, y as SELECTEUR_PRIX_LIGNE_PANIER, i as ATTRIBUT_HIDDEN, z as ATTRIBUT_DESACTIVE } from "./dom.js";
import { k as SELECTEUR_ENTREES_PANIER, l as SELECTEUR_CONTENEUR_PANIER, m as SELECTEUR_SOUS_TOTAL_PRODUITS, n as SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT, o as SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, p as SELECTEUR_TOTAL_PANIER, q as SELECTEUR_BOUTON_SEPARATION_ADRESSES, r as SELECTEUR_FORMULAIRE_PANIER, s as SELECTEUR_FORMULAIRE_FACTURATION, t as SELECTEUR_BOUTON_ACTIONS_FORMULAIRE, u as ATTRIBUT_CLE_PANIER, v as SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE, w as SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER, x as SELECTEUR_BOUTON_ADDITION_QUANTITE, y as SELECTEUR_BOUTON_SUPPRESSION_PANIER, A as ATTRIBUT_CONTIENT_ARTICLES, z as SELECTEUR_PRIX_LIGNE_PANIER, j as ATTRIBUT_HIDDEN, B as ATTRIBUT_DESACTIVE } from "./dom.js";
import { N as NOM_CANAL_BOUTON_PANIER, a as NOM_CANAL_CONTENU_PANIER } from "./messages3.js";
import { r as recupereElementOuLeve, a as recupereElementsAvecSelecteur, b as recupereElementAvecSelecteur } from "./dom2.js";
import { l as leveServerError, r as reporteErreur } from "./erreurs.js";

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
import { z, N } from "./index.CeK6pfoJ.js";
import { p as parse } from "./index.Dco04HYW.js";
import { d as ROUTE_API_AJOUTE_ARTICLE_PANIER, E as ENTETE_WC_NONCE } from "./api.js";
import { B as SELECTEUR_BOUTON_AJOUT_PANIER, C as SELECTEUR_SELECTEUR_QUANTITE, D as SELECTEUR_LIENS_ONGLETS, E as SELECTEUR_SECTIONS_CONTENUS, F as ATTRIBUT_ARIA_SELECTED, i as ATTRIBUT_HIDDEN, z as ATTRIBUT_DESACTIVE } from "./dom.js";
import { C as SELECTEUR_BOUTON_AJOUT_PANIER, D as SELECTEUR_SELECTEUR_QUANTITE, E as SELECTEUR_LIENS_ONGLETS, F as SELECTEUR_SECTIONS_CONTENUS, G as ATTRIBUT_ARIA_SELECTED, j as ATTRIBUT_HIDDEN, B as ATTRIBUT_DESACTIVE } from "./dom.js";
import { r as recupereElementOuLeve, c as recupereElementsOuLeve } from "./dom2.js";
import { l as leveServerError, a as leveBadRequestError, b as leveUnauthorizedError, c as leveNotFoundError, E as ErreurInconnue, d as leveErreur, r as reporteErreur } from "./erreurs.js";
import { b as estHTMLSelectElement, e as estReponse500, a as estError } from "./gardes.js";

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -32,7 +32,7 @@ function recupere_informations_produit_shop($produit) {
),
/* Photo du Produit affichée au survol de l'image */
"photo_survol" => wp_get_attachment_image(
get_post_meta($post_id = $produit->get_id(), $key = "_photos_colonne_droite|||0|value")[0],
get_post_meta($post_id = $produit->get_id(), $key = "_photos_colonne_droite|||0|value")[0] ?? "",
"full",
false,
["loading" => false],

View file

@ -8,8 +8,9 @@ export const ATTRIBUT_CONTIENT_ARTICLES = "data-contient-articles";
export const ATTRIBUT_DESACTIVE = "disabled";
export const ATTRIBUT_HIDDEN = "hidden";
export const ATTRIBUT_INDEX = "data-index";
export const ATTRIBUT_PAGE = "data-page";
export const ATTRIBUT_MENU_MOBILE_ACTIVE = "data-menu-mobile-active";
export const ATTRIBUT_PAGE = "data-page";
export const ATTRIBUT_ID_CATEGORIE_PRODUITS = "data-id-categorie-produits";
// En-tête
export const SELECTEUR_BOUTON_MENU_MOBILE = "#bouton-menu-mobile";

View file

@ -15,6 +15,7 @@ import type { WCV3Products, WCV3ProductsArgs } from "./lib/types/api/v3/products
import { ROUTE_API_NOUVELLE_PRODUCTS } from "./constantes/api.ts";
import {
ATTRIBUT_HIDDEN,
ATTRIBUT_ID_CATEGORIE_PRODUITS,
ATTRIBUT_PAGE,
SELECTEUR_BOUTON_PLUS_PRODUITS,
SELECTEUR_GRILLE_PRODUITS,
@ -43,12 +44,16 @@ const GRILLE_PRODUITS: HTMLDivElement = recupereElementDansDocumentOuLeve(SELECT
const BOUTON_PLUS_DE_PRODUITS: HTMLButtonElement = recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_PLUS_PRODUITS);
const initialisePageBoutique = (): void => {
const idCategorieProduits: null | string = GRILLE_PRODUITS.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS);
BOUTON_PLUS_DE_PRODUITS.addEventListener("click", (): void => {
const nouvellePage = Number(GRILLE_PRODUITS.getAttribute(ATTRIBUT_PAGE)) + 1;
const args: WCV3ProductsArgs = {
page: nouvellePage,
per_page: 13,
// Ajoute conditionnellement la Catégorie de Produits
...(idCategorieProduits && { category: idCategorieProduits }),
};
type APIProductsErrors =

View file

@ -13,15 +13,38 @@ require_once __DIR__ . "/src/inc/TraitementInformations.php";
$contexte = Timber::context();
$modeles = ["boutique.twig"];
// Informations brutes des Produits de la Catégorie
/** @var array<WC_Product> $informations_produits Les informations brutes des Produits. */
$informations_produits = wc_get_products([
"category" => [get_queried_object()?->slug],
"orderby" => "date",
"limit" => 12,
"order" => "DESC",
"orderby" => "date",
]);
// Informations nécessaires pour la grille des Produits
/** @var InformationsProduitShop $produits Les informations strictement nécessaires pour la grille des Produits. */
$produits = array_map(callback: "recupere_informations_produit_shop", array: $informations_produits);
$contexte["produits"] = $produits;
$id_categorie_produits = array_shift($informations_produits)?->get_category_ids()[0] ?? "";
$contexte["id_categorie_produits"] = $id_categorie_produits;
/**
* Charge les Scripts nécessaires pour la page d'Archive.
*/
function charge_scripts_page_archive_produits(): void {
wp_enqueue_style(
handle: "haiku-atelier-2024-styles-page-boutique",
src: get_template_directory_uri() . "/assets/css/pages/page-boutique.css",
deps: [],
ver: filemtime(get_template_directory() . "/assets/css/pages/page-boutique.css"),
media: "all",
);
wp_enqueue_script_module(
id: "haiku-atelier-2024-scripts-page-boutique",
src: get_template_directory_uri() . "/assets/js/scripts-page-boutique.js",
deps: [],
version: filemtime(get_template_directory() . "/assets/js/scripts-page-boutique.js"),
);
}
add_action("wp_enqueue_scripts", "charge_scripts_page_archive_produits");
// Rendu
Timber::render(filenames: $modeles, data: $contexte);

View file

@ -24,14 +24,16 @@
<main id="page-boutique">
{% include "parts/pages/shop/grille-produits.twig" %}
<div class="actions">
<button
class="bouton-case-pleine bouton-case-pleine--blanc-sur-noir"
id="bouton-plus-de-produits"
type="button"
>
Show more products
</button>
</div>
{% if produits|length == 12 %}
<div class="actions">
<button
class="bouton-case-pleine bouton-case-pleine--blanc-sur-noir"
id="bouton-plus-de-produits"
type="button"
>
Show more products
</button>
</div>
{% endif %}
</main>
{% endblock contenu %}

View file

@ -1,6 +1,7 @@
<div
class="grille-produits"
data-page="1"
{% if id_categorie_produits %}data-id-categorie-produits="{{ id_categorie_produits }}"{% endif %}
>
{% if produits|length > 0 %}
{% for produit in produits %}