2026-05-06
- corvée(gitignore) exclus les fichiers CSS compilés
1
.gitignore
vendored
|
|
@ -7,6 +7,7 @@ web/app/upgrade
|
||||||
web/app/cache/*
|
web/app/cache/*
|
||||||
web/app/languages/
|
web/app/languages/
|
||||||
web/app/object-cache.php
|
web/app/object-cache.php
|
||||||
|
web/app/themes/haiku-atelier-2024/assets/css/*
|
||||||
web/app/themes/haiku-atelier-2024/assets/js/*
|
web/app/themes/haiku-atelier-2024/assets/js/*
|
||||||
|
|
||||||
# WordPress
|
# WordPress
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,11 @@
|
||||||
# :schema: https://github.com/AJenbo/phpantom_lsp/raw/main/config-schema.json
|
#:schema https://github.com/AJenbo/phpantom_lsp/raw/main/config-schema.json
|
||||||
|
|
||||||
[php]
|
[php]
|
||||||
# Override the detected PHP version (default: inferred from composer.json, or 8.5).
|
|
||||||
# version = "8.5"
|
# version = "8.5"
|
||||||
#
|
|
||||||
|
|
||||||
[diagnostics]
|
[diagnostics]
|
||||||
extra-arguments = true
|
extra-arguments = true
|
||||||
# Report member access on subjects whose type could not be resolved.
|
|
||||||
# Useful for discovering gaps in type coverage. Off by default.
|
|
||||||
unresolved-member-access = false
|
unresolved-member-access = false
|
||||||
|
|
||||||
[indexing]
|
[indexing]
|
||||||
# How PHPantom discovers classes across the workspace.
|
|
||||||
# "composer" (default) - use Composer classmap, self-scan on fallback
|
|
||||||
# "self" - always self-scan, ignore Composer classmap
|
|
||||||
# "none" - no proactive scanning, Composer classmap only
|
|
||||||
strategy = "composer"
|
strategy = "composer"
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,21 @@
|
||||||
"!oxc",
|
"!oxc",
|
||||||
"!oxfmt",
|
"!oxfmt",
|
||||||
"!oxlint",
|
"!oxlint",
|
||||||
"!phptools",
|
"!phpantom_lsp",
|
||||||
"!prettier",
|
"!prettier",
|
||||||
"!tailwindcss-language-server",
|
"!tailwindcss-language-server",
|
||||||
"!tsgo",
|
"!tsgo",
|
||||||
"!vtsls",
|
"!vtsls",
|
||||||
"..."
|
"..."
|
||||||
],
|
],
|
||||||
|
"languages": {
|
||||||
|
"PHP": {
|
||||||
|
"language_servers": [
|
||||||
|
"phpactor",
|
||||||
|
"phptools"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"lsp": {
|
"lsp": {
|
||||||
"css-variables": {
|
"css-variables": {
|
||||||
"settings": {
|
"settings": {
|
||||||
|
|
|
||||||
530
aube-lock.yaml
|
|
@ -2,5 +2,4 @@ jailBuilds: false
|
||||||
nodeLinker: isolated
|
nodeLinker: isolated
|
||||||
packageManagerStrict: true
|
packageManagerStrict: true
|
||||||
packageManagerStrictVersion: true
|
packageManagerStrictVersion: true
|
||||||
trustPolicy: off
|
|
||||||
useBetaCli: true
|
useBetaCli: true
|
||||||
|
|
|
||||||
27
compose.yaml
|
|
@ -96,5 +96,32 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
- "./containers/conf/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro"
|
- "./containers/conf/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro"
|
||||||
- "./:/var/www/wordpress:rw"
|
- "./:/var/www/wordpress:rw"
|
||||||
|
jaeger:
|
||||||
|
container_name: "haikuatelier.fr-jaeger"
|
||||||
|
environment:
|
||||||
|
- "COLLECTOR_OTLP_ENABLED=true"
|
||||||
|
healthcheck:
|
||||||
|
interval: "5s"
|
||||||
|
retries: 3
|
||||||
|
start_period: "5s"
|
||||||
|
test:
|
||||||
|
- "CMD"
|
||||||
|
- "wget"
|
||||||
|
- "--spider"
|
||||||
|
- "http://localhost:16686"
|
||||||
|
timeout: "2s"
|
||||||
|
image: "cr.jaegertracing.io/jaegertracing/jaeger:latest"
|
||||||
|
networks:
|
||||||
|
- "haiku-network"
|
||||||
|
ports:
|
||||||
|
- "4317:4317"
|
||||||
|
- "4318:4318"
|
||||||
|
- "5778:5778"
|
||||||
|
- "6831:6831/udp"
|
||||||
|
- "6832:6832/udp"
|
||||||
|
- "14250:14250"
|
||||||
|
- "14268:14268"
|
||||||
|
- "14269:14269"
|
||||||
|
- "16686:16686"
|
||||||
volumes:
|
volumes:
|
||||||
db-data: null
|
db-data: null
|
||||||
|
|
|
||||||
159
composer.lock
generated
|
|
@ -585,16 +585,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/collections",
|
"name": "illuminate/collections",
|
||||||
"version": "v13.7.0",
|
"version": "v13.8.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/illuminate/collections.git",
|
"url": "https://github.com/illuminate/collections.git",
|
||||||
"reference": "36cfc25fc23ca18714fc8ee6abc947ee99c18462"
|
"reference": "17b082d0c66fb030f22d5bdd62ba652c045ff522"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/illuminate/collections/zipball/36cfc25fc23ca18714fc8ee6abc947ee99c18462",
|
"url": "https://api.github.com/repos/illuminate/collections/zipball/17b082d0c66fb030f22d5bdd62ba652c045ff522",
|
||||||
"reference": "36cfc25fc23ca18714fc8ee6abc947ee99c18462",
|
"reference": "17b082d0c66fb030f22d5bdd62ba652c045ff522",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -603,7 +603,8 @@
|
||||||
"illuminate/macroable": "^13.0",
|
"illuminate/macroable": "^13.0",
|
||||||
"php": "^8.3",
|
"php": "^8.3",
|
||||||
"symfony/polyfill-php84": "^1.33",
|
"symfony/polyfill-php84": "^1.33",
|
||||||
"symfony/polyfill-php85": "^1.33"
|
"symfony/polyfill-php85": "^1.33",
|
||||||
|
"symfony/polyfill-php86": "^1.36"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"illuminate/http": "Required to convert collections to API resources (^13.0).",
|
"illuminate/http": "Required to convert collections to API resources (^13.0).",
|
||||||
|
|
@ -640,11 +641,11 @@
|
||||||
"issues": "https://github.com/laravel/framework/issues",
|
"issues": "https://github.com/laravel/framework/issues",
|
||||||
"source": "https://github.com/laravel/framework"
|
"source": "https://github.com/laravel/framework"
|
||||||
},
|
},
|
||||||
"time": "2026-04-27T18:16:57+00:00"
|
"time": "2026-04-28T17:17:15+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/conditionable",
|
"name": "illuminate/conditionable",
|
||||||
"version": "v13.7.0",
|
"version": "v13.8.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/illuminate/conditionable.git",
|
"url": "https://github.com/illuminate/conditionable.git",
|
||||||
|
|
@ -690,16 +691,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/contracts",
|
"name": "illuminate/contracts",
|
||||||
"version": "v13.7.0",
|
"version": "v13.8.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/illuminate/contracts.git",
|
"url": "https://github.com/illuminate/contracts.git",
|
||||||
"reference": "a5f08426a807faac42616f733113ba263779f2dd"
|
"reference": "ce6f5561f88743639c76835ad82cfe39b468bdc8"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/illuminate/contracts/zipball/a5f08426a807faac42616f733113ba263779f2dd",
|
"url": "https://api.github.com/repos/illuminate/contracts/zipball/ce6f5561f88743639c76835ad82cfe39b468bdc8",
|
||||||
"reference": "a5f08426a807faac42616f733113ba263779f2dd",
|
"reference": "ce6f5561f88743639c76835ad82cfe39b468bdc8",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -734,20 +735,20 @@
|
||||||
"issues": "https://github.com/laravel/framework/issues",
|
"issues": "https://github.com/laravel/framework/issues",
|
||||||
"source": "https://github.com/laravel/framework"
|
"source": "https://github.com/laravel/framework"
|
||||||
},
|
},
|
||||||
"time": "2026-04-24T14:55:56+00:00"
|
"time": "2026-04-28T17:16:27+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/macroable",
|
"name": "illuminate/macroable",
|
||||||
"version": "v13.7.0",
|
"version": "v13.8.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/illuminate/macroable.git",
|
"url": "https://github.com/illuminate/macroable.git",
|
||||||
"reference": "f108cb3a8680f26e23c6ce7367c64525412d85b0"
|
"reference": "59b5b5f3cf290a91db8cf6cd3d35ff56978bc057"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/illuminate/macroable/zipball/f108cb3a8680f26e23c6ce7367c64525412d85b0",
|
"url": "https://api.github.com/repos/illuminate/macroable/zipball/59b5b5f3cf290a91db8cf6cd3d35ff56978bc057",
|
||||||
"reference": "f108cb3a8680f26e23c6ce7367c64525412d85b0",
|
"reference": "59b5b5f3cf290a91db8cf6cd3d35ff56978bc057",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -780,11 +781,11 @@
|
||||||
"issues": "https://github.com/laravel/framework/issues",
|
"issues": "https://github.com/laravel/framework/issues",
|
||||||
"source": "https://github.com/laravel/framework"
|
"source": "https://github.com/laravel/framework"
|
||||||
},
|
},
|
||||||
"time": "2026-03-28T19:16:13+00:00"
|
"time": "2026-04-29T09:35:06+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/reflection",
|
"name": "illuminate/reflection",
|
||||||
"version": "v13.7.0",
|
"version": "v13.8.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/illuminate/reflection.git",
|
"url": "https://github.com/illuminate/reflection.git",
|
||||||
|
|
@ -835,16 +836,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "illuminate/support",
|
"name": "illuminate/support",
|
||||||
"version": "v13.7.0",
|
"version": "v13.8.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/illuminate/support.git",
|
"url": "https://github.com/illuminate/support.git",
|
||||||
"reference": "cc0d9d484ddd83fa54a0495cf15e7606e6a6f4b1"
|
"reference": "ff687db22aefef516efd3ea21d01664af332da38"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/illuminate/support/zipball/cc0d9d484ddd83fa54a0495cf15e7606e6a6f4b1",
|
"url": "https://api.github.com/repos/illuminate/support/zipball/ff687db22aefef516efd3ea21d01664af332da38",
|
||||||
"reference": "cc0d9d484ddd83fa54a0495cf15e7606e6a6f4b1",
|
"reference": "ff687db22aefef516efd3ea21d01664af332da38",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
|
@ -910,7 +911,7 @@
|
||||||
"issues": "https://github.com/laravel/framework/issues",
|
"issues": "https://github.com/laravel/framework/issues",
|
||||||
"source": "https://github.com/laravel/framework"
|
"source": "https://github.com/laravel/framework"
|
||||||
},
|
},
|
||||||
"time": "2026-04-27T13:46:05+00:00"
|
"time": "2026-05-04T12:34:54+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/helpers",
|
"name": "laravel/helpers",
|
||||||
|
|
@ -2916,6 +2917,86 @@
|
||||||
],
|
],
|
||||||
"time": "2026-04-26T13:10:57+00:00"
|
"time": "2026-04-26T13:10:57+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/polyfill-php86",
|
||||||
|
"version": "v1.37.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/polyfill-php86.git",
|
||||||
|
"reference": "33d8fc5a705481e21fe3a81212b26f9b1f61749c"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/33d8fc5a705481e21fe3a81212b26f9b1f61749c",
|
||||||
|
"reference": "33d8fc5a705481e21fe3a81212b26f9b1f61749c",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"thanks": {
|
||||||
|
"url": "https://github.com/symfony/polyfill",
|
||||||
|
"name": "symfony/polyfill"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"bootstrap.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Php86\\": ""
|
||||||
|
},
|
||||||
|
"classmap": [
|
||||||
|
"Resources/stubs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"keywords": [
|
||||||
|
"compatibility",
|
||||||
|
"polyfill",
|
||||||
|
"portable",
|
||||||
|
"shim"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/polyfill-php86/tree/v1.37.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/nicolas-grekas",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2026-04-26T13:13:48+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-uuid",
|
"name": "symfony/polyfill-uuid",
|
||||||
"version": "v1.37.0",
|
"version": "v1.37.0",
|
||||||
|
|
@ -3663,15 +3744,15 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "wpackagist-plugin/redis-cache",
|
"name": "wpackagist-plugin/redis-cache",
|
||||||
"version": "2.7.0",
|
"version": "2.8.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "svn",
|
"type": "svn",
|
||||||
"url": "https://plugins.svn.wordpress.org/redis-cache/",
|
"url": "https://plugins.svn.wordpress.org/redis-cache/",
|
||||||
"reference": "tags/2.7.0"
|
"reference": "tags/2.8.0"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://downloads.wordpress.org/plugin/redis-cache.2.7.0.zip"
|
"url": "https://downloads.wordpress.org/plugin/redis-cache.2.8.0.zip"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"composer/installers": "^1.0 || ^2.0"
|
"composer/installers": "^1.0 || ^2.0"
|
||||||
|
|
@ -5215,12 +5296,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/Roave/SecurityAdvisories.git",
|
"url": "https://github.com/Roave/SecurityAdvisories.git",
|
||||||
"reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a"
|
"reference": "9d468c11a8da481c22b4e610494babae032fdb03"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/2221f6ef09e87784e78e188aadd8f7e3a50e679a",
|
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/9d468c11a8da481c22b4e610494babae032fdb03",
|
||||||
"reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a",
|
"reference": "9d468c11a8da481c22b4e610494babae032fdb03",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
|
|
@ -5280,7 +5361,7 @@
|
||||||
"awesome-support/awesome-support": "<=6.0.7",
|
"awesome-support/awesome-support": "<=6.0.7",
|
||||||
"aws/aws-sdk-php": "<=3.371.3",
|
"aws/aws-sdk-php": "<=3.371.3",
|
||||||
"ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5",
|
"ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5",
|
||||||
"azuracast/azuracast": "<=0.23.3",
|
"azuracast/azuracast": "<=0.23.5",
|
||||||
"b13/seo_basics": "<0.8.2",
|
"b13/seo_basics": "<0.8.2",
|
||||||
"backdrop/backdrop": "<=1.32",
|
"backdrop/backdrop": "<=1.32",
|
||||||
"backpack/crud": "<3.4.9",
|
"backpack/crud": "<3.4.9",
|
||||||
|
|
@ -5335,7 +5416,7 @@
|
||||||
"cesnet/simplesamlphp-module-proxystatistics": "<3.1",
|
"cesnet/simplesamlphp-module-proxystatistics": "<3.1",
|
||||||
"chriskacerguis/codeigniter-restserver": "<=2.7.1",
|
"chriskacerguis/codeigniter-restserver": "<=2.7.1",
|
||||||
"chrome-php/chrome": "<1.14",
|
"chrome-php/chrome": "<1.14",
|
||||||
"ci4-cms-erp/ci4ms": "<=0.31.6",
|
"ci4-cms-erp/ci4ms": "<=0.31.7",
|
||||||
"civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3",
|
"civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3",
|
||||||
"ckeditor/ckeditor": "<4.25",
|
"ckeditor/ckeditor": "<4.25",
|
||||||
"clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3",
|
"clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3",
|
||||||
|
|
@ -5387,6 +5468,7 @@
|
||||||
"david-garcia/phpwhois": "<=4.3.1",
|
"david-garcia/phpwhois": "<=4.3.1",
|
||||||
"dbrisinajumi/d2files": "<1",
|
"dbrisinajumi/d2files": "<1",
|
||||||
"dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta",
|
"dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta",
|
||||||
|
"dedoc/scramble": ">=0.13.2,<0.13.22",
|
||||||
"derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3",
|
"derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3",
|
||||||
"derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4",
|
"derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4",
|
||||||
"desperado/xml-bundle": "<=0.1.7",
|
"desperado/xml-bundle": "<=0.1.7",
|
||||||
|
|
@ -5539,7 +5621,8 @@
|
||||||
"georgringer/news": "<1.3.3",
|
"georgringer/news": "<1.3.3",
|
||||||
"geshi/geshi": "<=1.0.9.1",
|
"geshi/geshi": "<=1.0.9.1",
|
||||||
"getformwork/formwork": "<=2.3.3",
|
"getformwork/formwork": "<=2.3.3",
|
||||||
"getgrav/grav": "<1.11.0.0-beta1",
|
"getgrav/grav": "<2.0.0.0-beta2",
|
||||||
|
"getgrav/grav-plugin-api": "<1.0.0.0-beta15",
|
||||||
"getkirby/cms": "<4.9|>=5,<5.4",
|
"getkirby/cms": "<4.9|>=5,<5.4",
|
||||||
"getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1",
|
"getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1",
|
||||||
"getkirby/panel": "<2.5.14",
|
"getkirby/panel": "<2.5.14",
|
||||||
|
|
@ -5706,6 +5789,7 @@
|
||||||
"mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1",
|
"mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1",
|
||||||
"mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7",
|
"mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7",
|
||||||
"maximebf/debugbar": "<1.19",
|
"maximebf/debugbar": "<1.19",
|
||||||
|
"mckenziearts/livewire-markdown-editor": "<1.3",
|
||||||
"mdanter/ecc": "<2",
|
"mdanter/ecc": "<2",
|
||||||
"mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2",
|
"mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2",
|
||||||
"mediawiki/cargo": "<3.8.3",
|
"mediawiki/cargo": "<3.8.3",
|
||||||
|
|
@ -5749,6 +5833,7 @@
|
||||||
"munkireport/softwareupdate": "<1.6",
|
"munkireport/softwareupdate": "<1.6",
|
||||||
"mustache/mustache": ">=2,<2.14.1",
|
"mustache/mustache": ">=2,<2.14.1",
|
||||||
"mwdelaney/wp-enable-svg": "<=0.2",
|
"mwdelaney/wp-enable-svg": "<=0.2",
|
||||||
|
"nabeel/phpvms": "<7.0.6",
|
||||||
"namshi/jose": "<2.2",
|
"namshi/jose": "<2.2",
|
||||||
"nasirkhan/laravel-starter": "<11.11",
|
"nasirkhan/laravel-starter": "<11.11",
|
||||||
"nategood/httpful": "<1",
|
"nategood/httpful": "<1",
|
||||||
|
|
@ -5789,7 +5874,7 @@
|
||||||
"open-web-analytics/open-web-analytics": "<1.8.1",
|
"open-web-analytics/open-web-analytics": "<1.8.1",
|
||||||
"opencart/opencart": ">=0",
|
"opencart/opencart": ">=0",
|
||||||
"openid/php-openid": "<2.3",
|
"openid/php-openid": "<2.3",
|
||||||
"openmage/magento-lts": "<20.17",
|
"openmage/magento-lts": "<=20.17",
|
||||||
"opensolutions/vimbadmin": "<=3.0.15",
|
"opensolutions/vimbadmin": "<=3.0.15",
|
||||||
"opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1",
|
"opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1",
|
||||||
"orchid/platform": ">=8,<14.43",
|
"orchid/platform": ">=8,<14.43",
|
||||||
|
|
@ -5838,7 +5923,7 @@
|
||||||
"phpoffice/phpexcel": "<=1.8.2",
|
"phpoffice/phpexcel": "<=1.8.2",
|
||||||
"phpoffice/phpspreadsheet": "<=1.30.3|>=2,<=2.1.15|>=2.2,<=2.4.4|>=3,<=3.10.4|>=4,<=5.6",
|
"phpoffice/phpspreadsheet": "<=1.30.3|>=2,<=2.1.15|>=2.2,<=2.4.4|>=3,<=3.10.4|>=4,<=5.6",
|
||||||
"phppgadmin/phppgadmin": "<=7.13",
|
"phppgadmin/phppgadmin": "<=7.13",
|
||||||
"phpseclib/phpseclib": "<2.0.53|>=3,<3.0.51",
|
"phpseclib/phpseclib": "<=2.0.53|>=3,<=3.0.51",
|
||||||
"phpservermon/phpservermon": "<3.6",
|
"phpservermon/phpservermon": "<3.6",
|
||||||
"phpsysinfo/phpsysinfo": "<3.4.3",
|
"phpsysinfo/phpsysinfo": "<3.4.3",
|
||||||
"phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8|>=12.5.21,<12.5.22|>=13.1.5,<13.1.6",
|
"phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8|>=12.5.21,<12.5.22|>=13.1.5,<13.1.6",
|
||||||
|
|
@ -5932,7 +6017,7 @@
|
||||||
"shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev",
|
"shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev",
|
||||||
"shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev",
|
"shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev",
|
||||||
"shopxo/shopxo": "<=6.4",
|
"shopxo/shopxo": "<=6.4",
|
||||||
"showdoc/showdoc": "<2.10.4",
|
"showdoc/showdoc": "<3.8.1",
|
||||||
"shuchkin/simplexlsx": ">=1.0.12,<1.1.13",
|
"shuchkin/simplexlsx": ">=1.0.12,<1.1.13",
|
||||||
"silverstripe-australia/advancedreports": ">=1,<=2",
|
"silverstripe-australia/advancedreports": ">=1,<=2",
|
||||||
"silverstripe/admin": "<1.13.19|>=2,<2.1.8",
|
"silverstripe/admin": "<1.13.19|>=2,<2.1.8",
|
||||||
|
|
@ -6145,7 +6230,7 @@
|
||||||
"webcoast/deferred-image-processing": "<1.0.2",
|
"webcoast/deferred-image-processing": "<1.0.2",
|
||||||
"webklex/laravel-imap": "<5.3",
|
"webklex/laravel-imap": "<5.3",
|
||||||
"webklex/php-imap": "<5.3",
|
"webklex/php-imap": "<5.3",
|
||||||
"webonyx/graphql-php": "<=15.31.4",
|
"webonyx/graphql-php": "<=15.32.2",
|
||||||
"webpa/webpa": "<3.1.2",
|
"webpa/webpa": "<3.1.2",
|
||||||
"webreinvent/vaahcms": "<=2.3.1",
|
"webreinvent/vaahcms": "<=2.3.1",
|
||||||
"wikibase/wikibase": "<=1.39.3",
|
"wikibase/wikibase": "<=1.39.3",
|
||||||
|
|
@ -6265,7 +6350,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2026-04-30T21:24:12+00:00"
|
"time": "2026-05-05T21:24:41+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/diff",
|
"name": "sebastian/diff",
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use Roots\WPConfig\Config;
|
use Roots\WPConfig\Config;
|
||||||
|
|
||||||
use function base64_encode;
|
|
||||||
use function Env\env;
|
use function Env\env;
|
||||||
|
|
||||||
Config::define('SAVEQUERIES', true);
|
Config::define('SAVEQUERIES', true);
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use Roots\WPConfig\Config;
|
use Roots\WPConfig\Config;
|
||||||
|
|
||||||
use function base64_encode;
|
|
||||||
use function Env\env;
|
use function Env\env;
|
||||||
|
|
||||||
Config::define('WP_DEBUG', true);
|
Config::define('WP_DEBUG', true);
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ declare(strict_types=1);
|
||||||
|
|
||||||
use Roots\WPConfig\Config;
|
use Roots\WPConfig\Config;
|
||||||
|
|
||||||
use function base64_encode;
|
|
||||||
use function Env\env;
|
use function Env\env;
|
||||||
|
|
||||||
Config::define('DISALLOW_INDEXING', true);
|
Config::define('DISALLOW_INDEXING', true);
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ http:
|
||||||
security:
|
security:
|
||||||
headers:
|
headers:
|
||||||
accessControlAllowCredentials: true
|
accessControlAllowCredentials: true
|
||||||
accessControlAllowHeaders: "content-type"
|
accessControlAllowHeaders: "content-type,user-agent"
|
||||||
accessControlAllowMethods:
|
accessControlAllowMethods:
|
||||||
- GET
|
- GET
|
||||||
- OPTIONS
|
- OPTIONS
|
||||||
|
|
|
||||||
9
docs/QUERIES.md
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Requête
|
||||||
|
|
||||||
|
## Nettoyer les photos fantômes
|
||||||
|
|
||||||
|
Cette commande nettoie les photos « fantômes » : les attachements toujours présents dans la base de données alors que l'image a été supprimée. Des carrés gris remplacement alors les photos dans l'administration du Produit.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wp db --allow-root query "DELETE FROM haikuwp_postmeta WHERE meta_value NOT IN (SELECT ID FROM haikuwp_posts) AND meta_key LIKE '%photos_colonne%'"
|
||||||
|
```
|
||||||
|
|
@ -7179,7 +7179,7 @@
|
||||||
"type": "array"
|
"type": "array"
|
||||||
},
|
},
|
||||||
"workspace": {
|
"workspace": {
|
||||||
"default": "/home/gcch/Répertoires/git.gcch.fr/gcch/haiku-atelier-2024",
|
"default": "/home/gcch/Répertoires/git.gcch.fr/haiku-atelier-2024",
|
||||||
"description": "The workspace directory from which to start scanning.\n\nDefaults to the current working directory.",
|
"description": "The workspace directory from which to start scanning.\n\nDefaults to the current working directory.",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
}
|
}
|
||||||
|
|
@ -8297,7 +8297,7 @@
|
||||||
},
|
},
|
||||||
"includes": [],
|
"includes": [],
|
||||||
"paths": [],
|
"paths": [],
|
||||||
"workspace": "/home/gcch/Répertoires/git.gcch.fr/gcch/haiku-atelier-2024"
|
"workspace": "/home/gcch/Répertoires/git.gcch.fr/haiku-atelier-2024"
|
||||||
},
|
},
|
||||||
"description": "Source discovery and workspace configuration.\n\nDefines the workspace root, source paths to scan, and exclusion patterns.\nThis configuration determines which PHP files are loaded into the database\nfor analysis, linting, or formatting."
|
"description": "Source discovery and workspace configuration.\n\nDefines the workspace root, source paths to scan, and exclusion patterns.\nThis configuration determines which PHP files are loaded into the database\nfor analysis, linting, or formatting."
|
||||||
},
|
},
|
||||||
|
|
@ -8309,7 +8309,7 @@
|
||||||
"type": "integer"
|
"type": "integer"
|
||||||
},
|
},
|
||||||
"threads": {
|
"threads": {
|
||||||
"default": 12,
|
"default": 4,
|
||||||
"description": "Number of worker threads for parallel processing.\n\nControls the thread pool size used by Rayon for parallel operations.\nIf set to 0, defaults to the number of logical CPUs available.\nCan be overridden via `MAGO_THREADS` environment variable or `--threads` CLI flag.",
|
"description": "Number of worker threads for parallel processing.\n\nControls the thread pool size used by Rayon for parallel operations.\nIf set to 0, defaults to the number of logical CPUs available.\nCan be overridden via `MAGO_THREADS` environment variable or `--threads` CLI flag.",
|
||||||
"format": "uint",
|
"format": "uint",
|
||||||
"minimum": 0,
|
"minimum": 0,
|
||||||
|
|
|
||||||
234
mise.lock
Normal file
|
|
@ -0,0 +1,234 @@
|
||||||
|
# @generated - this file is auto-generated by `mise lock` https://mise.en.dev/dev-tools/mise-lock.html
|
||||||
|
|
||||||
|
[[tools."aqua:blopker/codebook"]]
|
||||||
|
version = "0.3.39"
|
||||||
|
backend = "aqua:blopker/codebook"
|
||||||
|
|
||||||
|
[tools."aqua:blopker/codebook"."platforms.linux-arm64"]
|
||||||
|
checksum = "sha256:38302c6e719ce67083e9229c373943ebe45aa359a7a2cfb06e48221c33b59516"
|
||||||
|
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-aarch64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:blopker/codebook"."platforms.linux-arm64-musl"]
|
||||||
|
checksum = "sha256:38302c6e719ce67083e9229c373943ebe45aa359a7a2cfb06e48221c33b59516"
|
||||||
|
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-aarch64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:blopker/codebook"."platforms.linux-x64"]
|
||||||
|
checksum = "sha256:fdb419ed332aacba5757a3b34ec2a8cba3a94b50134ab34a8dc1af8106101dc5"
|
||||||
|
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:blopker/codebook"."platforms.linux-x64-musl"]
|
||||||
|
checksum = "sha256:fdb419ed332aacba5757a3b34ec2a8cba3a94b50134ab34a8dc1af8106101dc5"
|
||||||
|
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:blopker/codebook"."platforms.macos-arm64"]
|
||||||
|
checksum = "sha256:c3f8f36a4747542ece10c65cd8dd724aa0dbd31c08a1fd03fb53813eff87b8ce"
|
||||||
|
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-aarch64-apple-darwin.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:blopker/codebook"."platforms.macos-x64"]
|
||||||
|
checksum = "sha256:b3392e8eb080f3e6e083ada59bafcc6e50681d99b0cbd4f420ab4c7123d08baa"
|
||||||
|
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-x86_64-apple-darwin.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:blopker/codebook"."platforms.windows-x64"]
|
||||||
|
checksum = "sha256:dc6c89bdd9e20c00de10d8eb68ffc0e581831eae5a62c9e4efd25905eba78413"
|
||||||
|
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-x86_64-pc-windows-msvc.zip"
|
||||||
|
|
||||||
|
[[tools."aqua:numtide/treefmt"]]
|
||||||
|
version = "2.5.0"
|
||||||
|
backend = "aqua:numtide/treefmt"
|
||||||
|
|
||||||
|
[tools."aqua:numtide/treefmt"."platforms.linux-arm64"]
|
||||||
|
checksum = "sha256:fce47c6fc8cb6a87461b1309fc6d3102eade64b6fe0c9b86678b4eed9eb00e57"
|
||||||
|
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_linux_arm64.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:numtide/treefmt"."platforms.linux-arm64-musl"]
|
||||||
|
checksum = "sha256:fce47c6fc8cb6a87461b1309fc6d3102eade64b6fe0c9b86678b4eed9eb00e57"
|
||||||
|
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_linux_arm64.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:numtide/treefmt"."platforms.linux-x64"]
|
||||||
|
checksum = "sha256:95f707bf9666d08b50888b116768fd77f042ad5af92aa3b795f063160e72758f"
|
||||||
|
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_linux_amd64.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:numtide/treefmt"."platforms.linux-x64-musl"]
|
||||||
|
checksum = "sha256:95f707bf9666d08b50888b116768fd77f042ad5af92aa3b795f063160e72758f"
|
||||||
|
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_linux_amd64.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:numtide/treefmt"."platforms.macos-arm64"]
|
||||||
|
checksum = "sha256:a3cdfa8e92eb7c302bb851f73800187e75d5789f2a75835b403b158d77b2c376"
|
||||||
|
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_darwin_arm64.tar.gz"
|
||||||
|
|
||||||
|
[tools."aqua:numtide/treefmt"."platforms.macos-x64"]
|
||||||
|
checksum = "sha256:21388b1f7d6c2f572e1ce9231f7dfc08f80a062438908791ab078c1d76b10a49"
|
||||||
|
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_darwin_amd64.tar.gz"
|
||||||
|
|
||||||
|
[[tools.aube]]
|
||||||
|
version = "1.9.0"
|
||||||
|
backend = "github:endevco/aube"
|
||||||
|
|
||||||
|
[tools.aube."platforms.linux-arm64"]
|
||||||
|
checksum = "sha256:218559ad1bc0335689b0bf94217dec53147e6819b514cd1edca2b25578a9eb71"
|
||||||
|
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-aarch64-unknown-linux-gnu.tar.gz"
|
||||||
|
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412878187"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[tools.aube."platforms.linux-arm64-musl"]
|
||||||
|
checksum = "sha256:6a635d407637d94ef2aba1cfd8f36189b88d3703080a788fe3e36cf628d91049"
|
||||||
|
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-aarch64-unknown-linux-musl.tar.gz"
|
||||||
|
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412876816"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[tools.aube."platforms.linux-x64"]
|
||||||
|
checksum = "sha256:f27e4ecdd5669e76d2d1f7be69ca29e0ba0a8943b71172e5f7b785ab9a5c5132"
|
||||||
|
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-x86_64-unknown-linux-gnu.tar.gz"
|
||||||
|
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412877756"
|
||||||
|
|
||||||
|
[tools.aube."platforms.linux-x64-musl"]
|
||||||
|
checksum = "sha256:6245a25dab1903d76222edc493f5c908b6fc52cac1dc591a3e1760b066af5c6b"
|
||||||
|
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412878508"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[tools.aube."platforms.macos-arm64"]
|
||||||
|
checksum = "sha256:7d85ecf1af62b65fd6ea386057f63808b5a1e18bd1201851a24619dc5cf337b0"
|
||||||
|
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-aarch64-apple-darwin.tar.gz"
|
||||||
|
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412878487"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[tools.aube."platforms.windows-x64"]
|
||||||
|
checksum = "sha256:79df31772c03cb22407dacdef59a3abed74d76fae20587c9f96f4b972a47eba4"
|
||||||
|
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-x86_64-pc-windows-msvc.zip"
|
||||||
|
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412888080"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[[tools.just]]
|
||||||
|
version = "1.50.0"
|
||||||
|
backend = "aqua:casey/just"
|
||||||
|
|
||||||
|
[tools.just."platforms.linux-arm64"]
|
||||||
|
checksum = "sha256:3beb4967ce05883cf09ac12d6d128166eb4c6d0b03eff74b61018a6880655d7d"
|
||||||
|
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-aarch64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools.just."platforms.linux-arm64-musl"]
|
||||||
|
checksum = "sha256:3beb4967ce05883cf09ac12d6d128166eb4c6d0b03eff74b61018a6880655d7d"
|
||||||
|
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-aarch64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools.just."platforms.linux-x64"]
|
||||||
|
checksum = "sha256:27e011cd6328fadd632e59233d2cf5f18460b8a8c4269acd324c1a8669f34db0"
|
||||||
|
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools.just."platforms.linux-x64-musl"]
|
||||||
|
checksum = "sha256:27e011cd6328fadd632e59233d2cf5f18460b8a8c4269acd324c1a8669f34db0"
|
||||||
|
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools.just."platforms.macos-arm64"]
|
||||||
|
checksum = "sha256:891262207663bff1aa422dbe799a76deae4064eaa445f14eb28aef7a388222cd"
|
||||||
|
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-aarch64-apple-darwin.tar.gz"
|
||||||
|
|
||||||
|
[tools.just."platforms.macos-x64"]
|
||||||
|
checksum = "sha256:e4fa28fe63381ca32fad101e86d4a1da7cd2d34d1b080985a37ec9dc951922fe"
|
||||||
|
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-x86_64-apple-darwin.tar.gz"
|
||||||
|
|
||||||
|
[tools.just."platforms.windows-x64"]
|
||||||
|
checksum = "sha256:5dc713f049e174e22de41fd06292a26c9b90f2d37c1be9390d2082fe6928b376"
|
||||||
|
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-x86_64-pc-windows-msvc.zip"
|
||||||
|
|
||||||
|
[[tools.mago]]
|
||||||
|
version = "1.25.2"
|
||||||
|
backend = "aqua:carthage-software/mago"
|
||||||
|
|
||||||
|
[tools.mago."platforms.linux-arm64"]
|
||||||
|
checksum = "sha256:48abe89725c8d39e2e9f3683720899f992812639e5bb174ba9ed4df27eb95c49"
|
||||||
|
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-aarch64-unknown-linux-musl.tar.gz"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[tools.mago."platforms.linux-arm64-musl"]
|
||||||
|
checksum = "sha256:48abe89725c8d39e2e9f3683720899f992812639e5bb174ba9ed4df27eb95c49"
|
||||||
|
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-aarch64-unknown-linux-musl.tar.gz"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[tools.mago."platforms.linux-x64"]
|
||||||
|
checksum = "sha256:b21aac6fe69467bfe87633614b0962eb3b699194f66d50b84fc35a8263ccbcf2"
|
||||||
|
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools.mago."platforms.linux-x64-musl"]
|
||||||
|
checksum = "sha256:b21aac6fe69467bfe87633614b0962eb3b699194f66d50b84fc35a8263ccbcf2"
|
||||||
|
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-x86_64-unknown-linux-musl.tar.gz"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[tools.mago."platforms.macos-arm64"]
|
||||||
|
checksum = "sha256:d831c4c75a2d32f0df61a950229fb97e27e1d36b6cf83208f90102255be4d348"
|
||||||
|
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-aarch64-apple-darwin.tar.gz"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[tools.mago."platforms.macos-x64"]
|
||||||
|
checksum = "sha256:30e7722047b7d977985cd85c931d5f2cfb0f2ab31590c81ed945b9a2fda54f6a"
|
||||||
|
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-x86_64-apple-darwin.tar.gz"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[tools.mago."platforms.windows-x64"]
|
||||||
|
checksum = "sha256:d755fd8ed31826def064231d5cc21ab330e0f44da3563ce49d0e3720ce31de34"
|
||||||
|
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-x86_64-pc-windows-msvc.zip"
|
||||||
|
provenance = "github-attestations"
|
||||||
|
|
||||||
|
[[tools.node]]
|
||||||
|
version = "26.0.0"
|
||||||
|
backend = "core:node"
|
||||||
|
|
||||||
|
[tools.node."platforms.linux-arm64"]
|
||||||
|
checksum = "sha256:c802664b5770102999efacf5717854f7652797db522e8cc5727a6209afea824d"
|
||||||
|
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.0-linux-arm64.tar.gz"
|
||||||
|
|
||||||
|
[tools.node."platforms.linux-arm64-musl"]
|
||||||
|
checksum = "sha256:8c374da2f289493f346ed7d68143967e4e536a38cf7e5aa7d3933146253193b1"
|
||||||
|
url = "https://unofficial-builds.nodejs.org/download/release/v26.0.0/node-v26.0.0-linux-arm64-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools.node."platforms.linux-x64"]
|
||||||
|
checksum = "sha256:42cee4d7ec80b7f7c89281cf00726b14840ac674462404dd4fd36f03964dc0af"
|
||||||
|
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.0-linux-x64.tar.gz"
|
||||||
|
|
||||||
|
[tools.node."platforms.linux-x64-musl"]
|
||||||
|
checksum = "sha256:333c376e342e5e5c0505f19eaab4990cc03f47a15dd5628c30fe64c39048b995"
|
||||||
|
url = "https://unofficial-builds.nodejs.org/download/release/v26.0.0/node-v26.0.0-linux-x64-musl.tar.gz"
|
||||||
|
|
||||||
|
[tools.node."platforms.macos-arm64"]
|
||||||
|
checksum = "sha256:dcee8564c1a9342f9594dd5e52d533894dfef6b85aa771bbbb870baa3c403235"
|
||||||
|
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.0-darwin-arm64.tar.gz"
|
||||||
|
|
||||||
|
[tools.node."platforms.macos-x64"]
|
||||||
|
checksum = "sha256:f488ab543fe202d8a2d56e661682117d3c56903a2bf64f2ec1ff7bd421cfd875"
|
||||||
|
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.0-darwin-x64.tar.gz"
|
||||||
|
|
||||||
|
[tools.node."platforms.windows-x64"]
|
||||||
|
checksum = "sha256:d0418640a36096e00bddb57761aa0b1b98f91904ec4ed2b9dd75cbad723becd7"
|
||||||
|
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.0-win-x64.zip"
|
||||||
|
|
||||||
|
[[tools.watchexec]]
|
||||||
|
version = "2.5.1"
|
||||||
|
backend = "aqua:watchexec/watchexec"
|
||||||
|
|
||||||
|
[tools.watchexec."platforms.linux-arm64"]
|
||||||
|
checksum = "sha256:c073887583d502fa0b393a8b847bb4460a111b3b0a199d1f70dafd5d89e71a2f"
|
||||||
|
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-aarch64-unknown-linux-musl.tar.xz"
|
||||||
|
|
||||||
|
[tools.watchexec."platforms.linux-arm64-musl"]
|
||||||
|
checksum = "sha256:c073887583d502fa0b393a8b847bb4460a111b3b0a199d1f70dafd5d89e71a2f"
|
||||||
|
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-aarch64-unknown-linux-musl.tar.xz"
|
||||||
|
|
||||||
|
[tools.watchexec."platforms.linux-x64"]
|
||||||
|
checksum = "sha256:9efabd08de720c1ee7e57b487fe11904f0966828e76146e2b5ea5deee90626be"
|
||||||
|
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-x86_64-unknown-linux-musl.tar.xz"
|
||||||
|
|
||||||
|
[tools.watchexec."platforms.linux-x64-musl"]
|
||||||
|
checksum = "sha256:9efabd08de720c1ee7e57b487fe11904f0966828e76146e2b5ea5deee90626be"
|
||||||
|
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-x86_64-unknown-linux-musl.tar.xz"
|
||||||
|
|
||||||
|
[tools.watchexec."platforms.macos-arm64"]
|
||||||
|
checksum = "sha256:c5e405dd1109940b2510398d2182990c1be59063b94e11d7ace9c7b435cb1df1"
|
||||||
|
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-aarch64-apple-darwin.tar.xz"
|
||||||
|
|
||||||
|
[tools.watchexec."platforms.macos-x64"]
|
||||||
|
checksum = "sha256:bb74bf33286ff7f31dd8e763e017fbc0418360d88baefd35bc57d662d28394e2"
|
||||||
|
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-x86_64-apple-darwin.tar.xz"
|
||||||
|
|
||||||
|
[tools.watchexec."platforms.windows-x64"]
|
||||||
|
checksum = "sha256:aa448c2704ca1a37ce0f1fc75381d9a411946dd293cf6236293f549426a577f7"
|
||||||
|
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-x86_64-pc-windows-msvc.zip"
|
||||||
44
mise.toml
|
|
@ -1,2 +1,44 @@
|
||||||
[tools]
|
[tools]
|
||||||
"github:AJenbo/phpantom_lsp" = "latest"
|
aube = "latest"
|
||||||
|
just = "latest"
|
||||||
|
mago = "latest"
|
||||||
|
node = "latest"
|
||||||
|
watchexec = "latest"
|
||||||
|
"aqua:blopker/codebook" = "latest"
|
||||||
|
"aqua:numtide/treefmt" = "latest"
|
||||||
|
|
||||||
|
[tasks.format]
|
||||||
|
alias = "f"
|
||||||
|
description = "Formate le code avec treefmt en utilisant la configuration globale"
|
||||||
|
run = "treefmt --config-file ~/.config/treefmt/treefmt.toml ."
|
||||||
|
tools."aqua:numtide/treefmt" = "latest"
|
||||||
|
sources = [
|
||||||
|
"*.{json,md,toml}",
|
||||||
|
"cfg/*.ts",
|
||||||
|
"web/app/themes/haiku-atelier-2024/src/**/*.ts"
|
||||||
|
]
|
||||||
|
|
||||||
|
[tasks.watch-format]
|
||||||
|
alias = "wf"
|
||||||
|
description = "Formate le code avec treefmt en utilisant la configuration globale"
|
||||||
|
run = "watchexec -w web/app/themes/haiku-atelier-2024/src/ mise run format"
|
||||||
|
sources = ["*.{json,md,toml}", "cfg/*.ts", "web/app/themes/haiku-atelier-2024/src/**/*.ts"]
|
||||||
|
|
||||||
|
[tasks.build-css]
|
||||||
|
description = "Compile le CSS depuis les fichiers SCSS"
|
||||||
|
outputs = ["web/app/themes/haiku-atelier-2024/assets/css/**/*.css"]
|
||||||
|
run = [
|
||||||
|
"aube x sass --update web/app/themes/haiku-atelier-2024/src/sass:web/app/themes/haiku-atelier-2024/assets/css",
|
||||||
|
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/main.min.css -- web/app/themes/haiku-atelier-2024/assets/css/main.css",
|
||||||
|
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css",
|
||||||
|
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-accueil.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-accueil.css",
|
||||||
|
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-boutique.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-boutique.css",
|
||||||
|
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-a-propos.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-a-propos.css",
|
||||||
|
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-modele-simple.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-modele-simple.css",
|
||||||
|
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.css",
|
||||||
|
]
|
||||||
|
sources = ["web/app/themes/haiku-atelier-2024/src/sass/**/*.scss"]
|
||||||
|
|
||||||
|
[tasks.test-shop]
|
||||||
|
description = "Lance les tests d'intégration pour la page Boutique"
|
||||||
|
run = "aube x playwright test --config cfg/playwright.config.ts tests/playwright/shop.spec.ts"
|
||||||
|
|
|
||||||
25
package.json
|
|
@ -12,10 +12,11 @@
|
||||||
"prepare": "effect-tsgo patch"
|
"prepare": "effect-tsgo patch"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@effect/platform-browser": "^4.0.0-beta.60",
|
||||||
"@mobily/ts-belt": "v4.0.0-rc.5",
|
"@mobily/ts-belt": "v4.0.0-rc.5",
|
||||||
"@sentry/browser": "^10.51.0",
|
"@sentry/browser": "^10.51.0",
|
||||||
"a11y-dialog": "^8.1.5",
|
"a11y-dialog": "^8.1.5",
|
||||||
"effect": "^4.0.0-beta.59",
|
"effect": "^4.0.0-beta.60",
|
||||||
"html-template-tag": "^5.0.0",
|
"html-template-tag": "^5.0.0",
|
||||||
"lit-html": "^3.3.2",
|
"lit-html": "^3.3.2",
|
||||||
"purify-ts": "2.1.2",
|
"purify-ts": "2.1.2",
|
||||||
|
|
@ -25,30 +26,30 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@effect/language-service": "^0.85.1",
|
"@effect/language-service": "^0.85.1",
|
||||||
"@effect/tsgo": "^0.5.2",
|
"@effect/tsgo": "^0.5.2",
|
||||||
"@gcch/configuration-eslint": "git+https://git.gcch.fr/gcch/configuration-eslint#888eb4aa54",
|
"@gcch/configuration-eslint": "git+https://git.gcch.fr/gcch/configuration-eslint",
|
||||||
"@gcch/configuration-oxlint": "git+https://git.gcch.fr/gcch/configuration-oxlint#83547fc1ebfd",
|
"@gcch/configuration-oxlint": "git+https://git.gcch.fr/gcch/configuration-oxlint",
|
||||||
"@gcch/configuration-prettier": "git+https://git.gcch.fr/gcch/configuration-prettier#d267d6dc5e",
|
"@gcch/configuration-prettier": "git+https://git.gcch.fr/gcch/configuration-prettier",
|
||||||
"@playwright/test": "^1.59.1",
|
"@playwright/test": "^1.59.1",
|
||||||
"@sentry/core": "^10.51.0",
|
"@sentry/core": "^10.51.0",
|
||||||
"@types/bun": "^1.3.13",
|
"@types/bun": "^1.3.13",
|
||||||
"@types/node": "^25.6.0",
|
"@types/node": "^25.6.0",
|
||||||
"@typescript/native-preview": "7.0.0-dev.20260503.1",
|
"@typescript/native-preview": "7.0.0-dev.20260504.1",
|
||||||
"@vitejs/plugin-legacy": "^8.0.1",
|
"@vitejs/plugin-legacy": "^8.0.1",
|
||||||
"better-typescript-lib": "^2.12.0",
|
"better-typescript-lib": "^2.12.0",
|
||||||
"browserslist": "^4.28.2",
|
"browserslist": "^4.28.2",
|
||||||
"caniuse-lite": "^1.0.30001791",
|
"caniuse-lite": "^1.0.30001792",
|
||||||
"eslint": "^10.3.0",
|
"eslint": "^10.3.0",
|
||||||
"eslint-plugin-functional": "^9.0.4",
|
"eslint-plugin-functional": "^9.0.4",
|
||||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||||
"eslint-plugin-oxlint": "^1.62.0",
|
"eslint-plugin-oxlint": "^1.63.0",
|
||||||
"eslint-plugin-perfectionist": "^5.9.0",
|
"eslint-plugin-perfectionist": "^5.9.0",
|
||||||
"fdir": "^6.5.0",
|
"fdir": "^6.5.0",
|
||||||
"globals": "^17.6",
|
"globals": "17",
|
||||||
"jiti": "^2.6.1",
|
"jiti": "^2.7.0",
|
||||||
"knip": "^6.11.0",
|
"knip": "^6.11.0",
|
||||||
"lightningcss": "^1.32.0",
|
"lightningcss": "^1.32.0",
|
||||||
"lightningcss-cli": "^1.32.0",
|
"lightningcss-cli": "^1.32.0",
|
||||||
"oxlint": "^1.62.0",
|
"oxlint": "^1.63.0",
|
||||||
"oxlint-tsgolint": "^0.22.1",
|
"oxlint-tsgolint": "^0.22.1",
|
||||||
"playwright": "^1.59.1",
|
"playwright": "^1.59.1",
|
||||||
"prettier": "^3.8.3",
|
"prettier": "^3.8.3",
|
||||||
|
|
@ -59,14 +60,14 @@
|
||||||
"prettier-plugin-sh": "^0.18.1",
|
"prettier-plugin-sh": "^0.18.1",
|
||||||
"prettier-plugin-sort-json": "^4.2.0",
|
"prettier-plugin-sort-json": "^4.2.0",
|
||||||
"sass-embedded": "^1.99.0",
|
"sass-embedded": "^1.99.0",
|
||||||
"stylelint": "^17.9.1",
|
"stylelint": "^17.11.0",
|
||||||
"stylelint-config-clean-order": "^8.0.1",
|
"stylelint-config-clean-order": "^8.0.1",
|
||||||
"stylelint-config-sass-guidelines": "^13.0.0",
|
"stylelint-config-sass-guidelines": "^13.0.0",
|
||||||
"stylelint-config-standard-scss": "^17.0.0",
|
"stylelint-config-standard-scss": "^17.0.0",
|
||||||
"stylelint-declaration-block-no-ignored-properties": "^3.0.0",
|
"stylelint-declaration-block-no-ignored-properties": "^3.0.0",
|
||||||
"stylelint-plugin-logical-css": "^2.1.0",
|
"stylelint-plugin-logical-css": "^2.1.0",
|
||||||
"typescript": "^6.0.3",
|
"typescript": "^6.0.3",
|
||||||
"typescript-eslint": "^8.59.1",
|
"typescript-eslint": "^8.59.2",
|
||||||
"vite": "^8.0.10",
|
"vite": "^8.0.10",
|
||||||
"vite-tsconfig-paths": "^6.1.1"
|
"vite-tsconfig-paths": "^6.1.1"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -1,68 +0,0 @@
|
||||||
#!/usr/bin/fish
|
|
||||||
|
|
||||||
for jpg in **/*.{jpg,jpeg}
|
|
||||||
echo $jpg
|
|
||||||
|
|
||||||
set -f avif (path change-extension 'avif' "$jpg")
|
|
||||||
set -f jxl (path change-extension 'jxl' "$jpg")
|
|
||||||
set -f png (path change-extension 'png' "$jpg")
|
|
||||||
|
|
||||||
set -f dimensions (magick identify -format "%w-%h" $jpg)
|
|
||||||
set -f dimensions (string split "-" $dimensions)
|
|
||||||
|
|
||||||
if test $dimensions[1] -eq 1920 || test $dimensions[2] -eq 1920
|
|
||||||
set -f a_bonnes_dimensions true
|
|
||||||
else
|
|
||||||
set -f a_bonnes_dimensions false
|
|
||||||
end
|
|
||||||
|
|
||||||
if test -e $avif && test -e $jxl
|
|
||||||
echo -e "\tAll there."
|
|
||||||
continue
|
|
||||||
end
|
|
||||||
|
|
||||||
magick "$jpg" -resize 1920x1920\> "$png" >/dev/null
|
|
||||||
|
|
||||||
if ! test -e $jxl
|
|
||||||
if test $a_bonnes_dimensions = false
|
|
||||||
cjxl \
|
|
||||||
--allow_jpeg_reconstruction=1 \
|
|
||||||
--brotli_effort=11 \
|
|
||||||
--container=1 \
|
|
||||||
--effort=9 \
|
|
||||||
--lossless_jpeg=1 \
|
|
||||||
--num_threads=-1 \
|
|
||||||
--progressive \
|
|
||||||
$png $jxl &>/dev/null
|
|
||||||
|
|
||||||
djxl \
|
|
||||||
--num_threads=-1 \
|
|
||||||
$jxl $jpg &>/dev/null
|
|
||||||
end
|
|
||||||
|
|
||||||
cjxl \
|
|
||||||
--allow_jpeg_reconstruction=0 \
|
|
||||||
--brotli_effort=11 \
|
|
||||||
--container=1 \
|
|
||||||
--effort=10 \
|
|
||||||
--quality=70 \
|
|
||||||
--lossless_jpeg=0 \
|
|
||||||
--num_threads=-1 \
|
|
||||||
--progressive \
|
|
||||||
$png $jxl &>/dev/null
|
|
||||||
echo -e "\t$jxl"
|
|
||||||
|
|
||||||
set -f avif (path change-extension 'avif' "$jpg")
|
|
||||||
if ! test -e $avif
|
|
||||||
avifenc \
|
|
||||||
-q 70 \
|
|
||||||
-s 0 \
|
|
||||||
-c aom \
|
|
||||||
-y 420 \
|
|
||||||
"$png" "$avif" &>/dev/null
|
|
||||||
echo -e "\t$avif"
|
|
||||||
end
|
|
||||||
|
|
||||||
rm $png
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
#!/usr/bin/fish
|
|
||||||
|
|
||||||
set -f fichiers_toml (fd --glob "*.toml")
|
|
||||||
set -f fichiers_angie (fd --glob "*.conf" containers/conf/angie)
|
|
||||||
|
|
||||||
for toml in $fichiers_toml
|
|
||||||
tombi format "$toml"
|
|
||||||
end
|
|
||||||
|
|
||||||
for angie in $angie
|
|
||||||
nginxfmt "$angie"
|
|
||||||
end
|
|
||||||
7
web/app/uploads/lol.fish → scripts/optimise-image.fish
Normal file → Executable file
|
|
@ -1,6 +1,11 @@
|
||||||
#!/usr/bin/fish
|
#!/usr/bin/fish
|
||||||
|
|
||||||
set -f jpg $argv
|
if test -z "$argv[1]"
|
||||||
|
echo "Un chemin doit être passé en argument."
|
||||||
|
return 1
|
||||||
|
end
|
||||||
|
|
||||||
|
set -f jpg $argv[1]
|
||||||
echo $jpg
|
echo $jpg
|
||||||
|
|
||||||
set -f avif (path change-extension 'avif' "$jpg")
|
set -f avif (path change-extension 'avif' "$jpg")
|
||||||
23
scripts/optimise-images.fish
Executable file
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/usr/bin/fish
|
||||||
|
|
||||||
|
if ! test $argv
|
||||||
|
set -f argv web/app/uploads
|
||||||
|
end
|
||||||
|
|
||||||
|
if type --query gm
|
||||||
|
else
|
||||||
|
echo -e "GraphicsMagick is missing."
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
if type --query cjxl
|
||||||
|
else
|
||||||
|
echo -e "A JPEGXL encoder (cjxl) is missing."
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
if type --query avifenc
|
||||||
|
else
|
||||||
|
echo -e "An AVIF encoder (avifenc) is missing."
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
|
||||||
|
fd --glob "**/*.{jpg,jpeg}" $argv[1] -x fish "scripts/optimise-image.fish"
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
require_once 'web/wp/wp-load.php';
|
|
||||||
|
|
||||||
ini_set('max_execution_time', 3_600);
|
|
||||||
set_time_limit(3_600);
|
|
||||||
|
|
||||||
$pdo = new PDO('mysql:dbname=haiku_atelier;host=localhost', 'haiku_utilisateur', 'spNFx5EAYwvF7o7XFMjiHpNPYJimDtmKWv');
|
|
||||||
|
|
||||||
// replace _wp_attached_file meta_key
|
|
||||||
global $wpdb;
|
|
||||||
$wp_postmeta = "{$wpdb->prefix}postmeta";
|
|
||||||
|
|
||||||
try {
|
|
||||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
||||||
// Error Handling
|
|
||||||
$sql = "UPDATE {$wp_postmeta} SET meta_value = REPLACE(meta_value,'-scaled.jpg','.jpg') WHERE meta_key='_wp_attached_file' AND meta_value LIKE '%-scaled.jpg%'";
|
|
||||||
$result = $pdo->exec($sql);
|
|
||||||
print_r($result);
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
print_r($e->getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
// replace _wp_attachment_metadata meta_key.
|
|
||||||
$image_metas = [];
|
|
||||||
|
|
||||||
try {
|
|
||||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
||||||
// Error Handling
|
|
||||||
$sql = "SELECT * FROM {$wp_postmeta} WHERE meta_value LIKE '%-scaled.jpg%' AND meta_key='_wp_attachment_metadata'";
|
|
||||||
$statement = $pdo->query($sql);
|
|
||||||
$image_metas = $statement->fetchAll();
|
|
||||||
foreach ($image_metas as $meta) {
|
|
||||||
$meta_value = unserialize($meta['meta_value']);
|
|
||||||
$file = $meta_value['file'];
|
|
||||||
$meta_value['file'] = str_replace('-scaled.jpg', '.jpg', $file);
|
|
||||||
update_post_meta($meta['post_id'], $meta['meta_key'], $meta_value);
|
|
||||||
$result = get_post_meta($meta['post_id'], $meta['meta_key']);
|
|
||||||
print_r($result);
|
|
||||||
}
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
print_r($e->getMessage());
|
|
||||||
}
|
|
||||||
|
|
@ -1,50 +1,40 @@
|
||||||
/** @effect-diagnostics asyncFunction:skip-file */
|
/** @effect-diagnostics asyncFunction:skip-file */
|
||||||
import type { APIRequestContext, Locator, Page, Response } from "@playwright/test";
|
import type { APIRequestContext, Locator, Page, Response } from "@playwright/test";
|
||||||
import { expect, test } from "@playwright/test";
|
import { expect, test } from "@playwright/test";
|
||||||
|
import { ManagedRuntime } from "effect";
|
||||||
|
import { APIClient } from "../../web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts";
|
||||||
import type { WCV3Products } from "../../web/app/themes/haiku-atelier-2024/src/scripts/lib/types/api/v3/products";
|
import type { WCV3Products } from "../../web/app/themes/haiku-atelier-2024/src/scripts/lib/types/api/v3/products";
|
||||||
import type { BackendHeaders } from "./utils.ts";
|
import type { BackendHeaders } from "./utils.ts";
|
||||||
import { getBackendHeadersFromHtml } from "./utils.ts";
|
import { getBackendHeadersFromHtml } from "./utils.ts";
|
||||||
|
|
||||||
test.describe.configure({ mode: "parallel", timeout: 60_000 });
|
test.describe.configure({ mode: "parallel", timeout: 60_000 });
|
||||||
|
|
||||||
|
/** _Runtime_ pour effectuer les appels API. */
|
||||||
|
const TestRuntime = ManagedRuntime.make(APIClient.Live);
|
||||||
|
|
||||||
|
test("is on the first page of the Shop", async ({ page }): Promise<void> => {
|
||||||
|
const FIRST_PAGE_NUMBER = "1";
|
||||||
|
await page.goto("https://haikuatelier.gcch.local/shop/");
|
||||||
|
|
||||||
|
const productsGrid: Locator = page.locator(".grille-produits");
|
||||||
|
await expect(productsGrid, "La grille des Produits est visible.").toBeVisible();
|
||||||
|
|
||||||
|
expect(await productsGrid.getAttribute("data-page"), "Le numéro de page initial est correct.").toBe(
|
||||||
|
FIRST_PAGE_NUMBER,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
test("can scroll to the end of the grid", async ({ page }): Promise<void> => {
|
test("can scroll to the end of the grid", async ({ page }): Promise<void> => {
|
||||||
await scrollToGridsEnd(page);
|
await page.goto("https://haikuatelier.gcch.local/shop/");
|
||||||
});
|
|
||||||
|
|
||||||
test("can access all Products' pages", async ({ page, request }): Promise<void> => {
|
|
||||||
await page["goto"]("https://haikuatelier.gcch.local/shop/");
|
|
||||||
const links = await getAllProductsLinks(page, request);
|
|
||||||
|
|
||||||
for (const link of links) {
|
|
||||||
// Vérifie que le lien de la page retourne OK.
|
|
||||||
const req = await request.get(link);
|
|
||||||
await expect(req, "The Product's page is accessible").toBeOK();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const getAllProductsLinks = async (page: Page, request: APIRequestContext): Promise<Array<string>> => {
|
|
||||||
const backendHeaders: BackendHeaders = await getBackendHeadersFromHtml(page);
|
|
||||||
const response = await request.get("/wp-json/wc/v3/products?page=1&per_page=100&status=publish", {
|
|
||||||
headers: { Authorization: `Basic ${backendHeaders.authString}`, Nonce: backendHeaders.nonce },
|
|
||||||
});
|
|
||||||
const json = (await response.json()) as WCV3Products;
|
|
||||||
return json.map(p => p.permalink);
|
|
||||||
};
|
|
||||||
|
|
||||||
const scrollToGridsEnd = async (page: Page): Promise<void> => {
|
|
||||||
await page["goto"]("https://haikuatelier.gcch.local/shop/");
|
|
||||||
|
|
||||||
let hasMoreProducts = true;
|
let hasMoreProducts = true;
|
||||||
let currentPageNumber = "1";
|
let currentPageNumber = "1";
|
||||||
|
|
||||||
const productsGrid: Locator = page.locator(".grille-produits");
|
const productsGrid: Locator = page.locator(".grille-produits");
|
||||||
await expect(productsGrid, "The Product's grid is visible").toBeVisible();
|
await expect(productsGrid, "La grille des Produits est visible.").toBeVisible();
|
||||||
expect(await productsGrid.getAttribute("data-page"), "The initial page number attribute is correct").toBe(
|
|
||||||
currentPageNumber,
|
|
||||||
);
|
|
||||||
|
|
||||||
const showMoreButton: Locator = page.getByRole("button", { name: "Show more" });
|
const showMoreButton: Locator = page.getByRole("button", { name: "Show more" });
|
||||||
await expect(showMoreButton, "The 'Show more' button is visible").toBeVisible();
|
await expect(showMoreButton, "Le bouton « Show more » est visible.").toBeVisible();
|
||||||
|
|
||||||
while (hasMoreProducts) {
|
while (hasMoreProducts) {
|
||||||
const newProductsResponse: Promise<Response> = page.waitForResponse(new RegExp(".*wp-json/wc/v3/products.*"));
|
const newProductsResponse: Promise<Response> = page.waitForResponse(new RegExp(".*wp-json/wc/v3/products.*"));
|
||||||
|
|
@ -57,7 +47,7 @@ const scrollToGridsEnd = async (page: Page): Promise<void> => {
|
||||||
await gridWithNewPageNumber.waitFor();
|
await gridWithNewPageNumber.waitFor();
|
||||||
|
|
||||||
// Redondance pour expliciter la raison de l'assertion.
|
// Redondance pour expliciter la raison de l'assertion.
|
||||||
expect(await productsGrid.getAttribute("data-page"), "The page number attribute is incremented").toBe(
|
expect(await productsGrid.getAttribute("data-page"), "Le numéro de page a été incrémenté.").toBe(
|
||||||
newPageNumber,
|
newPageNumber,
|
||||||
);
|
);
|
||||||
currentPageNumber = newPageNumber;
|
currentPageNumber = newPageNumber;
|
||||||
|
|
@ -67,4 +57,44 @@ const scrollToGridsEnd = async (page: Page): Promise<void> => {
|
||||||
hasMoreProducts = false;
|
hasMoreProducts = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test("can access all Products' pages", async ({ page, request }): Promise<void> => {
|
||||||
|
await page.goto("https://haikuatelier.gcch.local/shop/");
|
||||||
|
const links = await getAllProductsLinks(page, request);
|
||||||
|
|
||||||
|
for (const link of links) {
|
||||||
|
// Vérifie que le lien de la page retourne OK.
|
||||||
|
const req = await request.get(link);
|
||||||
|
await expect(req, "La page du Produit est accessible.").toBeOK();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test("has no Product with broken images", async ({ page }): Promise<void> => {
|
||||||
|
await page.goto("https://haikuatelier.gcch.local/shop/");
|
||||||
|
|
||||||
|
await loadMoreProducts(page);
|
||||||
|
|
||||||
|
const brokenImages = await page.locator("a:has(img[src=''])").all();
|
||||||
|
const links = await Promise.all(brokenImages.map(locator => locator.getAttribute("href")));
|
||||||
|
|
||||||
|
console.info("Liens des Produits avec images cassées :", links);
|
||||||
|
|
||||||
|
expect(links.length, "Il n'y pas d'images cassées.").toEqual(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
const getAllProductsLinks = async (page: Page, request: APIRequestContext): Promise<Array<string>> => {
|
||||||
|
const backendHeaders: BackendHeaders = await getBackendHeadersFromHtml(page);
|
||||||
|
const response = await request.get("/wp-json/wc/v3/products?page=1&per_page=100&status=publish", {
|
||||||
|
headers: { Authorization: `Basic ${backendHeaders.authString}`, Nonce: backendHeaders.nonce },
|
||||||
|
});
|
||||||
|
const json = (await response.json()) as WCV3Products;
|
||||||
|
return json.map(p => p.permalink);
|
||||||
|
};
|
||||||
|
|
||||||
|
const loadMoreProducts = async (page: Page): Promise<void> => {
|
||||||
|
const showMoreButton: Locator = page.getByRole("button", { name: "Show more" });
|
||||||
|
const newProductsResponse: Promise<Response> = page.waitForResponse(new RegExp(".*wp-json/wc/v3/products.*"));
|
||||||
|
await showMoreButton.click();
|
||||||
|
await newProductsResponse;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
{
|
{
|
||||||
"diagnosticSeverity": {
|
"diagnosticSeverity": {
|
||||||
"anyUnknownInErrorContext": "error",
|
"anyUnknownInErrorContext": "error",
|
||||||
"asyncFunction": "warning",
|
"asyncFunction": "off",
|
||||||
"catchAllToMapError": "error",
|
"catchAllToMapError": "error",
|
||||||
"catchUnfailableEffect": "error",
|
"catchUnfailableEffect": "error",
|
||||||
"classSelfMismatch": "error",
|
"classSelfMismatch": "error",
|
||||||
|
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-404.scss"],"names":[],"mappings":"AAEA;EAEE;EAGA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;IACE;IACA","file":"page-404.css"}
|
|
||||||
|
|
@ -1,115 +0,0 @@
|
||||||
@charset "UTF-8";
|
|
||||||
#page-a-propos {
|
|
||||||
--hauteur-conteneur: var(--contenu-page-hauteur-minimale-sans-categories);
|
|
||||||
--page-marges-bloc-debut: var(--en-tete-hauteur);
|
|
||||||
--conteneur-marges-internes-ligne: var(--espace-xl);
|
|
||||||
overflow: hidden;
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
min-block-size: var(--hauteur-conteneur);
|
|
||||||
max-block-size: var(--hauteur-conteneur);
|
|
||||||
margin-top: var(--page-marges-bloc-debut);
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling {
|
|
||||||
overflow-y: scroll;
|
|
||||||
overscroll-behavior: none;
|
|
||||||
min-block-size: inherit;
|
|
||||||
max-block-size: inherit;
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__conteneur {
|
|
||||||
overscroll-behavior: inherit;
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
place-items: center;
|
|
||||||
min-block-size: calc(var(--hauteur-conteneur) * 13);
|
|
||||||
padding: 0 var(--conteneur-marges-internes-ligne);
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__animation {
|
|
||||||
--hauteur-animation: 90px;
|
|
||||||
--taille-police: calc(var(--espace-xl) * 2.5);
|
|
||||||
pointer-events: none;
|
|
||||||
position: absolute;
|
|
||||||
z-index: 3;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
left: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
display: grid;
|
|
||||||
place-content: center;
|
|
||||||
place-items: center;
|
|
||||||
block-size: 100%;
|
|
||||||
margin: auto;
|
|
||||||
visibility: visible;
|
|
||||||
opacity: 100%;
|
|
||||||
mask-image: linear-gradient(var(--mask-direction, to right), hsla(0, 0%, 0%, 0), hsl(0, 0%, 0%) 20%, hsl(0, 0%, 0%) 80%, hsla(0, 0%, 0%, 0));
|
|
||||||
transition: 1s opacity ease-in-out, 1s visibility ease-in-out;
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__animation[hidden] {
|
|
||||||
display: grid !important;
|
|
||||||
visibility: hidden;
|
|
||||||
opacity: 0%;
|
|
||||||
transition: 1s opacity ease-in-out, 1s visibility ease-in-out;
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__animation.no-js {
|
|
||||||
visibility: hidden;
|
|
||||||
opacity: 0%;
|
|
||||||
transition: 1s opacity ease-in-out, 1s visibility ease-in-out;
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__animation .animation-conteneur {
|
|
||||||
overflow: visible;
|
|
||||||
width: 120vw;
|
|
||||||
block-size: var(--hauteur-animation);
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__animation .animation-texte {
|
|
||||||
overflow: visible;
|
|
||||||
font-size: var(--taille-police);
|
|
||||||
font-weight: 600;
|
|
||||||
text-shadow: 4px 4px 0 var(--couleur-blanc);
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: var(--espacement-inter-lettres-rapproche-s);
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__image {
|
|
||||||
position: sticky;
|
|
||||||
top: 0;
|
|
||||||
align-content: center;
|
|
||||||
inline-size: max-content;
|
|
||||||
max-inline-size: 100%;
|
|
||||||
min-block-size: var(--hauteur-conteneur);
|
|
||||||
max-block-size: var(--hauteur-conteneur);
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__image[data-caché] {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__image picture {
|
|
||||||
max-block-size: inherit;
|
|
||||||
}
|
|
||||||
#page-a-propos .storytelling__image img {
|
|
||||||
scale: 0.95;
|
|
||||||
max-block-size: inherit;
|
|
||||||
margin: auto;
|
|
||||||
object-fit: contain;
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
@media (scripting: none) {
|
|
||||||
#page-a-propos .storytelling__animation {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media (width <= 700px) {
|
|
||||||
#page-a-propos {
|
|
||||||
--conteneur-marges-internes-ligne: var(--espace-l);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media (width <= 500px) {
|
|
||||||
#page-a-propos {
|
|
||||||
--conteneur-marges-internes-ligne: var(--espace-m);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@supports (-moz-appearance: none) {
|
|
||||||
#page-a-propos .storytelling__animation {
|
|
||||||
--taille-police: calc(var(--espace-xl) * 2.2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*# sourceMappingURL=page-a-propos.css.map */
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-a-propos.scss"],"names":[],"mappings":";AAEA;EAEE;EAGA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAOA;;AAEA;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAGF;EACE;EAIA;EACA;;AAGF;EACE;EAGA;EACA;EAGA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAMN;EACE;IACE;;;AAIJ;EAjIF;IAkII;;;AAGF;EArIF;IAsII;;;;AAKJ;EACE;IACE","file":"page-a-propos.css"}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
#page-a-propos{--hauteur-conteneur:var(--contenu-page-hauteur-minimale-sans-categories);--page-marges-bloc-debut:var(--en-tete-hauteur);--conteneur-marges-internes-ligne:var(--espace-xl);min-block-size:var(--hauteur-conteneur);max-block-size:var(--hauteur-conteneur);margin-top:var(--page-marges-bloc-debut);flex-flow:column;display:flex;overflow:hidden}#page-a-propos .storytelling{overscroll-behavior:none;min-block-size:inherit;max-block-size:inherit;overflow-y:scroll}#page-a-propos .storytelling__conteneur{overscroll-behavior:inherit;min-block-size:calc(var(--hauteur-conteneur) * 13);padding:0 var(--conteneur-marges-internes-ligne);flex-flow:column;place-items:center;display:flex}#page-a-propos .storytelling__animation{--hauteur-animation:90px;--taille-police:calc(var(--espace-xl) * 2.5);pointer-events:none;z-index:3;visibility:visible;opacity:1;block-size:100%;mask-image:linear-gradient(var(--mask-direction,to right), #0000, #000 20%, #000 80%, #0000);place-content:center;place-items:center;margin:auto;transition:opacity 1s ease-in-out,visibility 1s ease-in-out;display:grid;position:absolute;top:0;left:0;right:0;overflow:hidden}#page-a-propos .storytelling__animation[hidden]{visibility:hidden;opacity:0;transition:opacity 1s ease-in-out,visibility 1s ease-in-out;display:grid!important}#page-a-propos .storytelling__animation.no-js{visibility:hidden;opacity:0;transition:opacity 1s ease-in-out,visibility 1s ease-in-out}#page-a-propos .storytelling__animation .animation-conteneur{width:120vw;block-size:var(--hauteur-animation);overflow:visible}#page-a-propos .storytelling__animation .animation-texte{font-size:var(--taille-police);text-shadow:4px 4px 0 var(--couleur-blanc);text-transform:uppercase;letter-spacing:var(--espacement-inter-lettres-rapproche-s);font-weight:600;overflow:visible}#page-a-propos .storytelling__image{inline-size:max-content;max-inline-size:100%;min-block-size:var(--hauteur-conteneur);max-block-size:var(--hauteur-conteneur);align-content:center;position:sticky;top:0}#page-a-propos .storytelling__image[data-caché]{display:none!important}#page-a-propos .storytelling__image picture{max-block-size:inherit}#page-a-propos .storytelling__image img{max-block-size:inherit;object-fit:contain;background:0 0;margin:auto;scale:.95}@media (scripting:none){#page-a-propos .storytelling__animation{visibility:hidden}}@media (width<=700px){#page-a-propos{--conteneur-marges-internes-ligne:var(--espace-l)}}@media (width<=500px){#page-a-propos{--conteneur-marges-internes-ligne:var(--espace-m)}}@supports ((-moz-appearance:none)){#page-a-propos .storytelling__animation{--taille-police:calc(var(--espace-xl) * 2.2)}}
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
#page-accueil {
|
|
||||||
--hauteur-conteneur: calc(100svh - var(--pied-de-page-hauteur));
|
|
||||||
overflow: hidden;
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
min-block-size: var(--hauteur-conteneur);
|
|
||||||
max-block-size: var(--hauteur-conteneur);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* # sourceMappingURL=page-accueil.css.map */
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-accueil.scss"],"names":[],"mappings":"AAEA;EAEE;EAEA;EACA;EACA;EACA;EACA","file":"page-accueil.css"}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
#page-accueil{--hauteur-conteneur:calc(100svh - var(--pied-de-page-hauteur));min-block-size:var(--hauteur-conteneur);max-block-size:var(--hauteur-conteneur);flex-flow:column;display:flex;overflow:hidden}
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
#page-boutique .actions {
|
|
||||||
align-content: center;
|
|
||||||
width: 100%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#page-boutique .actions button {
|
|
||||||
padding: var(--espace-xl) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*# sourceMappingURL=page-boutique.css.map */
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-boutique.scss"],"names":[],"mappings":"AAGE;EACE;EACA;EACA;;AAEA;EACE","file":"page-boutique.css"}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
#page-boutique .actions{text-align:center;align-content:center;width:100%}#page-boutique .actions button{padding:var(--espace-xl) 0}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-contact.scss"],"names":[],"mappings":"AAEA;EAEE;AAAA;AAAA;EAKA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;IACE;IACA","file":"page-contact.css"}
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
#page-contact {
|
|
||||||
--page-hauteur-minimale: calc(
|
|
||||||
100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px
|
|
||||||
);
|
|
||||||
--page-marges-bloc-debut: var(--en-tete-hauteur);
|
|
||||||
margin-top: var(--page-marges-bloc-debut);
|
|
||||||
margin-bottom: var(--espace-xl);
|
|
||||||
border-bottom: 1px solid var(--couleur-noir);
|
|
||||||
flex-flow: column;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
#page-contact .contenu {
|
|
||||||
width: min(50rem, 100%);
|
|
||||||
min-height: var(--page-hauteur-minimale);
|
|
||||||
border: 1px solid var(--couleur-noir);
|
|
||||||
border-bottom: initial;
|
|
||||||
flex-flow: column;
|
|
||||||
place-items: center;
|
|
||||||
margin: auto;
|
|
||||||
font-style: italic;
|
|
||||||
font-weight: 500;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
#page-contact .contenu__en-tete {
|
|
||||||
width: 100%;
|
|
||||||
padding: var(--espace-m) var(--espace-xl);
|
|
||||||
color: var(--couleur-blanc);
|
|
||||||
background: var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#page-contact .contenu__en-tete h2 {
|
|
||||||
text-transform: uppercase;
|
|
||||||
width: fit-content;
|
|
||||||
letter-spacing: var(--espacement-inter-lettres-etendu-l);
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
#page-contact .contenu__textuel {
|
|
||||||
max-width: 34rem;
|
|
||||||
height: 100%;
|
|
||||||
padding: 0 var(--espace-xl);
|
|
||||||
text-wrap: pretty;
|
|
||||||
flex-flow: column;
|
|
||||||
flex: 1;
|
|
||||||
place-content: center;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
#page-contact .contenu__textuel p + p {
|
|
||||||
margin-top: var(--espace-m);
|
|
||||||
}
|
|
||||||
@media (width <= 50rem) {
|
|
||||||
#page-contact .contenu {
|
|
||||||
border-right: initial;
|
|
||||||
border-left: initial;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,97 +0,0 @@
|
||||||
.page-modele-simple {
|
|
||||||
--page-hauteur-minimale: calc(
|
|
||||||
100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px
|
|
||||||
);
|
|
||||||
--page-marges-bloc-debut: var(--en-tete-hauteur);
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
margin-top: var(--page-marges-bloc-debut);
|
|
||||||
margin-bottom: var(--espace-xl);
|
|
||||||
border-bottom: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
.page-modele-simple .contenu {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
place-items: center;
|
|
||||||
width: min(50rem, 100%);
|
|
||||||
min-height: var(--page-hauteur-minimale);
|
|
||||||
margin: auto;
|
|
||||||
border: 1px solid var(--couleur-noir);
|
|
||||||
border-bottom: initial;
|
|
||||||
font-weight: 400;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
.page-modele-simple .contenu__en-tete {
|
|
||||||
width: 100%;
|
|
||||||
padding: var(--espace-m) var(--espace-xl);
|
|
||||||
color: var(--couleur-blanc);
|
|
||||||
background: var(--couleur-noir);
|
|
||||||
}
|
|
||||||
.page-modele-simple .contenu__en-tete h2 {
|
|
||||||
width: fit-content;
|
|
||||||
margin: auto;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: var(--espacement-inter-lettres-etendu-l);
|
|
||||||
}
|
|
||||||
.page-modele-simple .contenu__textuel {
|
|
||||||
display: flex;
|
|
||||||
flex: 1;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
place-content: center;
|
|
||||||
max-width: 34rem;
|
|
||||||
height: 100%;
|
|
||||||
padding: 0 var(--espace-xl);
|
|
||||||
text-wrap: pretty;
|
|
||||||
}
|
|
||||||
.page-modele-simple .contenu__textuel p + p {
|
|
||||||
margin-top: var(--espace-m);
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu {
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu header {
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu__textuel {
|
|
||||||
max-width: initial;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu__textuel__section {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu__textuel__section:first-of-type header {
|
|
||||||
border-top: initial;
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu__textuel__section header {
|
|
||||||
width: 100%;
|
|
||||||
margin-bottom: var(--espace-l);
|
|
||||||
padding: var(--espace-m) var(--espace-xl);
|
|
||||||
border-top: 1px solid var(--couleur-noir);
|
|
||||||
border-bottom: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu__textuel__section header h3 {
|
|
||||||
width: fit-content;
|
|
||||||
margin: auto;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: var(--espacement-inter-lettres-etendu-l);
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu__textuel__section ul {
|
|
||||||
margin-bottom: 1lh;
|
|
||||||
padding: 0 var(--espace-xl);
|
|
||||||
list-style: square;
|
|
||||||
list-style-position: inside;
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu__textuel__section p {
|
|
||||||
padding: 0 var(--espace-xl);
|
|
||||||
}
|
|
||||||
.page-modele-simple#page-cgv .contenu__textuel__section p:last-of-type {
|
|
||||||
margin-bottom: var(--espace-xl);
|
|
||||||
}
|
|
||||||
@media (width <= 50rem) {
|
|
||||||
.page-modele-simple .contenu {
|
|
||||||
border-right: initial;
|
|
||||||
border-left: initial;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* # sourceMappingURL=page-modele-simple.css.map */
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-modele-simple.scss"],"names":[],"mappings":"AAEA;EAEE;AAAA;AAAA;EAKA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAMJ;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;;AAGE;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAKF;EACE;;AAEA;EACE;;AAQZ;EACE;IACE;IACA","file":"page-modele-simple.css"}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
.page-modele-simple{--page-hauteur-minimale:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px);--page-marges-bloc-debut:var(--en-tete-hauteur);margin-top:var(--page-marges-bloc-debut);margin-bottom:var(--espace-xl);border-bottom:1px solid var(--couleur-noir);flex-flow:column;display:flex}.page-modele-simple .contenu{width:min(50rem,100%);min-height:var(--page-hauteur-minimale);border:1px solid var(--couleur-noir);border-bottom:initial;flex-flow:column;place-items:center;margin:auto;font-style:italic;font-weight:400;display:flex}.page-modele-simple .contenu__en-tete{width:100%;padding:var(--espace-m) var(--espace-xl);color:var(--couleur-blanc);background:var(--couleur-noir)}.page-modele-simple .contenu__en-tete h2{text-transform:uppercase;width:fit-content;letter-spacing:var(--espacement-inter-lettres-etendu-l);margin:auto}.page-modele-simple .contenu__textuel{max-width:34rem;height:100%;padding:0 var(--espace-xl);text-wrap:pretty;flex-flow:column;flex:1;place-content:center;display:flex}.page-modele-simple .contenu__textuel p+p{margin-top:var(--espace-m)}.page-modele-simple#page-cgv .contenu{font-style:normal}.page-modele-simple#page-cgv .contenu header{font-style:italic}.page-modele-simple#page-cgv .contenu__textuel{max-width:initial;padding:0}.page-modele-simple#page-cgv .contenu__textuel__section{width:100%}.page-modele-simple#page-cgv .contenu__textuel__section:first-of-type header{border-top:initial}.page-modele-simple#page-cgv .contenu__textuel__section header{width:100%;margin-bottom:var(--espace-l);padding:var(--espace-m) var(--espace-xl);border-top:1px solid var(--couleur-noir);border-bottom:1px solid var(--couleur-noir)}.page-modele-simple#page-cgv .contenu__textuel__section header h3{text-transform:uppercase;width:fit-content;letter-spacing:var(--espacement-inter-lettres-etendu-l);margin:auto}.page-modele-simple#page-cgv .contenu__textuel__section ul{padding:0 var(--espace-xl);margin-bottom:1lh;list-style:inside square}.page-modele-simple#page-cgv .contenu__textuel__section p{padding:0 var(--espace-xl)}.page-modele-simple#page-cgv .contenu__textuel__section p:last-of-type{margin-bottom:var(--espace-xl)}@media (width<=50rem){.page-modele-simple .contenu{border-right:initial;border-left:initial}}
|
|
||||||
|
|
@ -1,445 +0,0 @@
|
||||||
@charset "UTF-8";
|
|
||||||
#panneau-panier {
|
|
||||||
border-right: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#panneau-panier > div {
|
|
||||||
place-content: center;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits__produit {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 1fr;
|
|
||||||
grid-template-rows: 1fr;
|
|
||||||
border-bottom: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits__produit__illustratif {
|
|
||||||
border-right: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits__produit__illustratif picture {
|
|
||||||
overflow: hidden;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits__produit__illustratif img {
|
|
||||||
aspect-ratio: 1;
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
place-content: center;
|
|
||||||
width: fit-content;
|
|
||||||
margin: auto;
|
|
||||||
padding: 0 var(--espace-xl);
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__nom-prix {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row nowrap;
|
|
||||||
column-gap: var(--espace-l);
|
|
||||||
justify-content: space-between;
|
|
||||||
font-size: var(--espace-l);
|
|
||||||
line-height: var(--hauteur-ligne-moitie);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__nom-prix span {
|
|
||||||
min-width: 4rem;
|
|
||||||
font-weight: 600;
|
|
||||||
font-style: initial;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__description {
|
|
||||||
margin-bottom: var(--espace-l);
|
|
||||||
text-transform: lowercase;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__actions {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 0.25fr auto 0.25fr;
|
|
||||||
grid-template-rows: 1fr 1fr;
|
|
||||||
font-weight: 500;
|
|
||||||
font-style: initial;
|
|
||||||
/* Bouton d'addition de quantité */
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__actions button:first-of-type {
|
|
||||||
grid-column: 1;
|
|
||||||
min-width: 3rem;
|
|
||||||
max-width: 3rem;
|
|
||||||
border: 1px solid var(--couleur-noir);
|
|
||||||
border-bottom: initial;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__actions {
|
|
||||||
/*
|
|
||||||
* 1. Cache les flèches d'augmentation/diminution sur Firefox.
|
|
||||||
* 2. Cache les flèches d'augmentation/diminution sur Chrome/Edge/Safari.
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number] {
|
|
||||||
grid-column: 2;
|
|
||||||
width: 100%;
|
|
||||||
border: initial;
|
|
||||||
border-top: 1px solid var(--couleur-noir);
|
|
||||||
text-align: center;
|
|
||||||
appearance: textfield; /* 1 */
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-outer-spin-button, #panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-inner-spin-button {
|
|
||||||
margin: 0; /* 2 */
|
|
||||||
appearance: none; /* 2 */
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__actions {
|
|
||||||
/* Bouton de suppression de quantité */
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__actions button:nth-of-type(2) {
|
|
||||||
grid-column: 3;
|
|
||||||
min-width: 3rem;
|
|
||||||
max-width: 3rem;
|
|
||||||
border: 1px solid var(--couleur-noir);
|
|
||||||
border-bottom: initial;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__actions {
|
|
||||||
/* Bouton de suppression du Produit du Panier */
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit__actions button:last-of-type {
|
|
||||||
grid-column: span 3;
|
|
||||||
grid-row: 2;
|
|
||||||
padding: var(--espace-xs);
|
|
||||||
border: 1px solid var(--couleur-noir);
|
|
||||||
text-transform: lowercase;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__instructions-code-promo {
|
|
||||||
width: 100%;
|
|
||||||
padding: var(--espace-l) var(--espace-xl);
|
|
||||||
border-bottom: 1px solid var(--couleur-noir);
|
|
||||||
text-align: center;
|
|
||||||
/*
|
|
||||||
* 1. Nécessaire pour ne pas qu'un espace vertical non souhaité apparaisse.
|
|
||||||
* 2. Applique une marge entre les instructions et le code promo de notre choix.
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__instructions-code-promo__instructions {
|
|
||||||
resize: vertical;
|
|
||||||
display: block; /* 1 */
|
|
||||||
width: 100%;
|
|
||||||
margin: auto; /* 1 */
|
|
||||||
margin-bottom: var(--espace-s); /* 2 */
|
|
||||||
padding: var(--espace-s);
|
|
||||||
border: 1px solid transparent;
|
|
||||||
font-size: 0.8rem;
|
|
||||||
font-weight: 450;
|
|
||||||
background: initial;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__instructions-code-promo__code-promo {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row wrap;
|
|
||||||
place-content: center;
|
|
||||||
width: fit-content;
|
|
||||||
margin: auto;
|
|
||||||
/*
|
|
||||||
* 1. Longueur minimale pour le Bouton n'ait pas à changer de taille quel que soit son texte
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__instructions-code-promo__code-promo button {
|
|
||||||
min-width: 9rem; /* 1 */
|
|
||||||
padding: var(--espace-xs) var(--espace-xl);
|
|
||||||
border: 1px solid var(--couleur-noir);
|
|
||||||
border-left: initial;
|
|
||||||
text-transform: lowercase;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__instructions-code-promo__code-promo__message {
|
|
||||||
flex-basis: 100%;
|
|
||||||
margin-top: var(--espace-m);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux {
|
|
||||||
width: min(40rem, 100%);
|
|
||||||
margin: auto;
|
|
||||||
padding: var(--espace-l) var(--espace-xl);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux__ligne {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row nowrap;
|
|
||||||
justify-content: space-between;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux__ligne strong {
|
|
||||||
text-align: right;
|
|
||||||
text-transform: lowercase;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type span {
|
|
||||||
color: var(--couleur-gris-fonce);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux__choix-methode-livraison {
|
|
||||||
flex-flow: row wrap;
|
|
||||||
gap: var(--espace-xs) var(--espace-m);
|
|
||||||
justify-content: center;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
letter-spacing: inherit;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux__choix-methode-livraison > label:first-of-type {
|
|
||||||
cursor: revert;
|
|
||||||
flex-basis: 100%;
|
|
||||||
margin-bottom: var(--espace-xs);
|
|
||||||
color: var(--couleur-gris-fonce);
|
|
||||||
text-align: center;
|
|
||||||
text-transform: lowercase;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux__choix-methode-livraison div {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row nowrap;
|
|
||||||
column-gap: 1ch;
|
|
||||||
place-items: center;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux__conditions-livraison {
|
|
||||||
margin-top: var(--espace-l);
|
|
||||||
font-size: 0.8rem;
|
|
||||||
font-weight: 450;
|
|
||||||
color: var(--couleur-gris-fonce);
|
|
||||||
letter-spacing: var(--espacement-inter-lettres-etendu-s);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__pied-de-page {
|
|
||||||
align-content: center;
|
|
||||||
padding: var(--espace-l) 0;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
font-style: italic;
|
|
||||||
color: var(--couleur-blanc);
|
|
||||||
text-align: center;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 2px;
|
|
||||||
background: var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__pied-de-page span {
|
|
||||||
margin-left: var(--espace-l);
|
|
||||||
font-style: initial;
|
|
||||||
}
|
|
||||||
@media (width <= 500px) {
|
|
||||||
#panneau-panier .panneau__grille-produits__produit__illustratif img {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit {
|
|
||||||
padding: var(--espace-l);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__grille-produits .detail-produit .detail-produit__nom-prix {
|
|
||||||
column-gap: var(--espace-l);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__instructions-code-promo {
|
|
||||||
padding: var(--espace-xl) var(--espace-l);
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__instructions-code-promo .panneau__instructions-code-promo__code-promo input, #panneau-panier .panneau__instructions-code-promo .panneau__instructions-code-promo__code-promo button {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
#panneau-panier .panneau__sous-totaux {
|
|
||||||
padding: var(--espace-xl) var(--espace-l);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#panneau-informations-client {
|
|
||||||
position: sticky;
|
|
||||||
top: var(--en-tete-hauteur);
|
|
||||||
right: 0;
|
|
||||||
height: fit-content;
|
|
||||||
}
|
|
||||||
#panneau-informations-client > * {
|
|
||||||
align-content: center;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__paypal-express {
|
|
||||||
--hauteur-images-bouton: 18px;
|
|
||||||
--hauteur-bouton: calc(var(--hauteur-images-bouton) * 2);
|
|
||||||
--longueur-bouton: 250px;
|
|
||||||
--espacement-inter-images: var(--espace-xs);
|
|
||||||
padding: var(--espace-xl);
|
|
||||||
border-bottom: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__paypal-express p {
|
|
||||||
margin-bottom: var(--espace-s);
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__paypal-express button {
|
|
||||||
display: flex;
|
|
||||||
column-gap: var(--espacement-inter-images);
|
|
||||||
place-content: center;
|
|
||||||
place-items: center;
|
|
||||||
width: var(--longueur-bouton);
|
|
||||||
height: var(--hauteur-bouton);
|
|
||||||
margin: auto;
|
|
||||||
background: var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__paypal-express button img {
|
|
||||||
height: var(--hauteur-images-bouton);
|
|
||||||
background: inherit;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__paypal-express button img:first-of-type {
|
|
||||||
margin-top: -1px;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__formulaires {
|
|
||||||
padding: var(--espace-xl) 0;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__formulaires .panneau__formulaires__separation-adresses {
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row nowrap;
|
|
||||||
column-gap: 1ch;
|
|
||||||
place-items: center;
|
|
||||||
width: fit-content;
|
|
||||||
margin: auto;
|
|
||||||
margin-bottom: var(--espace-m);
|
|
||||||
font-size: 0.8rem;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__formulaires .panneau__formulaires__separation-adresses label {
|
|
||||||
text-transform: lowercase;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__formulaires .panneau__formulaires__paiement .formulaire__paiement__attente-renseignement-formulaires {
|
|
||||||
align-content: center;
|
|
||||||
width: 100%;
|
|
||||||
padding: 0;
|
|
||||||
font-size: 0.8rem;
|
|
||||||
font-weight: 450;
|
|
||||||
color: var(--couleur-gris-fonce);
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__formulaires .panneau__formulaires__paiement .formulaire__paiement__attente-renseignement-formulaires p + p {
|
|
||||||
margin-top: 1lh;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__formulaires .panneau__formulaires__message {
|
|
||||||
margin: var(--espace-xl) 0;
|
|
||||||
font-weight: 500;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .formulaire {
|
|
||||||
margin: auto;
|
|
||||||
padding: 0 var(--espace-xl);
|
|
||||||
}
|
|
||||||
#panneau-informations-client .formulaire + .formulaire {
|
|
||||||
margin-top: var(--espace-xl);
|
|
||||||
}
|
|
||||||
#panneau-informations-client .formulaire .formulaire__titre {
|
|
||||||
margin-bottom: var(--espace-m);
|
|
||||||
font-size: 1.25rem;
|
|
||||||
font-weight: 600;
|
|
||||||
font-style: italic;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .formulaire .formulaire__champs {
|
|
||||||
width: fit-content;
|
|
||||||
margin: auto;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .formulaire .formulaire__champs .formulaire__champs__champ {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row nowrap;
|
|
||||||
column-gap: var(--espace-xl);
|
|
||||||
place-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .formulaire .formulaire__champs .formulaire__champs__champ + .formulaire__champs__champ {
|
|
||||||
margin-top: var(--espace-l);
|
|
||||||
}
|
|
||||||
#panneau-informations-client .formulaire label {
|
|
||||||
width: min(7rem, 100%);
|
|
||||||
font-weight: 400;
|
|
||||||
text-transform: lowercase;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .formulaire label:has(+ :is(input:required, select:required)) {
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
|
||||||
#panneau-informations-client .formulaire input, #panneau-informations-client .formulaire select {
|
|
||||||
width: min(15rem, 100%);
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__pied-de-page {
|
|
||||||
align-content: center;
|
|
||||||
font-size: 1.25rem;
|
|
||||||
font-style: italic;
|
|
||||||
color: var(--couleur-blanc);
|
|
||||||
text-align: center;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 2px;
|
|
||||||
border-block: 1px solid var(--couleur-noir);
|
|
||||||
border-block-end: 0;
|
|
||||||
background: var(--arriere-plan-points);
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__pied-de-page:has(button[disabled]) {
|
|
||||||
background: var(--couleur-gris-fond);
|
|
||||||
}
|
|
||||||
#panneau-informations-client .panneau__pied-de-page button {
|
|
||||||
padding: var(--espace-l) 0;
|
|
||||||
}
|
|
||||||
@media (hover: hover) {
|
|
||||||
#panneau-informations-client .panneau__pied-de-page button:not([disabled]):hover {
|
|
||||||
font-weight: 600;
|
|
||||||
color: var(--couleur-blanc);
|
|
||||||
background: var(--couleur-gris-fonce-fond);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media (width <= 500px) {
|
|
||||||
#panneau-informations-client .panneau__formulaires {
|
|
||||||
padding: var(--espace-xl) 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 1. Applique une marge supérieure égale à la hauteur de l'en-tête pour qu'elle puisse s'afficher
|
|
||||||
* correctement.
|
|
||||||
*/
|
|
||||||
#page-panier {
|
|
||||||
/* Dimensions */
|
|
||||||
--menu-section-hauteur: var(--menu-categories-produits-hauteur);
|
|
||||||
/* Marges */
|
|
||||||
--menu-section-marges-bloc-debut: var(--en-tete-hauteur); /* 1 */
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row wrap;
|
|
||||||
min-height: calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));
|
|
||||||
margin-top: var(--menu-section-marges-bloc-debut);
|
|
||||||
}
|
|
||||||
#page-panier .panneau {
|
|
||||||
flex: 1 1 30rem;
|
|
||||||
border-top: 1px solid var(--couleur-noir);
|
|
||||||
border-bottom: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#page-panier .panneau__en-tete {
|
|
||||||
position: sticky;
|
|
||||||
z-index: 2;
|
|
||||||
top: var(--menu-section-marges-bloc-debut);
|
|
||||||
display: block;
|
|
||||||
align-content: center;
|
|
||||||
min-height: var(--menu-categories-produits-hauteur);
|
|
||||||
max-height: var(--menu-categories-produits-hauteur);
|
|
||||||
color: var(--couleur-gris);
|
|
||||||
text-align: center;
|
|
||||||
background: var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#page-panier .panneau__en-tete h2 {
|
|
||||||
font-weight: 450;
|
|
||||||
font-style: italic;
|
|
||||||
color: var(--couleur-gris);
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
background: var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#page-panier .panier-vide {
|
|
||||||
display: none;
|
|
||||||
flex-basis: 100%;
|
|
||||||
align-content: center;
|
|
||||||
min-height: calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#page-panier .panier-vide p {
|
|
||||||
font-size: 1.25rem;
|
|
||||||
}
|
|
||||||
#page-panier .panier-vide a {
|
|
||||||
display: inline-block;
|
|
||||||
margin-top: var(--espace-m);
|
|
||||||
font-size: initial;
|
|
||||||
}
|
|
||||||
#page-panier[data-contient-articles=false] .panneau {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#page-panier[data-contient-articles=false] .panier-vide {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*# sourceMappingURL=page-panier.css.map */
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/layouts/_panneau-informations-client.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;;AAbJ;AAgBE;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AA9BN;AAkCE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAxCJ;AA2CE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAOR;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKA;EACE;;AAEA;EACE;;AAMR;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;IACE;;EAGF;IACE;;EAEA;IACE;;EAIJ;IACE;;EAGE;IACE;;EAKN;IACE;;;;ACpRN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIF;EAEE;EACA;EACA;EAGA;EAEA;EACA;;AAEA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAMN;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;;AAMR;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAGF;EACE;;AAGE;EACE;IACE;IACA;IACA;;;AAOV;EACE;IACE;;;;AClLN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAKF;EACE;;AAGF;EACE","file":"page-panier.css"}
|
|
||||||
|
|
@ -1,109 +0,0 @@
|
||||||
#page-succes-commande {
|
|
||||||
--page-hauteur-minimale: calc(
|
|
||||||
100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px
|
|
||||||
);
|
|
||||||
--page-marges-bloc-debut: var(--en-tete-hauteur);
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
margin-top: var(--page-marges-bloc-debut);
|
|
||||||
margin-bottom: var(--espace-xl);
|
|
||||||
border-bottom: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
place-items: center;
|
|
||||||
width: min(50rem, 100%);
|
|
||||||
min-height: var(--page-hauteur-minimale);
|
|
||||||
margin: auto;
|
|
||||||
border: 1px solid var(--couleur-noir);
|
|
||||||
border-bottom: initial;
|
|
||||||
font-weight: 500;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__en-tete {
|
|
||||||
width: 100%;
|
|
||||||
padding: var(--espace-m) var(--espace-xl);
|
|
||||||
color: var(--couleur-blanc);
|
|
||||||
background: var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__en-tete h2 {
|
|
||||||
width: fit-content;
|
|
||||||
margin: auto;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: var(--espacement-inter-lettres-etendu-l);
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__textuel {
|
|
||||||
display: flex;
|
|
||||||
flex: 1;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
place-content: center;
|
|
||||||
max-width: 34rem;
|
|
||||||
height: 100%;
|
|
||||||
padding: var(--espace-xl);
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__textuel p + p {
|
|
||||||
margin-top: var(--espace-m);
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
border-top: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande__produit {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 1fr;
|
|
||||||
grid-template-rows: 1fr;
|
|
||||||
border-bottom: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande__produit:only-child,
|
|
||||||
#page-succes-commande .contenu__rappel-commande__produit:last-of-type {
|
|
||||||
border-bottom: initial;
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande__produit__illustratif {
|
|
||||||
border-right: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande__produit__illustratif picture {
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande__produit__illustratif img {
|
|
||||||
aspect-ratio: 1;
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande .detail-produit {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column nowrap;
|
|
||||||
place-content: center;
|
|
||||||
width: 100%;
|
|
||||||
padding: 0 var(--espace-xl);
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row nowrap;
|
|
||||||
column-gap: var(--espace-xl);
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: var(--espace-xs);
|
|
||||||
font-size: var(--espace-l);
|
|
||||||
line-height: var(--hauteur-ligne-moitie);
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix span {
|
|
||||||
min-width: 4rem;
|
|
||||||
font-weight: 600;
|
|
||||||
font-style: initial;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
#page-succes-commande .contenu__rappel-commande .detail-produit__description {
|
|
||||||
margin-bottom: var(--espace-l);
|
|
||||||
line-height: var(--hauteur-ligne-moitie);
|
|
||||||
text-transform: lowercase;
|
|
||||||
}
|
|
||||||
@media (width <= 50rem) {
|
|
||||||
#page-succes-commande .contenu {
|
|
||||||
border-right: initial;
|
|
||||||
border-left: initial;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* # sourceMappingURL=page-succes-commande.css.map */
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-succes-commande.scss"],"names":[],"mappings":"AAEA;EAEE;AAAA;AAAA;EAKA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIF;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAMR;EACE;IACE;IACA","file":"page-succes-commande.css"}
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
#page-succes-commande{--page-hauteur-minimale:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px);--page-marges-bloc-debut:var(--en-tete-hauteur);margin-top:var(--page-marges-bloc-debut);margin-bottom:var(--espace-xl);border-bottom:1px solid var(--couleur-noir);flex-flow:column;display:flex}#page-succes-commande .contenu{width:min(50rem,100%);min-height:var(--page-hauteur-minimale);border:1px solid var(--couleur-noir);border-bottom:initial;flex-flow:column;place-items:center;margin:auto;font-style:italic;font-weight:500;display:flex}#page-succes-commande .contenu__en-tete{width:100%;padding:var(--espace-m) var(--espace-xl);color:var(--couleur-blanc);background:var(--couleur-noir)}#page-succes-commande .contenu__en-tete h2{text-transform:uppercase;width:fit-content;letter-spacing:var(--espacement-inter-lettres-etendu-l);margin:auto}#page-succes-commande .contenu__textuel{max-width:34rem;height:100%;padding:var(--espace-xl);flex-flow:column;flex:1;place-content:center;font-style:normal;display:flex}#page-succes-commande .contenu__textuel p+p{margin-top:var(--espace-m)}#page-succes-commande .contenu__rappel-commande{border-top:1px solid var(--couleur-noir);flex-flow:column;display:flex}#page-succes-commande .contenu__rappel-commande__produit{border-bottom:1px solid var(--couleur-noir);grid-template-rows:1fr;grid-template-columns:1fr 1fr;display:grid}#page-succes-commande .contenu__rappel-commande__produit:only-child,#page-succes-commande .contenu__rappel-commande__produit:last-of-type{border-bottom:initial}#page-succes-commande .contenu__rappel-commande__produit__illustratif{border-right:1px solid var(--couleur-noir)}#page-succes-commande .contenu__rappel-commande__produit__illustratif picture{overflow:hidden}#page-succes-commande .contenu__rappel-commande__produit__illustratif img{aspect-ratio:1;height:auto}#page-succes-commande .contenu__rappel-commande .detail-produit{width:100%;padding:0 var(--espace-xl);flex-flow:column;place-content:center;font-style:italic;display:flex}#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix{column-gap:var(--espace-xl);margin-bottom:var(--espace-xs);font-size:var(--espace-l);line-height:var(--hauteur-ligne-moitie);flex-flow:row;justify-content:space-between;display:flex}#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix span{min-width:4rem;font-weight:600;font-style:initial;text-align:right}#page-succes-commande .contenu__rappel-commande .detail-produit__description{margin-bottom:var(--espace-l);line-height:var(--hauteur-ligne-moitie);text-transform:lowercase}@media (width<=50rem){#page-succes-commande .contenu{border-right:initial;border-left:initial}}
|
|
||||||
|
|
@ -17,6 +17,7 @@ use Psl\Option\Option;
|
||||||
use stdClass;
|
use stdClass;
|
||||||
use Timber\Timber;
|
use Timber\Timber;
|
||||||
use WC_Product;
|
use WC_Product;
|
||||||
|
use WP_Term;
|
||||||
|
|
||||||
use function add_action;
|
use function add_action;
|
||||||
use function assert;
|
use function assert;
|
||||||
|
|
@ -64,8 +65,8 @@ $product_tags = $raw_product->get_tag_ids()
|
||||||
id : $id,
|
id : $id,
|
||||||
taxonomy: 'product_tag',
|
taxonomy: 'product_tag',
|
||||||
)))
|
)))
|
||||||
|> (static fn(/** @var list<Option<WC_Term>> */ $tags) => Arr::reject($tags, static fn($tag) => $tag->isNone()))
|
|> (static fn(/** @var list<Option<WP_Term>> */ $tags) => Arr::reject($tags, static fn($tag) => $tag->isNone()))
|
||||||
|> (static fn(/** @var list<Option<WC_Term>> */ $tags) => Arr::map($tags, static fn($tag) => $tag->unwrap()));
|
|> (static fn(/** @var list<Option<WP_Term>> */ $tags) => Arr::map($tags, static fn($tag) => $tag->unwrap()));
|
||||||
$tags = get_terms(['taxonomy' => 'product_tag', 'hide_empty' => true]);
|
$tags = get_terms(['taxonomy' => 'product_tag', 'hide_empty' => true]);
|
||||||
|
|
||||||
// Injecte les états initiaux des données du Produit sous forme de JSON dans le contexte.
|
// Injecte les états initiaux des données du Produit sous forme de JSON dans le contexte.
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* * Bouton du compte de Produits dans le Panier. */
|
/* Bouton du compte de Produits dans le Panier. */
|
||||||
.compte-panier {
|
.compte-panier {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row nowrap;
|
flex-flow: row nowrap;
|
||||||
|
|
@ -123,13 +123,7 @@
|
||||||
place-items: center;
|
place-items: center;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
&[disabled] {
|
/* TODO: Utiliser un background sur .compte-panier pour varier l'apparence du bouton */
|
||||||
background: var(--arriere-plan-points);
|
|
||||||
|
|
||||||
a:hover, a:active, a:focus-within {
|
|
||||||
border: 1px solid var(--couleur-noir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
a {
|
||||||
padding-block: var(--espace-2xs);
|
padding-block: var(--espace-2xs);
|
||||||
|
|
@ -141,17 +135,22 @@
|
||||||
background: var(--couleur-gris-fond);
|
background: var(--couleur-gris-fond);
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover, &:focus-within {
|
&:focus-visible, &:focus-within {
|
||||||
|
background: var(--arriere-plan-points);
|
||||||
|
outline-color: var(--couleur-noir);
|
||||||
|
}
|
||||||
|
&:active {
|
||||||
color: var(--couleur-blanc);
|
color: var(--couleur-blanc);
|
||||||
background: var(--couleur-gris-fonce-fond);
|
background: var(--arriere-plan-points);
|
||||||
}
|
}
|
||||||
|
|
||||||
&:active {
|
@media (hover: hover) {
|
||||||
color: var(--couleur-noir);
|
&:hover {
|
||||||
background: var(--arriere-plan-points);
|
background: var(--arriere-plan-points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.conteneur {
|
.conteneur {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
import { Console, Layer } from "effect";
|
||||||
|
import { FetchHttpClient } from "effect/unstable/http";
|
||||||
|
import { OtlpSerialization, OtlpTracer } from "effect/unstable/observability";
|
||||||
|
|
||||||
|
const OtlpTracingLayer = OtlpTracer.layer({
|
||||||
|
resource: {
|
||||||
|
attributes: {
|
||||||
|
"deployment.environment": "staging",
|
||||||
|
},
|
||||||
|
serviceName: "haiku-atelier",
|
||||||
|
serviceVersion: "1.0.0",
|
||||||
|
},
|
||||||
|
maxBatchSize: 1,
|
||||||
|
exportInterval: "1 seconds",
|
||||||
|
url: "https://jaeger-http.gcch.local/v1/traces",
|
||||||
|
});
|
||||||
|
|
||||||
|
const ObservabilityLayer = OtlpTracingLayer.pipe(
|
||||||
|
Layer.provide(OtlpSerialization.layerJson),
|
||||||
|
Layer.provide(FetchHttpClient.layer),
|
||||||
|
Layer.tapError(Console.error),
|
||||||
|
);
|
||||||
|
|
||||||
|
export { ObservabilityLayer };
|
||||||
|
|
@ -30,10 +30,10 @@ class Product extends Schema.Class<Product>("Product")({
|
||||||
grouped_products: Schema.Unknown,
|
grouped_products: Schema.Unknown,
|
||||||
has_options: Schema.Boolean,
|
has_options: Schema.Boolean,
|
||||||
id: Schema.Int,
|
id: Schema.Int,
|
||||||
// NOTE: Non-standard, injecté dans la Réponse.
|
// NOTE: Non-standard, injecté dans la Réponse. Optionelle pour éviter une erreur si une image est absente.
|
||||||
image_repos: Schema.String,
|
image_repos: Schema.String.pipe(Schema.optional),
|
||||||
// NOTE: Non-standard, injecté dans la Réponse.
|
// NOTE: Non-standard, injecté dans la Réponse. Optionelle pour éviter une erreur si une image est absente.
|
||||||
image_survol: Schema.String,
|
image_survol: Schema.String.pipe(Schema.optional),
|
||||||
images: Schema.Unknown,
|
images: Schema.Unknown,
|
||||||
low_stock_amount: Schema.Union([Schema.Number, Schema.Null]),
|
low_stock_amount: Schema.Union([Schema.Number, Schema.Null]),
|
||||||
menu_order: Schema.Int,
|
menu_order: Schema.Int,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { Console, Layer, ManagedRuntime, pipe } from "effect";
|
import { Console, Layer, ManagedRuntime, pipe } from "effect";
|
||||||
|
|
||||||
import { APIClient } from "../../scripts-effect/lib/api.ts";
|
import { APIClient } from "../../scripts-effect/lib/api.ts";
|
||||||
|
import { ObservabilityLayer } from "../../scripts-effect/lib/observability.ts";
|
||||||
import ShopPageDOM from "./service-dom.ts";
|
import ShopPageDOM from "./service-dom.ts";
|
||||||
import ShopPageElements from "./service-elements.ts";
|
import ShopPageElements from "./service-elements.ts";
|
||||||
import ShopPageMessages from "./service-messages.ts";
|
import ShopPageMessages from "./service-messages.ts";
|
||||||
|
|
@ -11,6 +12,7 @@ const ShopPageRuntime = ManagedRuntime.make(
|
||||||
Layer.provideMerge(ShopPageMessages.Live),
|
Layer.provideMerge(ShopPageMessages.Live),
|
||||||
Layer.provideMerge(ShopPageElements.Live),
|
Layer.provideMerge(ShopPageElements.Live),
|
||||||
Layer.provide(APIClient.Live),
|
Layer.provide(APIClient.Live),
|
||||||
|
Layer.provideMerge(ObservabilityLayer),
|
||||||
Layer.tapError(error => Console.error("ProductPageRuntime", "Impossible de créer le Layer :", error.message)),
|
Layer.tapError(error => Console.error("ProductPageRuntime", "Impossible de créer le Layer :", error.message)),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,8 @@
|
||||||
import {
|
import { Array as FxArray, Context, Effect, Layer, Option, pipe, Ref, Schema, SchemaIssue, Stream, SubscriptionRef } from "effect";
|
||||||
Array as FxArray,
|
|
||||||
Context,
|
|
||||||
Effect,
|
|
||||||
Layer,
|
|
||||||
Option,
|
|
||||||
pipe,
|
|
||||||
Ref,
|
|
||||||
Schema,
|
|
||||||
SchemaIssue,
|
|
||||||
Stream,
|
|
||||||
SubscriptionRef,
|
|
||||||
} from "effect";
|
|
||||||
import { SchemaError } from "effect/Schema";
|
import { SchemaError } from "effect/Schema";
|
||||||
import html from "html-template-tag";
|
import html from "html-template-tag";
|
||||||
|
|
||||||
|
import { BrowserRuntime } from "@effect/platform-browser";
|
||||||
import { APIClient } from "../../scripts-effect/lib/api.ts";
|
import { APIClient } from "../../scripts-effect/lib/api.ts";
|
||||||
import { setLoadingState } from "../../scripts-effect/lib/elements.ts";
|
import { setLoadingState } from "../../scripts-effect/lib/elements.ts";
|
||||||
import { GetProducts, Product } from "../../scripts-effect/schemas/api.ts";
|
import { GetProducts, Product } from "../../scripts-effect/schemas/api.ts";
|
||||||
|
|
@ -47,27 +37,24 @@ class InvalidShopPageStateError
|
||||||
class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/ShopPageDOM", {
|
class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/ShopPageDOM", {
|
||||||
make: Effect.gen(function*() {
|
make: Effect.gen(function*() {
|
||||||
const { PageStatesRawJson, ProductsGrid, ShowMoreButton } = yield* ShopPageElements;
|
const { PageStatesRawJson, ProductsGrid, ShowMoreButton } = yield* ShopPageElements;
|
||||||
const { ShowMoreButtonText } = yield* ShopPageMessages;
|
const { ShowMoreButtonText, PageNumber } = yield* ShopPageMessages;
|
||||||
const API = yield* APIClient;
|
const API = yield* APIClient;
|
||||||
|
|
||||||
const { authString, nonce } = yield* pipe(
|
// Récupère la valeur de `Nonce` dans le DOM de la page.
|
||||||
|
const { nonce } = yield* pipe(
|
||||||
PageStatesRawJson.textContent,
|
PageStatesRawJson.textContent,
|
||||||
(textContent: string) =>
|
(textContent: string) =>
|
||||||
Schema.decodeUnknownEffect(Schema.fromJsonString(PageStates))(textContent, { errors: "all" }),
|
Schema.decodeUnknownEffect(Schema.fromJsonString(PageStates))(textContent, { errors: "all" }),
|
||||||
Effect.mapError(InvalidShopPageStateError.fromSchemaError),
|
Effect.mapError(error => InvalidShopPageStateError.fromSchemaError(error)),
|
||||||
);
|
);
|
||||||
|
|
||||||
/** ID de la Catégorie des Produits de la Page, si la Page courante est une Archive. */
|
/** ID de la Catégorie des Produits de la Page, si la Page courante est une Archive. */
|
||||||
const ProductsCategoryId = yield* pipe(
|
const ProductsCategoryId = yield* pipe(
|
||||||
ProductsGrid.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS),
|
Option.fromNullishOr(ProductsGrid.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS)),
|
||||||
Number,
|
Option.map(categoryId => Number(categoryId)),
|
||||||
Option.fromNullishOr,
|
categoryId => Ref.make(categoryId),
|
||||||
Ref.make,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO: Créer une SubscriptionRef mettant à jour le DOM au changement de valeur.
|
|
||||||
const PageNumber = yield* Ref.make(1);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Créé le `DOM` d'une Carte de Produit sous forme de `<article>`.
|
* Créé le `DOM` d'une Carte de Produit sous forme de `<article>`.
|
||||||
*/
|
*/
|
||||||
|
|
@ -118,7 +105,7 @@ class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/S
|
||||||
|
|
||||||
const onMoreProductsWantedHandler = Effect.fn("onMoreProductsWantedHandler")(function*() {
|
const onMoreProductsWantedHandler = Effect.fn("onMoreProductsWantedHandler")(function*() {
|
||||||
/** Le numéro de page souhaitée. */
|
/** Le numéro de page souhaitée. */
|
||||||
const newPageNumber = yield* Ref.updateAndGet(PageNumber, pageNumber => pageNumber + 1);
|
const newPageNumber = yield* SubscriptionRef.updateAndGet(PageNumber, pageNumber => pageNumber + 1);
|
||||||
/** L'ID de la Catégorie de Produits affichée dans la page si elle existe. */
|
/** L'ID de la Catégorie de Produits affichée dans la page si elle existe. */
|
||||||
const categoryId = pipe(yield* Ref.get(ProductsCategoryId), Option.getOrUndefined);
|
const categoryId = pipe(yield* Ref.get(ProductsCategoryId), Option.getOrUndefined);
|
||||||
|
|
||||||
|
|
@ -133,6 +120,7 @@ class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/S
|
||||||
yield* setLoadingState(ShowMoreButton, true);
|
yield* setLoadingState(ShowMoreButton, true);
|
||||||
yield* SubscriptionRef.set(ShowMoreButtonText, "Getting Products...");
|
yield* SubscriptionRef.set(ShowMoreButtonText, "Getting Products...");
|
||||||
|
|
||||||
|
// TODO: Faire une gestion des Erreurs.
|
||||||
const newProducts = yield* API.GetProducts(nonce, requestBody);
|
const newProducts = yield* API.GetProducts(nonce, requestBody);
|
||||||
|
|
||||||
// Rétablis le texte du Bouton et réactive les interactions.
|
// Rétablis le texte du Bouton et réactive les interactions.
|
||||||
|
|
@ -146,12 +134,12 @@ class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/S
|
||||||
const newProductsFragment = createNewPageDOM(newProducts);
|
const newProductsFragment = createNewPageDOM(newProducts);
|
||||||
ProductsGrid.append(newProductsFragment);
|
ProductsGrid.append(newProductsFragment);
|
||||||
ProductsGrid.setAttribute(ATTRIBUT_PAGE, String(newPageNumber));
|
ProductsGrid.setAttribute(ATTRIBUT_PAGE, String(newPageNumber));
|
||||||
});
|
}, Effect.withSpan("lol"));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise l'écouteur d'événements de clic sur le bouton de chargement d'une nouvelle page de Produits (« Show more »).
|
* Initialise l'écouteur d'événements de clic sur le bouton de chargement d'une nouvelle page de Produits (« Show more »).
|
||||||
*/
|
*/
|
||||||
const initMoreProductsOnButtonClick = Effect.fn("initMoreProductsOnButtonClick")(function*() {
|
const initLoadMoreProductsOnButtonClick = Effect.fn("initLoadMoreProductsOnButtonClick")(function*() {
|
||||||
return yield* pipe(
|
return yield* pipe(
|
||||||
Stream.fromEventListener(ShowMoreButton, "click"),
|
Stream.fromEventListener(ShowMoreButton, "click"),
|
||||||
Stream.tap(onMoreProductsWantedHandler),
|
Stream.tap(onMoreProductsWantedHandler),
|
||||||
|
|
@ -161,7 +149,7 @@ class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/S
|
||||||
|
|
||||||
return {
|
return {
|
||||||
ProductsCategoryId,
|
ProductsCategoryId,
|
||||||
initMoreProductsOnButtonClick,
|
initLoadMoreProductsOnButtonClick,
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
}) {
|
}) {
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,15 @@
|
||||||
import { Context, Effect, Layer, pipe, Stream, SubscriptionRef } from "effect";
|
import { Context, Effect, Layer, pipe, Stream, SubscriptionRef } from "effect";
|
||||||
|
|
||||||
|
import { ATTRIBUT_PAGE } from "../constantes/dom.ts";
|
||||||
import ShopPageElements from "./service-elements.ts";
|
import ShopPageElements from "./service-elements.ts";
|
||||||
|
|
||||||
class ShopPageMessages extends Context.Service<ShopPageMessages>()("haikuatelier.fr/Shop/Messages", {
|
class ShopPageMessages extends Context.Service<ShopPageMessages>()("haikuatelier.fr/Shop/Messages", {
|
||||||
make: Effect.gen(function*() {
|
make: Effect.gen(function*() {
|
||||||
const { ShowMoreButton } = yield* ShopPageElements;
|
const { ShowMoreButton, ProductsGrid } = yield* ShopPageElements;
|
||||||
|
|
||||||
const ShowMoreButtonText = yield* SubscriptionRef.make("Show more");
|
const ShowMoreButtonText = yield* SubscriptionRef.make("Show more");
|
||||||
// Const ShowMoreErrorText = yield* SubscriptionRef.make<Option.Option<string>>(Option.none());
|
// Const ShowMoreErrorText = yield* SubscriptionRef.make<Option.Option<string>>(Option.none());
|
||||||
|
const PageNumber = yield* SubscriptionRef.make(Number(ProductsGrid.getAttribute(ATTRIBUT_PAGE) ?? "1"));
|
||||||
|
|
||||||
const initShowMoreButtonUpdates = Effect.fn("initShowMoreButtonUpdates")(function*() {
|
const initShowMoreButtonUpdates = Effect.fn("initShowMoreButtonUpdates")(function*() {
|
||||||
return yield* pipe(
|
return yield* pipe(
|
||||||
|
|
@ -20,7 +22,18 @@ class ShopPageMessages extends Context.Service<ShopPageMessages>()("haikuatelier
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
return { ShowMoreButtonText, initShowMoreButtonUpdates };
|
const initPageNumberUpdates = Effect.fn("initPageNumberUpdates")(function*() {
|
||||||
|
return yield* pipe(
|
||||||
|
SubscriptionRef.changes(PageNumber),
|
||||||
|
Stream.tap(newPageNumber => {
|
||||||
|
ProductsGrid.setAttribute(ATTRIBUT_PAGE, String(newPageNumber));
|
||||||
|
return Effect.succeed(newPageNumber);
|
||||||
|
}),
|
||||||
|
Stream.runDrain,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
return { PageNumber, ShowMoreButtonText, initShowMoreButtonUpdates, initPageNumberUpdates };
|
||||||
}),
|
}),
|
||||||
}) {
|
}) {
|
||||||
static readonly Live = Layer.effect(this, this.make);
|
static readonly Live = Layer.effect(this, this.make);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { Console, Layer, ManagedRuntime, pipe } from "effect";
|
import { Console, Layer, ManagedRuntime, pipe } from "effect";
|
||||||
|
|
||||||
import { APIClient } from "../../scripts-effect/lib/api.ts";
|
import { APIClient } from "../../scripts-effect/lib/api.ts";
|
||||||
|
import { ObservabilityLayer } from "../../scripts-effect/lib/observability.ts";
|
||||||
import ProductPageDOM from "./service-dom.ts";
|
import ProductPageDOM from "./service-dom.ts";
|
||||||
import ProductPageElements from "./service-elements.ts";
|
import ProductPageElements from "./service-elements.ts";
|
||||||
import ProductPageMessages from "./service-messages.ts";
|
import ProductPageMessages from "./service-messages.ts";
|
||||||
|
|
@ -9,8 +10,9 @@ const ProductPageRuntime = ManagedRuntime.make(
|
||||||
pipe(
|
pipe(
|
||||||
ProductPageDOM.Live,
|
ProductPageDOM.Live,
|
||||||
Layer.provideMerge(ProductPageMessages.Live),
|
Layer.provideMerge(ProductPageMessages.Live),
|
||||||
Layer.provide(ProductPageElements.Live),
|
Layer.provideMerge(ProductPageElements.Live),
|
||||||
Layer.provide(APIClient.Live),
|
Layer.provide(APIClient.Live),
|
||||||
|
Layer.provideMerge(ObservabilityLayer),
|
||||||
Layer.tapError(error => Console.error("ProductPageRuntime", "Impossible de créer le Layer :", error)),
|
Layer.tapError(error => Console.error("ProductPageRuntime", "Impossible de créer le Layer :", error)),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,7 @@ import { Array as FxArray, Context, Effect, HashMap, Layer, Option, pipe } from
|
||||||
import type { DetailEnsemble } from "./types.d.ts";
|
import type { DetailEnsemble } from "./types.d.ts";
|
||||||
|
|
||||||
import { getAllSelectorFromDocument, getFirstSelectorFromDocument } from "../../scripts-effect/lib/dom.ts";
|
import { getAllSelectorFromDocument, getFirstSelectorFromDocument } from "../../scripts-effect/lib/dom.ts";
|
||||||
import {
|
import { ATTRIBUT_ARIA_CONTROLS, DOM_BOUTON_AJOUT_PANIER, DOM_BOUTONS_ACCORDEON, DOM_CONTENUS_ACCORDEON, DOM_PRIX_PRODUIT } from "../constantes/dom.ts";
|
||||||
ATTRIBUT_ARIA_CONTROLS,
|
|
||||||
DOM_BOUTON_AJOUT_PANIER,
|
|
||||||
DOM_BOUTONS_ACCORDEON,
|
|
||||||
DOM_CONTENUS_ACCORDEON,
|
|
||||||
DOM_PRIX_PRODUIT,
|
|
||||||
} from "../constantes/dom.ts";
|
|
||||||
import { IncoherentDOMError } from "./errors.ts";
|
import { IncoherentDOMError } from "./errors.ts";
|
||||||
|
|
||||||
class ProductPageElements
|
class ProductPageElements
|
||||||
|
|
@ -25,6 +19,8 @@ class ProductPageElements
|
||||||
|
|
||||||
const PageStatesRawJson = yield* getFirstSelectorFromDocument<HTMLScriptElement>("#page-states");
|
const PageStatesRawJson = yield* getFirstSelectorFromDocument<HTMLScriptElement>("#page-states");
|
||||||
|
|
||||||
|
const ContextRawJson = yield* getFirstSelectorFromDocument<HTMLScriptElement>("#product-json");
|
||||||
|
|
||||||
const ProductPrice = yield* getFirstSelectorFromDocument<HTMLParagraphElement>(DOM_PRIX_PRODUIT);
|
const ProductPrice = yield* getFirstSelectorFromDocument<HTMLParagraphElement>(DOM_PRIX_PRODUIT);
|
||||||
|
|
||||||
const VariationChoiceForm = yield* getFirstSelectorFromDocument<HTMLFormElement>("#variation-choice");
|
const VariationChoiceForm = yield* getFirstSelectorFromDocument<HTMLFormElement>("#variation-choice");
|
||||||
|
|
@ -51,6 +47,7 @@ class ProductPageElements
|
||||||
|
|
||||||
return {
|
return {
|
||||||
AddToCartButton,
|
AddToCartButton,
|
||||||
|
ContextRawJson,
|
||||||
Details,
|
Details,
|
||||||
DetailsButtons,
|
DetailsButtons,
|
||||||
DetailsContents,
|
DetailsContents,
|
||||||
|
|
|
||||||
|
|
@ -2,21 +2,32 @@
|
||||||
* Scripts pour les fonctionnalités de la page Boutique.
|
* Scripts pour les fonctionnalités de la page Boutique.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Console, Effect } from "effect";
|
import { Console, Effect, pipe } from "effect";
|
||||||
import ShopPageRuntime from "./page-boutique/runtime.ts";
|
import ShopPageRuntime from "./page-boutique/runtime.ts";
|
||||||
import ShopPageDOM from "./page-boutique/service-dom.ts";
|
import ShopPageDOM from "./page-boutique/service-dom.ts";
|
||||||
import ShopPageElements from "./page-boutique/service-elements.ts";
|
|
||||||
import ShopPageMessages from "./page-boutique/service-messages.ts";
|
import ShopPageMessages from "./page-boutique/service-messages.ts";
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", (): void => {
|
// TODO: Implémenter l'Observabilité.
|
||||||
// initialisePageBoutique();
|
|
||||||
ShopPageRuntime.runFork(Effect.gen(function*() {
|
|
||||||
const Elements = yield* ShopPageElements;
|
|
||||||
const DOM = yield* ShopPageDOM;
|
|
||||||
const Messages = yield* ShopPageMessages;
|
|
||||||
|
|
||||||
yield* Effect.all([DOM.initMoreProductsOnButtonClick(), Messages.initShowMoreButtonUpdates()], {
|
document.addEventListener("DOMContentLoaded", (): void => {
|
||||||
|
const program = Effect.gen(function*() {
|
||||||
|
const { initLoadMoreProductsOnButtonClick } = yield* ShopPageDOM;
|
||||||
|
const { initShowMoreButtonUpdates, initPageNumberUpdates } = yield* ShopPageMessages;
|
||||||
|
|
||||||
|
yield* pipe(
|
||||||
|
Effect.all([
|
||||||
|
// Initialise le chargement d'une nouvelle page de Produits au clic sur le bouton « Show more ».
|
||||||
|
initLoadMoreProductsOnButtonClick(),
|
||||||
|
// Initialise la mise à jour du texte du bouton « Show more » à la mise à jour de sa référence.
|
||||||
|
initShowMoreButtonUpdates(),
|
||||||
|
// Initialise la mise à jour du numéro de page dans le DOM à la mise à jour de sa référence.
|
||||||
|
initPageNumberUpdates(),
|
||||||
|
], {
|
||||||
concurrency: "unbounded",
|
concurrency: "unbounded",
|
||||||
}).pipe(Effect.tapCause(Console.error));
|
}),
|
||||||
}));
|
Effect.tapCause(Console.error),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
ShopPageRuntime.runFork(program);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
// Scripts pour la Page Produit
|
// Scripts pour la Page Produit
|
||||||
|
|
||||||
import { Cause, Console, Effect } from "effect";
|
import { Cause, Console, Effect, pipe } from "effect";
|
||||||
import ProductPageRuntime from "./page-produit/runtime.ts";
|
import ProductPageRuntime from "./page-produit/runtime.ts";
|
||||||
import ProductPageDOM from "./page-produit/service-dom.ts";
|
import ProductPageDOM from "./page-produit/service-dom.ts";
|
||||||
import ProductPageMessages from "./page-produit/service-messages.ts";
|
import ProductPageMessages from "./page-produit/service-messages.ts";
|
||||||
|
|
@ -10,26 +10,22 @@ document.addEventListener("DOMContentLoaded", (): void => {
|
||||||
const DOM = yield* ProductPageDOM;
|
const DOM = yield* ProductPageDOM;
|
||||||
const Messages = yield* ProductPageMessages;
|
const Messages = yield* ProductPageMessages;
|
||||||
|
|
||||||
const effects = Effect.all(
|
// yield* Effect.forkChild(Effect.gen(function*() {
|
||||||
[
|
// yield* Effect.log(JSON.parse(Elements.ContextRawJson.textContent));
|
||||||
|
// }));
|
||||||
|
|
||||||
|
yield* pipe(
|
||||||
|
Effect.all([
|
||||||
DOM.initAddToCartButtonInitialState(),
|
DOM.initAddToCartButtonInitialState(),
|
||||||
DOM.initAddToCartButtonUpdates(),
|
DOM.initAddToCartButtonUpdates(),
|
||||||
DOM.initAddToCartButtonClicks(),
|
DOM.initAddToCartButtonClicks(),
|
||||||
DOM.initDetailInteractions(),
|
DOM.initDetailInteractions(),
|
||||||
DOM.initPriceUpdatesOnVariationChange(),
|
DOM.initPriceUpdatesOnVariationChange(),
|
||||||
Messages.initAddToCartButtonUpdates(),
|
Messages.initAddToCartButtonUpdates(),
|
||||||
],
|
], { concurrency: "unbounded" }),
|
||||||
{
|
Effect.tapCause(cause => Console.error(Cause.pretty(cause))),
|
||||||
concurrency: "unbounded",
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
|
|
||||||
yield* effects.pipe(Effect.tapCause(cause => Console.error(Cause.pretty(cause))));
|
|
||||||
}).pipe(ProductPageRuntime.runFork);
|
}).pipe(ProductPageRuntime.runFork);
|
||||||
|
|
||||||
document.querySelector("#cart-error button").addEventListener("click", (): void => {
|
|
||||||
document.querySelector("#cart-error").close();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// const ajouteProduitAuPanier = (event: MouseEvent): void => {
|
// const ajouteProduitAuPanier = (event: MouseEvent): void => {
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,14 @@
|
||||||
<header id="en-tete">
|
<header id="en-tete">
|
||||||
<div class="logo">
|
<div class="logo">
|
||||||
|
<a
|
||||||
|
aria-label="Go to the Shop" href="/shop"
|
||||||
|
title="Go to the Shop"
|
||||||
|
>
|
||||||
<img
|
<img
|
||||||
alt="Haiku Atelier's Logo" decoding="async"
|
alt="Haiku Atelier's Logo" height="77"
|
||||||
height="77" loading="eager"
|
|
||||||
src="{{ site.theme.link }}/assets/img/logos/logo-v2-text.svg" width="307"
|
src="{{ site.theme.link }}/assets/img/logos/logo-v2-text.svg" width="307"
|
||||||
/>
|
/>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{# TODO: Utiliser un Menu WordPress ? #}
|
{# TODO: Utiliser un Menu WordPress ? #}
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 9 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 398 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 350 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 285 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 278 KiB |
|
Before Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 262 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 251 KiB |
|
Before Width: | Height: | Size: 9 KiB |
|
Before Width: | Height: | Size: 306 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 323 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 1,001 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 457 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |