2024-12-09

This commit is contained in:
gcch 2024-12-09 09:26:13 +01:00
commit ace47f1701
42 changed files with 1556 additions and 691 deletions

View file

@ -3,52 +3,55 @@
<head> <head>
<!-- #ddev-generated --> <!-- #ddev-generated -->
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta
name="viewport"
content="width=device-width, initial-scale=1.0"
>
<title>vite not running</title> <title>vite not running</title>
<style> <style>
html, body { html, body {
height: 100%; height: 100%;
margin: 0; margin: 0;
font-family: font-family:
-apple-system, -apple-system,
BlinkMacSystemFont, BlinkMacSystemFont,
avenir next, avenir next,
avenir, avenir,
segoe ui, segoe ui,
helvetica neue, helvetica neue,
helvetica, helvetica,
Cantarell, Cantarell,
Ubuntu, Ubuntu,
roboto, roboto,
noto, noto,
arial, arial,
sans-serif; sans-serif;
} }
body { body {
background: #dddddd; background: #ddd;
display: grid; display: grid;
align-items: center; align-items: center;
justify-items: center; justify-items: center;
} }
h1 { h1 {
margin-top: 0; margin-top: 0;
} }
main { main {
max-width: 36rem; max-width: 36rem;
background: #ffffff; background: #fff;
padding: 1.5rem; padding: 1.5rem;
border: 1px #999999 solid; border: 1px #999 solid;
} }
code { code {
font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace; font-family: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace;
font-size: 180%; font-size: 180%;
color: #9499ff; color: #9499ff;
font-weight: bold; font-weight: bold;
} }
</style> </style>
</head> </head>
<body> <body>

View file

@ -43,6 +43,7 @@
"wpackagist-plugin/query-monitor": "^3.17.0", "wpackagist-plugin/query-monitor": "^3.17.0",
"wpackagist-plugin/redis-cache": "^2.5.4", "wpackagist-plugin/redis-cache": "^2.5.4",
"wpackagist-plugin/wc-multishipping": "^2.5.4", "wpackagist-plugin/wc-multishipping": "^2.5.4",
"wpackagist-plugin/woo-preview-emails": "^2.2.13",
"wpackagist-plugin/woocommerce": "^9.4.3", "wpackagist-plugin/woocommerce": "^9.4.3",
"wpackagist-plugin/wp-mail-logging": "^1.13.1", "wpackagist-plugin/wp-mail-logging": "^1.13.1",
"wpackagist-plugin/wp-mail-smtp": "^4.2", "wpackagist-plugin/wp-mail-smtp": "^4.2",

40
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "2410b3c293c63aaed50ade0d8d3a2846", "content-hash": "c785707c9df9c91d85b0ebd9d836de05",
"packages": [ "packages": [
{ {
"name": "brick/math", "name": "brick/math",
@ -2453,8 +2453,8 @@
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": { "thanks": {
"name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill",
"url": "https://github.com/symfony/polyfill" "name": "symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -2606,8 +2606,8 @@
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": { "thanks": {
"name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill",
"url": "https://github.com/symfony/polyfill" "name": "symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -2686,8 +2686,8 @@
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": { "thanks": {
"name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill",
"url": "https://github.com/symfony/polyfill" "name": "symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -2762,8 +2762,8 @@
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": { "thanks": {
"name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill",
"url": "https://github.com/symfony/polyfill" "name": "symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -2844,8 +2844,8 @@
"type": "library", "type": "library",
"extra": { "extra": {
"thanks": { "thanks": {
"name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill",
"url": "https://github.com/symfony/polyfill" "name": "symfony/polyfill"
} }
}, },
"autoload": { "autoload": {
@ -3574,6 +3574,24 @@
"type": "wordpress-plugin", "type": "wordpress-plugin",
"homepage": "https://wordpress.org/plugins/wc-multishipping/" "homepage": "https://wordpress.org/plugins/wc-multishipping/"
}, },
{
"name": "wpackagist-plugin/woo-preview-emails",
"version": "2.2.13",
"source": {
"type": "svn",
"url": "https://plugins.svn.wordpress.org/woo-preview-emails/",
"reference": "tags/2.2.13"
},
"dist": {
"type": "zip",
"url": "https://downloads.wordpress.org/plugin/woo-preview-emails.2.2.13.zip"
},
"require": {
"composer/installers": "^1.0 || ^2.0"
},
"type": "wordpress-plugin",
"homepage": "https://wordpress.org/plugins/woo-preview-emails/"
},
{ {
"name": "wpackagist-plugin/woocommerce", "name": "wpackagist-plugin/woocommerce",
"version": "9.4.3", "version": "9.4.3",

View file

@ -34,11 +34,11 @@
"malva": { "malva": {
"alignComments": true, "alignComments": true,
"attrValueQuotes": "always", "attrValueQuotes": "always",
"blockSelectorLinebreak": "consistent", "blockSelectorLinebreak": "wrap",
"declarationOrder": null, "declarationOrder": null,
"formatComments": true, "formatComments": true,
"hexCase": "lower", "hexCase": "lower",
"hexColorLength": "long", "hexColorLength": "short",
"indentWidth": 2, "indentWidth": 2,
"keyframeSelectorNotation": "keyword", "keyframeSelectorNotation": "keyword",
"lineBreak": "lf", "lineBreak": "lf",
@ -60,13 +60,10 @@
"doctypeKeywordCase": "lower", "doctypeKeywordCase": "lower",
"formatComments": true, "formatComments": true,
"html.normal.selfClosing": false, "html.normal.selfClosing": false,
"html.scriptIndent": false,
"html.styleIndent": false,
"html.void.selfClosing": false, "html.void.selfClosing": false,
"indentWidth": 2, "indentWidth": 2,
"lineBreak": "lf", "lineBreak": "lf",
"maxAttrsPerLine": 2, "maxAttrsPerLine": 1,
"preferAttrsSingleLine": true,
"printWidth": 120, "printWidth": 120,
"quotes": "double", "quotes": "double",
"scriptFormatter": "dprint", "scriptFormatter": "dprint",

20
pnpm-lock.yaml generated
View file

@ -774,8 +774,8 @@ packages:
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@bufbuild/protobuf@2.2.2': '@bufbuild/protobuf@2.2.3':
resolution: {integrity: sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==} resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==}
'@csstools/css-parser-algorithms@3.0.4': '@csstools/css-parser-algorithms@3.0.4':
resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
@ -1841,8 +1841,8 @@ packages:
resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
engines: {node: '>=14.16'} engines: {node: '>=14.16'}
call-bind-apply-helpers@1.0.0: call-bind-apply-helpers@1.0.1:
resolution: {integrity: sha512-CCKAP2tkPau7D3GE8+V8R6sQubA9R5foIzGp+85EXCVSCivuxBNAWqcpn72PKYiIcqoViv/kcUDpaEIMBVi1lQ==} resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
call-bind@1.0.8: call-bind@1.0.8:
@ -4370,7 +4370,7 @@ snapshots:
'@biomejs/cli-win32-x64@1.9.4': '@biomejs/cli-win32-x64@1.9.4':
optional: true optional: true
'@bufbuild/protobuf@2.2.2': {} '@bufbuild/protobuf@2.2.3': {}
'@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
dependencies: dependencies:
@ -5340,14 +5340,14 @@ snapshots:
normalize-url: 8.0.1 normalize-url: 8.0.1
responselike: 3.0.0 responselike: 3.0.0
call-bind-apply-helpers@1.0.0: call-bind-apply-helpers@1.0.1:
dependencies: dependencies:
es-errors: 1.3.0 es-errors: 1.3.0
function-bind: 1.1.2 function-bind: 1.1.2
call-bind@1.0.8: call-bind@1.0.8:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.0 call-bind-apply-helpers: 1.0.1
es-define-property: 1.0.1 es-define-property: 1.0.1
get-intrinsic: 1.2.5 get-intrinsic: 1.2.5
set-function-length: 1.2.2 set-function-length: 1.2.2
@ -5534,7 +5534,7 @@ snapshots:
dunder-proto@1.0.0: dunder-proto@1.0.0:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.0 call-bind-apply-helpers: 1.0.1
es-errors: 1.3.0 es-errors: 1.3.0
gopd: 1.2.0 gopd: 1.2.0
@ -5807,7 +5807,7 @@ snapshots:
get-intrinsic@1.2.5: get-intrinsic@1.2.5:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.0 call-bind-apply-helpers: 1.0.1
dunder-proto: 1.0.0 dunder-proto: 1.0.0
es-define-property: 1.0.1 es-define-property: 1.0.1
es-errors: 1.3.0 es-errors: 1.3.0
@ -6589,7 +6589,7 @@ snapshots:
sass-embedded@1.82.0: sass-embedded@1.82.0:
dependencies: dependencies:
'@bufbuild/protobuf': 2.2.2 '@bufbuild/protobuf': 2.2.3
buffer-builder: 0.2.0 buffer-builder: 0.2.0
colorjs.io: 0.5.2 colorjs.io: 0.5.2
immutable: 5.0.3 immutable: 5.0.3

View file

@ -33,14 +33,14 @@
} }
:root { :root {
/* Couleurs */ /* Couleurs */
--couleur-blanc: #ffffff; --couleur-blanc: #fff;
--couleur-blanc-fond: rgb(255 255 255 / 90%); --couleur-blanc-fond: rgb(255 255 255 / 90%);
--couleur-gris: #eceaeb; --couleur-gris: #eceaeb;
--couleur-gris-fonce: #808080; --couleur-gris-fonce: #808080;
--couleur-gris-fonce-fond: rgb(128 128 128 / 80%); --couleur-gris-fonce-fond: rgb(128 128 128 / 80%);
--couleur-bordeaux: #490918; --couleur-bordeaux: #490918;
--couleur-bordeaux-fond: rgb(73 9 24 / 80%); --couleur-bordeaux-fond: rgb(73 9 24 / 80%);
--couleur-jaune: #ebffb8; --couleur-jaune: #defdb5;
--couleur-jaune-fond: rgb(235 255 184 / 80%); --couleur-jaune-fond: rgb(235 255 184 / 80%);
--couleur-noir: #202020; --couleur-noir: #202020;
--couleur-fond: rgb(236 234 235 / 80%); --couleur-fond: rgb(236 234 235 / 80%);

File diff suppressed because one or more lines are too long

View file

@ -5,7 +5,7 @@
width="330.107px" height="330.773px" viewBox="0 0 330.107 330.773" enable-background="new 0 0 330.107 330.773" width="330.107px" height="330.773px" viewBox="0 0 330.107 330.773" enable-background="new 0 0 330.107 330.773"
xml:space="preserve"> xml:space="preserve">
<g id="logo_x2F_colors"> <g id="logo_x2F_colors">
<ellipse display="none" fill="#EBFFB8" cx="165.872" cy="162.37" rx="164.236" ry="161.992"/> <ellipse display="none" fill="#DEFDB5" cx="165.872" cy="162.37" rx="164.236" ry="161.992"/>
<g> <g>
<path fill-rule="evenodd" clip-rule="evenodd" fill="#202020" d="M256.14,137.243c0.624,1.266,0.236,5.389,0.142,5.907 <path fill-rule="evenodd" clip-rule="evenodd" fill="#202020" d="M256.14,137.243c0.624,1.266,0.236,5.389,0.142,5.907
c-0.165,0.873-0.366,5.486-0.339,6.494c0.03,0.981-0.037,5.803-0.067,6.871c-0.061,2.059-0.419,3.634-0.353,5.689 c-0.165,0.873-0.366,5.486-0.339,6.494c0.03,0.981-0.037,5.803-0.067,6.871c-0.061,2.059-0.419,3.634-0.353,5.689

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Before After
Before After

View file

@ -25,4 +25,21 @@ function cree_champs_personnalises_produit(): void {
]); ]);
} }
function cree_champ_personnalise_commande($order): void {
woocommerce_wp_text_input([
"id" => "tracking_number",
"label" => "Tracking Number:",
"value" => $order->get_meta("tracking_number"),
"wrapper_class" => "form-field-wide",
]);
}
function maj_champ_personnalise_commande($order_id): void {
$order = wc_get_order($order_id);
$order->update_meta_data("tracking_number", wc_clean($_POST["tracking_number"]));
$order->save();
}
add_action("carbon_fields_register_fields", "cree_champs_personnalises_produit"); add_action("carbon_fields_register_fields", "cree_champs_personnalises_produit");
add_action("woocommerce_admin_order_data_after_shipping_address", "cree_champ_personnalise_commande");
add_action("woocommerce_process_shop_order_meta", "maj_champ_personnalise_commande");

View file

@ -2,14 +2,14 @@
:root { :root {
/* Couleurs */ /* Couleurs */
--couleur-blanc: #ffffff; --couleur-blanc: #fff;
--couleur-blanc-fond: rgb(255 255 255 / 90%); --couleur-blanc-fond: rgb(255 255 255 / 90%);
--couleur-gris: #eceaeb; --couleur-gris: #eceaeb;
--couleur-gris-fonce: #808080; --couleur-gris-fonce: #808080;
--couleur-gris-fonce-fond: rgb(128 128 128 / 80%); --couleur-gris-fonce-fond: rgb(128 128 128 / 80%);
--couleur-bordeaux: #490918; --couleur-bordeaux: #490918;
--couleur-bordeaux-fond: rgb(73 9 24 / 80%); --couleur-bordeaux-fond: rgb(73 9 24 / 80%);
--couleur-jaune: #ebffb8; --couleur-jaune: #defdb5;
--couleur-jaune-fond: rgb(235 255 184 / 80%); --couleur-jaune-fond: rgb(235 255 184 / 80%);
--couleur-noir: #202020; --couleur-noir: #202020;
--couleur-fond: rgb(236 234 235 / 80%); --couleur-fond: rgb(236 234 235 / 80%);

View file

@ -215,14 +215,6 @@ export const initialiseBoutonCalculLivraison = (): void => {
.ifLeft( .ifLeft(
(erreur: ErreurAdresseInvalide | FetchErrors | HttpCodeErrors | ValiError<AnySchema>): void => { (erreur: ErreurAdresseInvalide | FetchErrors | HttpCodeErrors | ValiError<AnySchema>): void => {
match(erreur) match(erreur)
.when(estErreurHttp, (e): void => {
reporteEtJournaliseErreur(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;
})
.when(estErreurFetch, (e): void => {
reporteEtJournaliseErreur(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_RESEAU;
})
.with(P.instanceOf(ValiError), (e: ValiError<AnySchema>): void => { .with(P.instanceOf(ValiError), (e: ValiError<AnySchema>): void => {
reporteEtJournaliseErreur(e); reporteEtJournaliseErreur(e);
console.error(e.issues); console.error(e.issues);
@ -245,6 +237,14 @@ export const initialiseBoutonCalculLivraison = (): void => {
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES; E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;
}); });
}) })
.when(estErreurHttp, (e): void => {
reporteEtJournaliseErreur(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;
})
.when(estErreurFetch, (e): void => {
reporteEtJournaliseErreur(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_RESEAU;
})
.exhaustive(); .exhaustive();
E.BOUTON_ACTIONS_FORMULAIRE.textContent = "Submit your addresses"; E.BOUTON_ACTIONS_FORMULAIRE.textContent = "Submit your addresses";

View file

@ -1,7 +1,10 @@
{% extends "base.twig" %} {% extends "base.twig" %}
{% block contenu %} {% block contenu %}
<main class="page-modele-simple" id="page-404"> <main
class="page-modele-simple"
id="page-404"
>
<div class="contenu"> <div class="contenu">
<header class="contenu__en-tete"> <header class="contenu__en-tete">
<h2>Sorry!</h2> <h2>Sorry!</h2>
@ -13,7 +16,10 @@
</p> </p>
<p> <p>
<a class="lien-lien" href="/shop"> <a
class="lien-lien"
href="/shop"
>
Go back to the Shop Go back to the Shop
</a> </a>
</p> </p>

View file

@ -12,71 +12,103 @@
{# Épingles #} {# Épingles #}
<button <button
aria-label="First pin" class="epingle" aria-label="First pin"
data-id-ensemble-epingle-boite="1" type="button" class="epingle"
data-id-ensemble-epingle-boite="1"
type="button"
> >
<img <img
alt="" height="56" alt=""
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg" width="82" height="56"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
> >
</button> </button>
<button <button
aria-label="Second pin" class="epingle" aria-label="Second pin"
data-id-ensemble-epingle-boite="2" type="button" class="epingle"
data-id-ensemble-epingle-boite="2"
type="button"
> >
<img <img
alt="" height="56" alt=""
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg" width="82" height="56"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
> >
</button> </button>
<button <button
aria-label="Third pin" class="epingle" aria-label="Third pin"
data-id-ensemble-epingle-boite="3" type="button" class="epingle"
data-id-ensemble-epingle-boite="3"
type="button"
> >
<img <img
alt="" height="56" alt=""
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg" width="82" height="56"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
> >
</button> </button>
<button <button
aria-label="Fourth pin" class="epingle" aria-label="Fourth pin"
data-id-ensemble-epingle-boite="4" type="button" class="epingle"
data-id-ensemble-epingle-boite="4"
type="button"
> >
<img <img
alt="" height="56" alt=""
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg" width="82" height="56"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
> >
</button> </button>
<button <button
aria-label="Fifth pin" class="epingle" aria-label="Fifth pin"
data-id-ensemble-epingle-boite="5" type="button" class="epingle"
data-id-ensemble-epingle-boite="5"
type="button"
> >
<img <img
alt="" height="56" alt=""
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg" width="82" height="56"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
> >
</button> </button>
<button <button
aria-label="Sixth pin" class="epingle" aria-label="Sixth pin"
data-id-ensemble-epingle-boite="6" type="button" class="epingle"
data-id-ensemble-epingle-boite="6"
type="button"
> >
<img <img
alt="" height="56" alt=""
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg" width="82" height="56"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
> >
</button> </button>
{# Boîtes de texte #} {# Boîtes de texte #}
<div class="boite-texte" data-id-ensemble-epingle-boite="1"> <div
<button class="boite-texte__bouton-fermeture" type="button"> class="boite-texte"
data-id-ensemble-epingle-boite="1"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<img <img
alt="An icon in form of a cross" height="20" alt="An icon in form of a cross"
src="{{ site.theme.link }}/assets/img/icons/cross.svg" width="20" height="20"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
> >
</button> </button>
@ -88,11 +120,19 @@
<p>More than poetry, its a philosophy.</p> <p>More than poetry, its a philosophy.</p>
</div> </div>
<div class="boite-texte" data-id-ensemble-epingle-boite="2"> <div
<button class="boite-texte__bouton-fermeture" type="button"> class="boite-texte"
data-id-ensemble-epingle-boite="2"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<img <img
alt="An icon in form of a cross" height="20" alt="An icon in form of a cross"
src="{{ site.theme.link }}/assets/img/icons/cross.svg" width="20" height="20"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
> >
</button> </button>
@ -106,11 +146,19 @@
</p> </p>
</div> </div>
<div class="boite-texte" data-id-ensemble-epingle-boite="3"> <div
<button class="boite-texte__bouton-fermeture" type="button"> class="boite-texte"
data-id-ensemble-epingle-boite="3"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<img <img
alt="An icon in form of a cross" height="20" alt="An icon in form of a cross"
src="{{ site.theme.link }}/assets/img/icons/cross.svg" width="20" height="20"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
> >
</button> </button>
@ -125,11 +173,19 @@
</p> </p>
</div> </div>
<div class="boite-texte" data-id-ensemble-epingle-boite="4"> <div
<button class="boite-texte__bouton-fermeture" type="button"> class="boite-texte"
data-id-ensemble-epingle-boite="4"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<img <img
alt="An icon in form of a cross" height="20" alt="An icon in form of a cross"
src="{{ site.theme.link }}/assets/img/icons/cross.svg" width="20" height="20"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
> >
</button> </button>
@ -143,11 +199,19 @@
</p> </p>
</div> </div>
<div class="boite-texte" data-id-ensemble-epingle-boite="5"> <div
<button class="boite-texte__bouton-fermeture" type="button"> class="boite-texte"
data-id-ensemble-epingle-boite="5"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<img <img
alt="An icon in form of a cross" height="20" alt="An icon in form of a cross"
src="{{ site.theme.link }}/assets/img/icons/cross.svg" width="20" height="20"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
> >
</button> </button>
@ -165,11 +229,19 @@
</p> </p>
</div> </div>
<div class="boite-texte" data-id-ensemble-epingle-boite="6"> <div
<button class="boite-texte__bouton-fermeture" type="button"> class="boite-texte"
data-id-ensemble-epingle-boite="6"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<img <img
alt="An icon in form of a cross" height="20" alt="An icon in form of a cross"
src="{{ site.theme.link }}/assets/img/icons/cross.svg" width="20" height="20"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
> >
</button> </button>

View file

@ -5,21 +5,29 @@
<main id="page-accueil"> <main id="page-accueil">
<div class="storytelling"> <div class="storytelling">
<div class="storytelling__conteneur"> <div class="storytelling__conteneur">
<div class="storytelling__image" data-index="0"> <div
class="storytelling__image"
data-index="0"
>
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll0", "", 903, 1080, "image-scroll0") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll0", "", 903, 1080, "image-scroll0")
}} }}
</div> </div>
<div class="storytelling__image" data-index="1"> <div
class="storytelling__image"
data-index="1"
>
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll1", "", 903, 1080, "image-scroll1") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll1", "", 903, 1080, "image-scroll1")
}} }}
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="2" class="storytelling__image"
data-cache
data-index="2"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll2", "", 903, 1080, "image-scroll2") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll2", "", 903, 1080, "image-scroll2")
@ -27,8 +35,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="3" class="storytelling__image"
data-cache
data-index="3"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll3", "", 903, 1080, "image-scroll3") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll3", "", 903, 1080, "image-scroll3")
@ -36,8 +46,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="4" class="storytelling__image"
data-cache
data-index="4"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll4", "", 903, 1080, "image-scroll4") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll4", "", 903, 1080, "image-scroll4")
@ -45,8 +57,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="5" class="storytelling__image"
data-cache
data-index="5"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll5", "", 903, 1080, "image-scroll5") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll5", "", 903, 1080, "image-scroll5")
@ -54,8 +68,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="6" class="storytelling__image"
data-cache
data-index="6"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll6", "", 903, 1080, "image-scroll6") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll6", "", 903, 1080, "image-scroll6")
@ -63,8 +79,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="7" class="storytelling__image"
data-cache
data-index="7"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll7", "", 903, 1080, "image-scroll7") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll7", "", 903, 1080, "image-scroll7")
@ -72,8 +90,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="8" class="storytelling__image"
data-cache
data-index="8"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll8", "", 903, 1080, "image-scroll8") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll8", "", 903, 1080, "image-scroll8")
@ -81,8 +101,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="9" class="storytelling__image"
data-cache
data-index="9"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll9", "", 903, 1080, "image-scroll9") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll9", "", 903, 1080, "image-scroll9")
@ -90,8 +112,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="10" class="storytelling__image"
data-cache
data-index="10"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll10", "", 903, 1080, "image-scroll10") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll10", "", 903, 1080, "image-scroll10")
@ -99,8 +123,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="11" class="storytelling__image"
data-cache
data-index="11"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll11", "", 903, 1080, "image-scroll11") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll11", "", 903, 1080, "image-scroll11")
@ -108,8 +134,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="12" class="storytelling__image"
data-cache
data-index="12"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll12", "", 903, 1080, "image-scroll12") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll12", "", 903, 1080, "image-scroll12")
@ -117,8 +145,10 @@
</div> </div>
<div <div
aria-hidden class="storytelling__image" aria-hidden
data-cache data-index="13" class="storytelling__image"
data-cache
data-index="13"
> >
{{ {{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll13", "", 903, 1080, "image-scroll13") images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll13", "", 903, 1080, "image-scroll13")

View file

@ -8,7 +8,10 @@
{% endblock head %} {% endblock head %}
{% endblock conteneur_html_head %} {% endblock conteneur_html_head %}
<body class="{{ body_class }}" data-langue="{{ langue_courante }}"> <body
class="{{ body_class }}"
data-langue="{{ langue_courante }}"
>
{# En-tête #} {# En-tête #}
{% include "parts/en-tete.twig" %} {% include "parts/en-tete.twig" %}
@ -18,11 +21,14 @@
{# Bouton Revenir en haut #} {# Bouton Revenir en haut #}
<button <button
aria-hidden class="bouton-retour-haut" aria-hidden
id="bouton-retour-haut" type="button" class="bouton-retour-haut"
id="bouton-retour-haut"
type="button"
> >
<img <img
alt="An arrow pointing to the top" src="{{ site.theme.link }}/assets/img/icons/arrow.svg" alt="An arrow pointing to the top"
src="{{ site.theme.link }}/assets/img/icons/arrow.svg"
aria-hidden aria-hidden
> >
<span class="visuellement-cache">Back to top</span> <span class="visuellement-cache">Back to top</span>

View file

@ -2,12 +2,12 @@
{% block head %} {% block head %}
<script> <script>
// Injection d'états pour les Scripts de la page. // Injection d'états pour les Scripts de la page.
const _etats = { const _etats = {
nonce: "{{ nonce_wc }}", nonce: "{{ nonce_wc }}",
authString: "{{ auth_string }}", authString: "{{ auth_string }}",
}; };
</script> </script>
{% endblock head %} {% endblock head %}
@ -21,8 +21,10 @@ const _etats = {
<div class="actions"> <div class="actions">
<button <button
{{produits|length == 12 ? "" : "hidden"}} class="bouton-case-pleine bouton-blanc-sur-noir" {{produits|length == 12 ? "" : "hidden"}}
id="bouton-plus-de-produits" type="button" class="bouton-case-pleine bouton-blanc-sur-noir"
id="bouton-plus-de-produits"
type="button"
> >
Show more products Show more products
</button> </button>

View file

@ -1,7 +1,10 @@
{% extends "base.twig" %} {% extends "base.twig" %}
{% block contenu %} {% block contenu %}
<main class="page-modele-simple" id="page-cgv"> <main
class="page-modele-simple"
id="page-cgv"
>
<div class="contenu"> <div class="contenu">
<header class="contenu__en-tete"> <header class="contenu__en-tete">
<h2>Terms & Conditions</h2> <h2>Terms & Conditions</h2>
@ -49,7 +52,9 @@
</p> </p>
<p> <p>
To start a return you can contact us at <a class="lien-lien" href="mailto:haiku.atelier@gmail.com" To start a return you can contact us at <a
class="lien-lien"
href="mailto:haiku.atelier@gmail.com"
>haiku.atelier@gmail.com</a>. Please note that returns and exchange will need to be send back our workshop >haiku.atelier@gmail.com</a>. Please note that returns and exchange will need to be send back our workshop
in Brussels. in Brussels.
</p> </p>
@ -169,7 +174,9 @@
<p> <p>
<strong>Contact:</strong><br> <strong>Contact:</strong><br>
For inquiries and customer service, please refer to <a class="lien-lien" href="/contact" For inquiries and customer service, please refer to <a
class="lien-lien"
href="/contact"
>our Contact page</a>. >our Contact page</a>.
</p> </p>

View file

@ -1,7 +1,10 @@
{% extends "base.twig" %} {% extends "base.twig" %}
{% block contenu %} {% block contenu %}
<main class="page-modele-simple" id="page-contact"> <main
class="page-modele-simple"
id="page-contact"
>
<div class="contenu"> <div class="contenu">
<header class="contenu__en-tete"> <header class="contenu__en-tete">
<h2>Say hi!</h2> <h2>Say hi!</h2>
@ -10,9 +13,15 @@
<div class="contenu__textuel"> <div class="contenu__textuel">
<p> <p>
For any inquiries, from simple information questions to problems with your products, or just to say hi, don't For any inquiries, from simple information questions to problems with your products, or just to say hi, don't
hesitate to contact us at <a class="lien-lien" href="mailto:haikuatelier@gmail.com"> hesitate to contact us at <a
class="lien-lien"
href="mailto:haikuatelier@gmail.com"
>
haikuatelier@gmail.com haikuatelier@gmail.com
</a> or on Instagram at <a class="lien-lien" href="https://www.instagram.com/haiku.atelier"> </a> or on Instagram at <a
class="lien-lien"
href="https://www.instagram.com/haiku.atelier"
>
haiku.atelier haiku.atelier
</a>. </a>.
</p> </p>

View file

@ -1,7 +1,10 @@
{% extends "base.twig" %} {% extends "base.twig" %}
{% block contenu %} {% block contenu %}
<main class="page-modele-simple" id="page-succes-commande"> <main
class="page-modele-simple"
id="page-succes-commande"
>
<div class="contenu"> <div class="contenu">
<header class="contenu__en-tete"> <header class="contenu__en-tete">
<h2>Failed order!</h2> <h2>Failed order!</h2>
@ -11,7 +14,8 @@
<p>Sadly, something went wrong during your order, or you chose to cancel it. You can try again if you want: your <p>Sadly, something went wrong during your order, or you chose to cancel it. You can try again if you want: your
cart is still there.</p> cart is still there.</p>
<p>If an error persists and you don't know what's going on, please don't hesitate to <a <p>If an error persists and you don't know what's going on, please don't hesitate to <a
class="lien-lien" href="/contact" class="lien-lien"
href="/contact"
>contact us</a>!</p> >contact us</a>!</p>
</div> </div>
</div> </div>

View file

@ -1,13 +1,25 @@
{% macro genere_source_img_multi_formats(rel_url, alt="", width, height, id="") %} {% macro genere_source_img_multi_formats(rel_url, alt="", width, height, id="") %}
<picture id="{{ id }}"> <picture id="{{ id }}">
<source srcset="{{ rel_url }}.jxl" type="image/jxl"> <source
<source srcset="{{ rel_url }}.avif" type="image/avif"> srcset="{{ rel_url }}.jxl"
<source srcset="{{ rel_url }}.webp" type="image/webp"> type="image/jxl"
>
<source
srcset="{{ rel_url }}.avif"
type="image/avif"
>
<source
srcset="{{ rel_url }}.webp"
type="image/webp"
>
<img <img
alt="{{ alt }}" decoding="sync" alt="{{ alt }}"
height="{{ height }}" loading="eager" decoding="sync"
src="{{ rel_url }}.jpg" width="{{ width }}" height="{{ height }}"
loading="eager"
src="{{ rel_url }}.jpg"
width="{{ width }}"
onload="this.style.opacity=1" onload="this.style.opacity=1"
> >
</picture> </picture>

View file

@ -2,17 +2,20 @@
{% block head %} {% block head %}
<script> <script>
// Injection d'états pour les Scripts de la page. // Injection d'états pour les Scripts de la page.
const _etats = { const _etats = {
nonce: "{{ nonce_wc }}", nonce: "{{ nonce_wc }}",
authString: "{{ auth_string }}", authString: "{{ auth_string }}",
}; };
</script> </script>
{% endblock head %} {% endblock head %}
{% block contenu %} {% block contenu %}
<main id="page-panier" data-contient-articles="{{ articles_presents }}"> <main
id="page-panier"
data-contient-articles="{{ articles_presents }}"
>
{# « Your Cart » #} {# « Your Cart » #}
{% include "parts/pages/panier/panneau-panier.twig" %} {% include "parts/pages/panier/panneau-panier.twig" %}
{# Your Info #} {# Your Info #}
@ -20,7 +23,10 @@ const _etats = {
<div class="panier-vide"> <div class="panier-vide">
<p>Sorry! Your cart is empty.</p> <p>Sorry! Your cart is empty.</p>
<a class="lien-bouton" href="{{ pages.shop.lien }}"> <a
class="lien-bouton"
href="{{ pages.shop.lien }}"
>
Go back to the Shop Go back to the Shop
</a> </a>
</div> </div>

View file

@ -1,24 +1,36 @@
<header id="en-tete"> <header id="en-tete">
{# Bouton (dés)activant le menu mobile #} {# Bouton (dés)activant le menu mobile #}
<section class="logo"> <section class="logo">
<button id="bouton-menu-mobile" type="button"> <button
id="bouton-menu-mobile"
type="button"
>
<img <img
alt="Haiku Atelier's Logo" decoding="async" alt="Haiku Atelier's Logo"
height="25" loading="eager" decoding="async"
src="{{ site.theme.link }}/assets/img/logos/logo-lines.svg" width="80" height="25"
loading="eager"
src="{{ site.theme.link }}/assets/img/logos/logo-lines.svg"
width="80"
> >
</button> </button>
</section> </section>
{# TODO: Utiliser un Menu WordPress #} {# TODO: Utiliser un Menu WordPress #}
{# TODO: Utiliser des <span> À L'INTÉRIEUR de <li> #} {# TODO: Utiliser des <span> À L'INTÉRIEUR de <li> #}
<nav class="menu-navigation" id="menu-navigation-en-tete"> <nav
class="menu-navigation"
id="menu-navigation-en-tete"
>
<ul> <ul>
<li <li
class="{{ page_courante == pages.home.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}" class="{{ page_courante == pages.home.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}"
> >
<span> <span>
<a class="lien-menu" href="{{ pages.home.lien }}"> <a
class="lien-menu"
href="{{ pages.home.lien }}"
>
{{ pages.home.nom }} {{ pages.home.nom }}
</a> </a>
</span> </span>
@ -27,7 +39,10 @@
class="{{ est_page_boutique ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}" class="{{ est_page_boutique ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}"
> >
<span> <span>
<a class="lien-menu" href="{{ pages.shop.lien }}"> <a
class="lien-menu"
href="{{ pages.shop.lien }}"
>
{{ pages.shop.nom }} {{ pages.shop.nom }}
</a> </a>
</span> </span>
@ -36,7 +51,10 @@
class="{{ page_courante == pages.about.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}" class="{{ page_courante == pages.about.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}"
> >
<span> <span>
<a class="lien-menu" href="{{ pages.about.lien }}"> <a
class="lien-menu"
href="{{ pages.about.lien }}"
>
{{ pages.about.nom }} {{ pages.about.nom }}
</a> </a>
</span> </span>
@ -46,7 +64,10 @@
class="{{ page_courante == pages.contact.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}" class="{{ page_courante == pages.contact.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}"
> >
<span> <span>
<a class="lien-menu" href="{{ pages.contact.lien }}"> <a
class="lien-menu"
href="{{ pages.contact.lien }}"
>
{{ pages.contact.nom }} {{ pages.contact.nom }}
</a> </a>
</span> </span>
@ -57,8 +78,10 @@
{# Bouton « Panier » avec l'indicateur de quantité de Produits #} {# Bouton « Panier » avec l'indicateur de quantité de Produits #}
<section class="compte-panier"> <section class="compte-panier">
<a <a
class="lien-bouton" data-contient-articles="{{ articles_presents }}" class="lien-bouton"
href="{{ pages.cart.lien }}" rel="cart" data-contient-articles="{{ articles_presents }}"
href="{{ pages.cart.lien }}"
rel="cart"
> >
cart ({{ quantite_articles }}) cart ({{ quantite_articles }})
</a> </a>
@ -66,19 +89,30 @@
{# Menu mobile #} {# Menu mobile #}
<div <div
aria-hidden="true" aria-labelledby="menu-mobile" aria-hidden="true"
class="menu-modale" id="menu-mobile" aria-labelledby="menu-mobile"
class="menu-modale"
id="menu-mobile"
> >
<div class="menu-modale__fond" data-a11y-dialog-hide></div> <div
class="menu-modale__fond"
data-a11y-dialog-hide
></div>
<div class="menu-modale__conteneur"> <div class="menu-modale__conteneur">
<nav class="menu-navigation" id="menu-navigation-mobile"> <nav
class="menu-navigation"
id="menu-navigation-mobile"
>
<ul> <ul>
<li <li
class="{{ page_courante == pages.home.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}" class="{{ page_courante == pages.home.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}"
> >
<span> <span>
<a class="lien-menu" href="{{ pages.home.lien }}"> <a
class="lien-menu"
href="{{ pages.home.lien }}"
>
{{ pages.home.nom }} {{ pages.home.nom }}
</a> </a>
</span> </span>
@ -88,7 +122,10 @@
class="{{ est_page_boutique ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}" class="{{ est_page_boutique ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}"
> >
<span> <span>
<a class="lien-menu" href="{{ pages.shop.lien }}"> <a
class="lien-menu"
href="{{ pages.shop.lien }}"
>
{{ pages.shop.nom }} {{ pages.shop.nom }}
</a> </a>
</span> </span>
@ -98,7 +135,10 @@
class="{{ page_courante == pages.about.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}" class="{{ page_courante == pages.about.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}"
> >
<span> <span>
<a class="lien-menu" href="{{ pages.about.lien }}"> <a
class="lien-menu"
href="{{ pages.about.lien }}"
>
{{ pages.about.nom }} {{ pages.about.nom }}
</a> </a>
</span> </span>
@ -108,7 +148,10 @@
class="{{ page_courante == pages.contact.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}" class="{{ page_courante == pages.contact.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : "menu-navigation__entree" }}"
> >
<span> <span>
<a class="lien-menu" href="{{ pages.contact.lien }}"> <a
class="lien-menu"
href="{{ pages.contact.lien }}"
>
{{ pages.contact.nom }} {{ pages.contact.nom }}
</a> </a>
</span> </span>

View file

@ -1,43 +1,67 @@
<head> <head>
<meta charset="{{ site.charset }}"> <meta charset="{{ site.charset }}">
<meta name="description" content="{{ site.description }}"> <meta
<meta name="viewport" content="width=device-width, initial-scale=1"> name="description"
content="{{ site.description }}"
>
<meta
name="viewport"
content="width=device-width, initial-scale=1"
>
{# Pinterest #} {# Pinterest #}
<meta name="p:domain_verify" content="98fed4c924501d2f2a90c5b37e165085"> <meta
name="p:domain_verify"
content="98fed4c924501d2f2a90c5b37e165085"
>
{# Favicon #} {# Favicon #}
<link rel="apple-touch-icon" href="{{ site.theme.link }}/assets/img/apple-touch-icon.png">
<link <link
rel="icon" href="{{ site.theme.link }}/assets/img/favicon.ico" 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" sizes="48x48"
> >
<link <link
rel="icon" href="{{ site.theme.link }}/assets/img/favicon.svg" rel="icon"
href="{{ site.theme.link }}/assets/img/favicon.svg"
type="image/svg+xml" type="image/svg+xml"
> >
<link rel="manifest" href="{{ site.theme.link }}/assets/site.webmanifest"> <link
rel="manifest"
href="{{ site.theme.link }}/assets/site.webmanifest"
>
{# Préchargements #} {# Préchargements #}
<link <link
as="image" href="{{ site.theme.link }}/assets/img/icons/cloud-gris.svg" as="image"
rel="preload" type="image/svg+xml" href="{{ site.theme.link }}/assets/img/icons/cloud-gris.svg"
rel="preload"
type="image/svg+xml"
> >
<link <link
as="font" crossorigin as="font"
href="{{ site.theme.link }}/assets/fonts/lato/lato-variable-webfont.woff2" rel="preload" crossorigin
href="{{ site.theme.link }}/assets/fonts/lato/lato-variable-webfont.woff2"
rel="preload"
type="font/woff2" type="font/woff2"
> >
<link <link
as="font" crossorigin as="font"
href="{{ site.theme.link }}/assets/fonts/lato/lato-variable-italic-webfont.woff2" rel="preload" crossorigin
href="{{ site.theme.link }}/assets/fonts/lato/lato-variable-italic-webfont.woff2"
rel="preload"
type="font/woff2" type="font/woff2"
> >
{# Plausible #} {# Plausible #}
{% if environnement == "production" %} {% if environnement == "production" %}
<script <script
data-domain="haikuatelier.com" defer data-domain="haikuatelier.com"
defer
src="https://greyhound.haikuatelier.com/js/script.js" src="https://greyhound.haikuatelier.com/js/script.js"
></script> ></script>
{% endif %} {% endif %}

View file

@ -1,11 +1,15 @@
<nav <nav
id="menu-categories-produits" class="menu-categories-produits" id="menu-categories-produits"
class="menu-categories-produits"
data-entrees-presentes-fin data-entrees-presentes-fin
> >
<svg <svg
id="fleche-defilement-categories-produits-gauche" height="15" id="fleche-defilement-categories-produits-gauche"
transform="scale(-1 1)" viewBox="0 0 15 15" height="15"
width="15" xmlns="http://www.w3.org/2000/svg" transform="scale(-1 1)"
viewBox="0 0 15 15"
width="15"
xmlns="http://www.w3.org/2000/svg"
> >
<path <path
d="M8.293 2.293a1 1 0 0 1 1.414 0l4.5 4.5a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414-1.414L11 8.5H1.5a1 1 0 0 1 0-2H11L8.293 3.707a1 1 0 0 1 0-1.414" d="M8.293 2.293a1 1 0 0 1 1.414 0l4.5 4.5a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414-1.414L11 8.5H1.5a1 1 0 0 1 0-2H11L8.293 3.707a1 1 0 0 1 0-1.414"
@ -16,14 +20,19 @@
<li {{ est_page_tous_produits ? "class='categorie-courante'" : '' }}><a href="{{ pages.shop.lien }}">All</a></li> <li {{ est_page_tous_produits ? "class='categorie-courante'" : '' }}><a href="{{ pages.shop.lien }}">All</a></li>
{% for categorie in categories_produits %} {% for categorie in categories_produits %}
{# TODO: Factoriser l'injection de classe d'une manière plus propre #} {# TODO: Factoriser l'injection de classe d'une manière plus propre #}
<li {{ categorie.courante ? "class='categorie-courante'" : '' }} id="categorie-{{ categorie.slug|e }}"> <li
{{ categorie.courante ? "class='categorie-courante'" : '' }}
id="categorie-{{ categorie.slug|e }}"
>
<a href="/{{ base_categorie_produit }}/{{ categorie.slug|e }}">{{ categorie.nom|e }}</a> <a href="/{{ base_categorie_produit }}/{{ categorie.slug|e }}">{{ categorie.nom|e }}</a>
</li> </li>
{% endfor %} {% endfor %}
</ul> </ul>
<svg <svg
id="fleche-defilement-categories-produits-droite" height="15" id="fleche-defilement-categories-produits-droite"
viewBox="0 0 15 15" width="15" height="15"
viewBox="0 0 15 15"
width="15"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
> >
<path <path

View file

@ -1,33 +1,45 @@
<section class="panneau" id="panneau-informations-client"> <section
class="panneau"
id="panneau-informations-client"
>
<header class="panneau__en-tete"> <header class="panneau__en-tete">
<h2>Your info</h2> <h2>Your info</h2>
</header> </header>
{# « PayPal Express Checkout » #} {# « PayPal Express Checkout » #}
<div class="panneau__paypal-express" hidden> <div
class="panneau__paypal-express"
hidden
>
<p>Express Check-out</p> <p>Express Check-out</p>
{# Bouton PayPal #} {# Bouton PayPal #}
<button type="button"> <button type="button">
<img <img
alt="PayPal's Logo" height="18" alt="PayPal's Logo"
src="{{ site.theme.link }}/assets/img/paypal/logo-paypal.svg" width="13.48" height="18"
src="{{ site.theme.link }}/assets/img/paypal/logo-paypal.svg"
width="13.48"
> >
<img <img
alt="PayPal" height="18" alt="PayPal"
src="{{ site.theme.link }}/assets/img/paypal/titre-paypal.svg" width="67.69" height="18"
src="{{ site.theme.link }}/assets/img/paypal/titre-paypal.svg"
width="67.69"
> >
</button> </button>
</div> </div>
<form <form
class="panneau__formulaires" id="formulaire-commande" class="panneau__formulaires"
id="formulaire-commande"
method="post" method="post"
> >
{# Formulaires pour la livraison et facturation #} {# Formulaires pour la livraison et facturation #}
<div class="panneau__formulaires__separation-adresses"> <div class="panneau__formulaires__separation-adresses">
<input <input
id="separation-adresses" name="separation-adresses" id="separation-adresses"
name="separation-adresses"
type="checkbox" type="checkbox"
> >
<label for="separation-adresses">Use a separate billing address</label> <label for="separation-adresses">Use a separate billing address</label>
@ -40,9 +52,12 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="livraison-prenom">First name</label> <label for="livraison-prenom">First name</label>
<input <input
autocomplete="given-name" id="livraison-prenom" autocomplete="given-name"
minlength="2" name="livraison-prenom" id="livraison-prenom"
required type="text" minlength="2"
name="livraison-prenom"
required
type="text"
value="{{ adresse_livraison.first_name }}" value="{{ adresse_livraison.first_name }}"
> >
</div> </div>
@ -50,9 +65,12 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="livraison-nom">Last name</label> <label for="livraison-nom">Last name</label>
<input <input
autocomplete="family-name" id="livraison-nom" autocomplete="family-name"
name="livraison-nom" minlength="2" id="livraison-nom"
required type="text" name="livraison-nom"
minlength="2"
required
type="text"
value="{{ adresse_livraison.last_name }}" value="{{ adresse_livraison.last_name }}"
> >
</div> </div>
@ -60,27 +78,36 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="livraison-adresse">Address</label> <label for="livraison-adresse">Address</label>
<input <input
autocomplete="street-address" id="livraison-adresse" autocomplete="street-address"
name="livraison-adresse" required id="livraison-adresse"
type="text" value="{{ adresse_livraison.address_1 }}" name="livraison-adresse"
required
type="text"
value="{{ adresse_livraison.address_1 }}"
> >
</div> </div>
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="livraison-code-postal">Postcode</label> <label for="livraison-code-postal">Postcode</label>
<input <input
id="livraison-code-postal" minlength="3" id="livraison-code-postal"
name="livraison-code-postal" required minlength="3"
type="text" value="{{ adresse_livraison.postcode }}" name="livraison-code-postal"
required
type="text"
value="{{ adresse_livraison.postcode }}"
> >
</div> </div>
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="livraison-ville">City</label> <label for="livraison-ville">City</label>
<input <input
autocomplete="address-level2" id="livraison-ville" autocomplete="address-level2"
minlength="2" name="livraison-ville" id="livraison-ville"
required type="text" minlength="2"
name="livraison-ville"
required
type="text"
value="{{ adresse_livraison.city }}" value="{{ adresse_livraison.city }}"
> >
</div> </div>
@ -88,20 +115,27 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="livraison-region-etat">Region/State</label> <label for="livraison-region-etat">Region/State</label>
<input <input
autocomplete="address-level1" id="livraison-region-etat" autocomplete="address-level1"
name="livraison-region-etat" placeholder="If applicable" id="livraison-region-etat"
type="text" value="{{ adresse_livraison.state }}" name="livraison-region-etat"
placeholder="If applicable"
type="text"
value="{{ adresse_livraison.state }}"
> >
</div> </div>
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="livraison-pays">Country</label> <label for="livraison-pays">Country</label>
<select <select
id="livraison-pays" name="livraison-pays" id="livraison-pays"
name="livraison-pays"
required required
> >
{% for cle, pays in pays_livraison %} {% for cle, pays in pays_livraison %}
<option {{cle == adresse_livraison.country ? "selected" : ""}} value="{{cle}}"> <option
{{cle == adresse_livraison.country ? "selected" : ""}}
value="{{cle}}"
>
{{ pays }} {{ pays }}
</option> </option>
{% endfor %} {% endfor %}
@ -111,9 +145,12 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="livraison-telephone">Phone</label> <label for="livraison-telephone">Phone</label>
<input <input
autocomplete="tel" id="livraison-telephone" autocomplete="tel"
minlength="6" name="livraison-telephone" id="livraison-telephone"
required type="tel" minlength="6"
name="livraison-telephone"
required
type="tel"
value="{{ adresse_livraison.phone }}" value="{{ adresse_livraison.phone }}"
> >
</div> </div>
@ -121,45 +158,62 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="livraison-email">Email Address</label> <label for="livraison-email">Email Address</label>
<input <input
autocomplete="email" id="livraison-email" autocomplete="email"
minlength="4" name="livraison-email" id="livraison-email"
required type="email" minlength="4"
name="livraison-email"
required
type="email"
value="{{ email }}" value="{{ email }}"
> >
</div> </div>
</div> </div>
</div> </div>
<div class="panneau__formulaires__facturation formulaire" hidden> <div
class="panneau__formulaires__facturation formulaire"
hidden
>
<h3 class="formulaire__titre">Billing:</h3> <h3 class="formulaire__titre">Billing:</h3>
<div class="formulaire__champs"> <div class="formulaire__champs">
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="facturation-prenom">First name</label> <label for="facturation-prenom">First name</label>
<input <input
autocomplete="given-name" disabled autocomplete="given-name"
id="facturation-prenom" name="facturation-prenom" disabled
minlength="2" required id="facturation-prenom"
type="text" value="{{ adresse_facturation.first_name }}" name="facturation-prenom"
minlength="2"
required
type="text"
value="{{ adresse_facturation.first_name }}"
> >
</div> </div>
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="facturation-nom">Last name</label> <label for="facturation-nom">Last name</label>
<input <input
autocomplete="family-name" disabled autocomplete="family-name"
id="facturation-nom" name="facturation-nom" disabled
minlength="2" required id="facturation-nom"
type="text" value="{{ adresse_facturation.last_name }}" name="facturation-nom"
minlength="2"
required
type="text"
value="{{ adresse_facturation.last_name }}"
> >
</div> </div>
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="facturation-adresse">Address</label> <label for="facturation-adresse">Address</label>
<input <input
autocomplete="street-address" disabled autocomplete="street-address"
id="facturation-adresse" name="facturation-adresse" disabled
required type="text" id="facturation-adresse"
name="facturation-adresse"
required
type="text"
value="{{ adresse_facturation.address_1 }}" value="{{ adresse_facturation.address_1 }}"
> >
</div> </div>
@ -167,9 +221,12 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="facturation-code-postal">Postcode</label> <label for="facturation-code-postal">Postcode</label>
<input <input
disabled id="facturation-code-postal" disabled
minlength="3" name="facturation-code-postal" id="facturation-code-postal"
required type="text" minlength="3"
name="facturation-code-postal"
required
type="text"
value="{{ adresse_facturation.postcode }}" value="{{ adresse_facturation.postcode }}"
> >
</div> </div>
@ -177,19 +234,26 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="facturation-ville">City</label> <label for="facturation-ville">City</label>
<input <input
autocomplete="address-level2" disabled autocomplete="address-level2"
id="facturation-ville" minlength="2" disabled
name="facturation-ville" required id="facturation-ville"
type="text" value="{{ adresse_facturation.city }}" minlength="2"
name="facturation-ville"
required
type="text"
value="{{ adresse_facturation.city }}"
> >
</div> </div>
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="facturation-region-etat">Region/State</label> <label for="facturation-region-etat">Region/State</label>
<input <input
autocomplete="address-level1" disabled autocomplete="address-level1"
id="facturation-region-etat" name="facturation-region-etat" disabled
placeholder="If applicable" type="text" id="facturation-region-etat"
name="facturation-region-etat"
placeholder="If applicable"
type="text"
value="{{ adresse_facturation.state }}" value="{{ adresse_facturation.state }}"
> >
</div> </div>
@ -197,11 +261,15 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="facturation-pays">Country</label> <label for="facturation-pays">Country</label>
<select <select
id="facturation-pays" name="facturation-pays" id="facturation-pays"
name="facturation-pays"
required required
> >
{% for cle, pays in pays_livraison %} {% for cle, pays in pays_livraison %}
<option {{cle == adresse_livraison.country ? "selected" : ""}} value="{{cle}}"> <option
{{cle == adresse_livraison.country ? "selected" : ""}}
value="{{cle}}"
>
{{ pays }} {{ pays }}
</option> </option>
{% endfor %} {% endfor %}
@ -211,27 +279,39 @@
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="facturation-telephone">Phone</label> <label for="facturation-telephone">Phone</label>
<input <input
autocomplete="tel" disabled autocomplete="tel"
id="facturation-telephone" minlength="6" disabled
name="facturation-telephone" required id="facturation-telephone"
type="tel" value="{{ adresse_facturation.phone }}" minlength="6"
name="facturation-telephone"
required
type="tel"
value="{{ adresse_facturation.phone }}"
> >
</div> </div>
<div class="formulaire__champs__champ"> <div class="formulaire__champs__champ">
<label for="facturation-email">Email Address</label> <label for="facturation-email">Email Address</label>
<input <input
autocomplete="email" disabled autocomplete="email"
id="facturation-email" minlength="4" disabled
name="facturation-email" required id="facturation-email"
type="email" value="{{ email }} " minlength="4"
name="facturation-email"
required
type="email"
value="{{ email }} "
> >
</div> </div>
</div> </div>
</div> </div>
<div class="panneau__formulaires__message"> <div class="panneau__formulaires__message">
<p class="message" id="message-formulaire-adresses"> </p> <p
class="message"
id="message-formulaire-adresses"
>
</p>
</div> </div>
{# Formulaire de paiement #} {# Formulaire de paiement #}
@ -247,10 +327,14 @@
</p> </p>
</div> </div>
<div class="formulaire__paiement__choix" hidden> <div
class="formulaire__paiement__choix"
hidden
>
<label for="paiement-stripe">Credit card</label> <label for="paiement-stripe">Credit card</label>
<input <input
id="paiement-stripe" name="type-paiement" id="paiement-stripe"
name="type-paiement"
type="radio" type="radio"
> >
</div> </div>
@ -259,7 +343,10 @@
</form> </form>
<footer class="panneau__pied-de-page"> <footer class="panneau__pied-de-page">
<button form="formulaire-commande" type="submit"> <button
form="formulaire-commande"
type="submit"
>
Calculate shipping Calculate shipping
</button> </button>
</footer> </footer>

View file

@ -1,4 +1,7 @@
<section class="panneau" id="panneau-panier"> <section
class="panneau"
id="panneau-panier"
>
<header class="panneau__en-tete"> <header class="panneau__en-tete">
<h2>Your cart</h2> <h2>Your cart</h2>
</header> </header>
@ -6,8 +9,10 @@
<div class="panneau__grille-produits"> <div class="panneau__grille-produits">
{% for produit in produits_panier %} {% for produit in produits_panier %}
<article <article
class="panneau__grille-produits__produit" data-cle-panier="{{ produit.cle }}" class="panneau__grille-produits__produit"
data-id-produit="{{ produit.id_produit }}" data-id-variation="{{ produit.id_variation }}" data-cle-panier="{{ produit.cle }}"
data-id-produit="{{ produit.id_produit }}"
data-id-variation="{{ produit.id_variation }}"
data-quantite="{{ produit.quantite }}" data-quantite="{{ produit.quantite }}"
> >
<div class="panneau__grille-produits__produit__illustratif"> <div class="panneau__grille-produits__produit__illustratif">
@ -34,20 +39,28 @@
<div class="detail-produit__actions"> <div class="detail-produit__actions">
<button <button
class="detail-produit__actions__soustraction" {{ produit.quantite > 1 ? "" : "disabled" }} class="detail-produit__actions__soustraction"
{{ produit.quantite > 1 ? "" : "disabled" }}
type="button" type="button"
> >
- -
</button> </button>
<input <input
min="1" type="number" min="1"
type="number"
value="{{ produit.quantite }}" value="{{ produit.quantite }}"
> >
<button class="detail-produit__actions__addition" type="button"> <button
class="detail-produit__actions__addition"
type="button"
>
+ +
</button> </button>
<button class="detail-produit__actions__suppression" type="button"> <button
class="detail-produit__actions__suppression"
type="button"
>
Remove Remove
</button> </button>
</div> </div>
@ -58,27 +71,38 @@
<div class="panneau__instructions-code-promo"> <div class="panneau__instructions-code-promo">
<textarea <textarea
class="panneau__instructions-code-promo__instructions" id="instructions-client" class="panneau__instructions-code-promo__instructions"
maxlength="2000" minlength="10" id="instructions-client"
maxlength="2000"
minlength="10"
name="instructions" name="instructions"
placeholder="Add special instructions for your order: specify the products you want wrapped and how (i.e. all in one bag or separated), a gift message, etc." placeholder="Add special instructions for your order: specify the products you want wrapped and how (i.e. all in one bag or separated), a gift message, etc."
resizable="false" rows="3" resizable="false"
rows="3"
spellcheck="true" spellcheck="true"
></textarea> ></textarea>
<form <form
action="" class="panneau__instructions-code-promo__code-promo" action=""
{{ code_promo ? "data-code-promo-present" : "" }} id="ensemble-code-promo" class="panneau__instructions-code-promo__code-promo"
{{ code_promo ? "data-code-promo-present" : "" }}
id="ensemble-code-promo"
> >
<input <input
{{ code_promo ? "disabled" : "" }} id="champ-code-promo" {{ code_promo ? "disabled" : "" }}
maxlength="20" minlength="3" id="champ-code-promo"
name="code-promo" placeholder="Discount code or gift card" maxlength="20"
type="text" value='{{ code_promo ? code_promo : ""}}' minlength="3"
name="code-promo"
placeholder="Discount code or gift card"
type="text"
value='{{ code_promo ? code_promo : ""}}'
> >
<button <button
class="bouton-blanc-sur-noir" for="code-promo" class="bouton-blanc-sur-noir"
id="bouton-code-promo" type="button" for="code-promo"
id="bouton-code-promo"
type="button"
> >
{{ code_promo ? "Remove" : "Apply" }} {{ code_promo ? "Remove" : "Apply" }}
</button> </button>
@ -88,20 +112,27 @@
</div> </div>
<div class="panneau__sous-totaux"> <div class="panneau__sous-totaux">
<div class="panneau__sous-totaux__ligne" id="sous-total-produits"> <div
class="panneau__sous-totaux__ligne"
id="sous-total-produits"
>
<p>Subtotal:</p> <p>Subtotal:</p>
<p><strong>{{ sous_total_panier }}€</strong></p> <p><strong>{{ sous_total_panier }}€</strong></p>
</div> </div>
<div <div
class="panneau__sous-totaux__ligne" id="sous-total-reduction" class="panneau__sous-totaux__ligne"
id="sous-total-reduction"
{{ code_promo ? "" : "hidden"}} {{ code_promo ? "" : "hidden"}}
> >
<p>Discount:</p> <p>Discount:</p>
<p><strong>-{{ sous_total_reduction }}€</strong></p> <p><strong>-{{ sous_total_reduction }}€</strong></p>
</div> </div>
<div class="panneau__sous-totaux__ligne" id="sous-total-livraison"> <div
class="panneau__sous-totaux__ligne"
id="sous-total-livraison"
>
<p>Shipping:</p> <p>Shipping:</p>
{% if sous_total_livraison == 0 %} {% if sous_total_livraison == 0 %}
<p> <p>

View file

@ -2,27 +2,36 @@
Boîte flottante contenant les informations sur le Produit, en détails, et le sélecteur de quantité/taille pour l'ajout au Panier Boîte flottante contenant les informations sur le Produit, en détails, et le sélecteur de quantité/taille pour l'ajout au Panier
#} #}
<aside aria-label="Product's details and variation selection" class="informations-produit"> <aside
aria-label="Product's details and variation selection"
class="informations-produit"
>
<div class="informations-produit__conteneur"> <div class="informations-produit__conteneur">
<section class="onglets-details-produit"> <section class="onglets-details-produit">
{# Contenus #} {# Contenus #}
<section <section
aria-labelledby="label-details-produit" hidden aria-labelledby="label-details-produit"
id="details-produit" role="tabpanel" hidden
id="details-produit"
role="tabpanel"
> >
{{ produit.details }} {{ produit.details }}
</section> </section>
<section <section
aria-labelledby="label-conditions-livraison" hidden aria-labelledby="label-conditions-livraison"
id="conditions-livraison" role="tabpanel" hidden
id="conditions-livraison"
role="tabpanel"
> >
{{ descriptions_produits.texte_conditions_livraison }} {{ descriptions_produits.texte_conditions_livraison }}
</section> </section>
<section <section
aria-labelledby="label-entretien-produit" hidden aria-labelledby="label-entretien-produit"
id="entretien-produit" role="tabpanel" hidden
id="entretien-produit"
role="tabpanel"
> >
{{ descriptions_produits.texte_entretien_produit }} {{ descriptions_produits.texte_entretien_produit }}
</section> </section>
@ -31,8 +40,10 @@
<ul role="tablist"> <ul role="tablist">
<li role="presentation"> <li role="presentation">
<a <a
aria-selected="false" href="#details-produit" aria-selected="false"
id="label-details-produit" role="tab" href="#details-produit"
id="label-details-produit"
role="tab"
> >
Details Details
</a> </a>
@ -40,8 +51,10 @@
<li role="presentation"> <li role="presentation">
<a <a
aria-selected="false" href="#conditions-livraison" aria-selected="false"
id="label-conditions-livraison" role="tab" href="#conditions-livraison"
id="label-conditions-livraison"
role="tab"
> >
Shipping Shipping
</a> </a>
@ -49,8 +62,10 @@
<li role="presentation"> <li role="presentation">
<a <a
aria-selected="false" href="#entretien-produit" aria-selected="false"
id="label-entretien-produit" role="tab" href="#entretien-produit"
id="label-entretien-produit"
role="tab"
> >
Care Care
</a> </a>
@ -63,23 +78,32 @@
{% if variations_produit|length > 1 %} {% if variations_produit|length > 1 %}
<div class="selecteur-produit__selection-variation"> <div class="selecteur-produit__selection-variation">
<label for="selecteur-variation" id="label-selecteur-variation"> <label
for="selecteur-variation"
id="label-selecteur-variation"
>
Variation: Variation:
</label> </label>
<div class="selecteur-produit__selection-variation__selecteurs"> <div class="selecteur-produit__selection-variation__selecteurs">
<select <select
aria-labelledby="label-selecteur-variation" class="selecteur-natif" aria-labelledby="label-selecteur-variation"
id="selecteur-variation" name="variations" class="selecteur-natif"
id="selecteur-variation"
name="variations"
> >
<option <option
disabled selected disabled
selected
value="" value=""
> >
-- --
</option> </option>
{% for variation in variations_produit %} {% for variation in variations_produit %}
<option data-prix="{{ variation.prix }}" value="{{ variation.id }}"> <option
data-prix="{{ variation.prix }}"
value="{{ variation.id }}"
>
{{ variation.titre }} {{ variation.titre }}
</option> </option>
{% endfor %} {% endfor %}
@ -93,8 +117,10 @@
<section class="actions-produit"> <section class="actions-produit">
<button <button
class="bouton-case-pleine" {{ variations_produit|length > 1 ? "disabled" : "" }} class="bouton-case-pleine"
id="bouton-ajout-panier" type="button" {{ variations_produit|length > 1 ? "disabled" : "" }}
id="bouton-ajout-panier"
type="button"
> >
Add to cart Add to cart
</button> </button>

View file

@ -1,5 +1,8 @@
<div class="fleches-defilement"> <div class="fleches-defilement">
<button class="fleches-defilement__bouton bouton-fleche" type="button"> <button
class="fleches-defilement__bouton bouton-fleche"
type="button"
>
{# {#
<svg <svg
height="2rem" height="2rem"
@ -15,8 +18,10 @@
</svg> </svg>
#} #}
<svg <svg
height="1.5rem" transform="scale(-1 1)" height="1.5rem"
viewBox="94.634 56.652 88.879 79.521" width="1.5rem" transform="scale(-1 1)"
viewBox="94.634 56.652 88.879 79.521"
width="1.5rem"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
> >
<path <path
@ -26,10 +31,15 @@
</svg> </svg>
</button> </button>
<button class="fleches-defilement__bouton bouton-fleche" type="button"> <button
class="fleches-defilement__bouton bouton-fleche"
type="button"
>
<svg <svg
height="1.5rem" viewBox="94.634 56.652 88.879 79.521" height="1.5rem"
width="1.5rem" xmlns="http://www.w3.org/2000/svg" viewBox="94.634 56.652 88.879 79.521"
width="1.5rem"
xmlns="http://www.w3.org/2000/svg"
> >
<path <path
d="m94.623 136.156 88.869-36.863-88.869-42.648s21.33 20.87 21.33 39.756c0 18.891-21.33 39.755-21.33 39.755" d="m94.623 136.156 88.869-36.863-88.869-42.648s21.33 20.87 21.33 39.756c0 18.891-21.33 39.755-21.33 39.755"
@ -40,7 +50,10 @@
</div> </div>
<main class="photos-produit"> <main class="photos-produit">
<div aria-label="Photo of the Product alone" class="colonne colonne-gauche"> <div
aria-label="Photo of the Product alone"
class="colonne colonne-gauche"
>
{% for photo in produit.photos_colonne_gauche %} {% for photo in produit.photos_colonne_gauche %}
<figure data-index="0"> <figure data-index="0">
<picture> <picture>
@ -50,7 +63,10 @@
{% endfor %} {% endfor %}
</div> </div>
<div aria-label="Photos of the Product worn" class="colonne colonne-droite"> <div
aria-label="Photos of the Product worn"
class="colonne colonne-droite"
>
{% for photo in produit.photos_colonne_droite %} {% for photo in produit.photos_colonne_droite %}
<figure data-index="{{ loop.index }}"> <figure data-index="{{ loop.index }}">
<picture> <picture>

View file

@ -1,4 +1,7 @@
<section aria-label="Products in the same Collection" class="produits-similaires"> <section
aria-label="Products in the same Collection"
class="produits-similaires"
>
<header><h2>From the same Collection</h2></header> <header><h2>From the same Collection</h2></header>
{% include "parts/pages/produit/grille-produits-similaires.twig" %} {% include "parts/pages/produit/grille-produits-similaires.twig" %}

View file

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

View file

@ -1,6 +1,9 @@
<footer id="pied-de-page"> <footer id="pied-de-page">
<section class="zone-menu-navigation-secondaire"> <section class="zone-menu-navigation-secondaire">
<nav class="menu-navigation" id="menu-navigation-secondaire"> <nav
class="menu-navigation"
id="menu-navigation-secondaire"
>
<ul> <ul>
<li><a href="/contact">Contact</a></li> <li><a href="/contact">Contact</a></li>
<li><a href="/terms-and-conditions">Terms & Conditions</a></li> <li><a href="/terms-and-conditions">Terms & Conditions</a></li>
@ -10,12 +13,18 @@
</section> </section>
<section class="zone-liens-reseaux-sociaux"> <section class="zone-liens-reseaux-sociaux">
<nav class="menu-navigation" id="liens-reseaux-sociaux"> <nav
class="menu-navigation"
id="liens-reseaux-sociaux"
>
<ul> <ul>
{% for lien in liens_reseaux_sociaux %} {% for lien in liens_reseaux_sociaux %}
{% if lien.url %} {% if lien.url %}
<li> <li>
<a href="{{ lien.url }}" target="_blank"> <a
href="{{ lien.url }}"
target="_blank"
>
{{ lien.nom }} {{ lien.nom }}
</a> </a>
</li> </li>

View file

@ -2,7 +2,7 @@
{% block head %} {% block head %}
<script> <script>
// dprint-ignore-file // dprint-ignore-file
// Injection d'états pour les Scripts de la page. // Injection d'états pour les Scripts de la page.
/** /**

View file

@ -17,7 +17,10 @@
</p> </p>
<p> <p>
Don't hesitate to <a class="lien-lien" href="/contact">contact us</a> if you have any questions! Don't hesitate to <a
class="lien-lien"
href="/contact"
>contact us</a> if you have any questions!
</p> </p>
</div> </div>

View file

@ -0,0 +1,42 @@
<?php
/**
* Le modèle de l'email envoyé au client à la finalisation/l'envoi de la commande (« Completed Order »).
*/
use Automattic\WooCommerce\Admin\Overrides\Order;
use Carbon\Carbon;
use Timber\Timber;
use Illuminate\Support\Str;
if (!defined("ABSPATH")) {
exit();
}
// Initialise Timber
Timber::init();
// Sélectionne le répertoire contenant les modèles Twig
Timber::$dirname = ["views"];
// Contexte et modèles
$contexte = Timber::context();
$modeles = ["email-commande-envoyee.twig"];
/** @var Order $commande La Commande issue du contexte contenu dans la variable $order. */
$commande = $order;
/** @var Carbon $date */
$date = new Carbon($commande->get_date_created());
$email = [
"commande" => [
"date" => $date->toDateString(),
"id" => $commande->get_id(),
],
"livraison" => [
"transporteur" => Str::of($commande->get_shipping_method())->replace(" (Free)", ""),
"numero_suivi" => blank($commande->get_meta("tracking_number"))
? "UNKNOWN_TRACKING_NUMBER"
: $commande->get_meta("tracking_number"),
],
];
$contexte["commande"] = $email;
// Rendu
Timber::render(filenames: $modeles, data: $contexte);

View file

@ -1,12 +1,13 @@
<?php <?php
/** /**
* Le modèle du reçu envoyé au client. * Le modèle du reçu envoyé au client (« Order Details »).
*/ */
use Automattic\WooCommerce\Admin\Overrides\Order;
use Carbon\Carbon;
use Illuminate\Support\Number; use Illuminate\Support\Number;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Timber\Timber; use Timber\Timber;
use Carbon\Carbon;
if (!defined("ABSPATH")) { if (!defined("ABSPATH")) {
exit(); exit();
@ -14,15 +15,12 @@ if (!defined("ABSPATH")) {
// Initialise Timber // Initialise Timber
Timber::init(); Timber::init();
// Sélectionne le répertoire contenant les modèles Twig // Sélectionne le répertoire contenant les modèles Twig
Timber::$dirname = ["views"]; Timber::$dirname = ["views"];
// Contexte et modèles // Contexte et modèles
$contexte = Timber::context(); $contexte = Timber::context();
$modeles = ["email-base.twig"]; $modeles = ["email-base.twig"];
/** @var Order $commande La Commande issue du contexte contenu dans la variable $order. */
/** @var Order $commande */
$commande = $order; $commande = $order;
/** @var Carbon $date */ /** @var Carbon $date */
$date = new Carbon($commande->get_date_created()); $date = new Carbon($commande->get_date_created());
@ -36,7 +34,10 @@ $email = [
"date" => $date->toDateString(), "date" => $date->toDateString(),
"id" => $commande->get_id(), "id" => $commande->get_id(),
], ],
"livraison" => $commande->get_shipping_method(), "livraison" => [
"methode" => $commande->get_shipping_method(),
"numero_suivi" => $commande->get_meta("tracking_number"),
],
"paiement" => [ "paiement" => [
"methode" => "", "methode" => "",
], ],
@ -47,12 +48,14 @@ $email = [
$produit_article = $article->get_product(); $produit_article = $article->get_product();
return [ return [
// Récupère l'Attribut d'un Produit variable ou renvoie un tableau vide
"attribut" => $produit->is_type("variable") "attribut" => $produit->is_type("variable")
? collect($produit->get_attributes()) ? collect($produit->get_attributes())
->mapWithKeys(function ($atr, $cle) use ($produit_article) { ->mapWithKeys(function ($atr, $cle) use ($produit_article) {
$nom_attribut = Str::lower(wc_attribute_label($cle, $produit_article)); return [
$valeur_attribut = $produit_article->get_attribute($cle); "nom" => Str::lower(wc_attribute_label($cle, $produit_article)),
return ["nom" => $nom_attribut, "valeur" => $valeur_attribut]; "valeur" => $produit_article->get_attribute($cle),
];
}) })
->toArray() ->toArray()
: [], : [],
@ -76,11 +79,6 @@ $email = [
$email["adresses"]["livraison"]["country"] = WC()->countries->countries[$commande->get_shipping_country()]; $email["adresses"]["livraison"]["country"] = WC()->countries->countries[$commande->get_shipping_country()];
$email["adresses"]["facturation"]["country"] = WC()->countries->countries[$commande->get_billing_country()]; $email["adresses"]["facturation"]["country"] = WC()->countries->countries[$commande->get_billing_country()];
// echo "<pre>";
// print_r($commande);
// echo "</pre>";
$contexte["commande"] = $email; $contexte["commande"] = $email;
// Rendu // Rendu
Timber::render(filenames: $modeles, data: $contexte); Timber::render(filenames: $modeles, data: $contexte);

View file

@ -1,10 +1,13 @@
<?php <?php
/** /**
* Customer processing order email * Le modèle de l'email envoyé au client quand la Commande a été confirmée (« Processing Order »).
*/ */
use Timber\Timber; use Automattic\WooCommerce\Admin\Overrides\Order;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Support\Number;
use Illuminate\Support\Str;
use Timber\Timber;
if (!defined("ABSPATH")) { if (!defined("ABSPATH")) {
exit(); exit();
@ -12,47 +15,66 @@ if (!defined("ABSPATH")) {
// Initialise Timber // Initialise Timber
Timber::init(); Timber::init();
// Sélectionne le répertoire contenant les modèles Twig // Sélectionne le répertoire contenant les modèles Twig
Timber::$dirname = ["views"]; Timber::$dirname = ["views"];
// Contexte et modèles // Contexte et modèles
$contexte = Timber::context(); $contexte = Timber::context();
$modeles = ["email-base.twig"]; $modeles = ["email-commande-recue.twig"];
/** @var Order $commande La Commande issue du contexte contenu dans la variable $order. */
/** @var WC_Order $commande */
$commande = $order; $commande = $order;
/** @var Carbon $date */ /** @var Carbon $date */
$date = new Carbon($commande->get_date_created()); $date = new Carbon($commande->get_date_created());
$email = [ $email = [
"adresses" => [ "adresses" => [
"facturation" => [], "facturation" => $commande->get_address("billing"),
"livraison" => [], "livraison" => $commande->get_address("shipping"),
], ],
"commande" => [ "commande" => [
"date" => $date->toDateString(), "date" => $date->toDateString(),
"id" => $commande->get_id(), "id" => $commande->get_id(),
], ],
"livraison" => [], "paiement" => [
"produits" => collect($commande->get_items())->map(function (WC_Order_Item $produit) { "methode" => "",
],
"produits" => collect($commande->get_items())->map(function (WC_Order_Item_Product $article) {
/** @var WC_Product_Simple|WC_Product_Variable $produit */
$produit = wc_get_product($article["product_id"]);
/** @var WC_Product_Simple|WC_Product_Variation $produit_article */
$produit_article = $article->get_product();
return [ return [
// Récupère l'Attribut d'un Produit variable ou renvoie un tableau vide
"attribut" => $produit->is_type("variable")
? collect($produit->get_attributes())
->mapWithKeys(function ($atr, $cle) use ($produit_article) {
return [
"nom" => Str::lower(wc_attribute_label($cle, $produit_article)),
"valeur" => $produit_article->get_attribute($cle),
];
})
->toArray()
: [],
"lien" => $produit->get_permalink(), "lien" => $produit->get_permalink(),
"nom" => $produit->get_name(), "nom" => $produit->get_title(),
"prix_total" => $produit->get_total(), "prix_total" => $article->get_total(),
"quantite" => $produit->get_quantity(), "quantite" => $article->get_quantity(),
"titre_variation" => "",
]; ];
}), }),
"totaux" => [ "totaux" => [
"sous_total_livraison" => $commande->get_shipping_total(), "sous_total_livraison" => $commande->get_shipping_total() == "0" ? "Free" : $commande->get_shipping_total() . "",
"sous_total_produits" => $commande->get_subtotal(), "sous_total_produits" => $commande->get_subtotal() . "",
"sous_total_reduction" => $commande->get_discount_total(), "sous_total_reduction" =>
"total" => $commande->get_total(), $commande->get_discount_total == "0.00"
? "0"
: Number::format($commande->get_discount_total(), maxPrecision: 2) . "",
"total" => Number::format($commande->get_total(), maxPrecision: 2) . "",
], ],
]; ];
// Transforme les codes de pays en noms de pays
$email["adresses"]["livraison"]["country"] = WC()->countries->countries[$commande->get_shipping_country()];
$email["adresses"]["facturation"]["country"] = WC()->countries->countries[$commande->get_billing_country()];
$contexte["commande"] = $email; $contexte["commande"] = $email;
// Rendu // Rendu
Timber::render(filenames: $modeles, data: $contexte); Timber::render(filenames: $modeles, data: $contexte);

View file

@ -1,8 +1,8 @@
<?php <?php
/** /**
* Le modèle du reçu envoyé au client. * NOOP.
*/ */
if (!defined("ABSPATH")) { if (!defined("ABSPATH")) {
exit(); // Exit if accessed directly exit();
} ?> } ?>

View file

@ -1,8 +1,8 @@
<?php <?php
/** /**
* Le modèle du reçu envoyé au client. * NOOP.
*/ */
if (!defined("ABSPATH")) { if (!defined("ABSPATH")) {
exit(); // Exit if accessed directly exit();
} ?> } ?>

View file

@ -1,5 +1,8 @@
<?php <?php
/**
* NOOP.
*/
if (!defined("ABSPATH")) { if (!defined("ABSPATH")) {
exit(); // Exit if accessed directly exit();
} ?> } ?>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,8 @@
{% extends "email-base.twig" %}
{% block texte_supplementaire %}
<p>
Your order has been received and will be dispatched as soon as possible. You will be receive a tracking number once
it has been sent.
</p>
{% endblock %}