Merge branch 'develop' into trunk
This commit is contained in:
commit
80294115f6
49 changed files with 2314 additions and 3532 deletions
|
|
@ -4,8 +4,13 @@
|
|||
"stylelint-config-sass-guidelines",
|
||||
"stylelint-config-idiomatic-order"
|
||||
],
|
||||
"plugins": ["stylelint-scss"],
|
||||
"files": ["**/*.css", "**/*.scss"],
|
||||
"plugins": [
|
||||
"stylelint-scss"
|
||||
],
|
||||
"files": [
|
||||
"**/*.css",
|
||||
"**/*.scss"
|
||||
],
|
||||
"ignoreFiles": [
|
||||
"**/vendor/*.css",
|
||||
"**/vendor/**/*.css",
|
||||
|
|
@ -18,15 +23,12 @@
|
|||
],
|
||||
"customSyntax": "postcss-scss",
|
||||
"rules": {
|
||||
"indentation": 4,
|
||||
"string-quotes": "double",
|
||||
"declaration-property-value-no-unknown": true,
|
||||
"selector-max-id": null,
|
||||
"color-no-invalid-hex": true,
|
||||
"order/properties-alphabetical-order": null,
|
||||
"max-nesting-depth": 5,
|
||||
"selector-max-compound-selectors": 5,
|
||||
"declaration-colon-space-after": "always-single-line",
|
||||
"function-parentheses-space-inside": "never-single-line",
|
||||
"declaration-colon-newline-after": null,
|
||||
"value-list-comma-newline-after": null,
|
||||
"scss/double-slash-comment-empty-line-before": [
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ class Authenticate extends Middleware
|
|||
}
|
||||
return route('login');
|
||||
}
|
||||
abort(401);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class RedirectIfAuthenticated
|
||||
|
|
@ -24,10 +23,10 @@ class RedirectIfAuthenticated
|
|||
$guards = empty($guards) ? [null] : $guards;
|
||||
|
||||
foreach ($guards as $guard) {
|
||||
if (Auth::guard($guard)->check()) {
|
||||
if (auth($guard)->check()) {
|
||||
switch ($guard) {
|
||||
case 'frontend':
|
||||
return \redirect()->route('home');
|
||||
return \redirect()->route('fo.homepage');
|
||||
case 'backend':
|
||||
if (!$request->routeIs('bo.*')) {
|
||||
continue;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class SecureHeaders
|
|||
$jsDev = config('app.debug') ? "'unsafe-eval' 'unsafe-inline'" : "'nonce-{$nonce}' 'strict-dynamic'";
|
||||
$scheme = config('app.env') === 'local' ? 'http' : 'https';
|
||||
$reportUri = Route::has('cspReportUri') ?
|
||||
\sprintf(' report-uri %s ;', \parse_url(route('cspReportUri'), \PHP_URL_PATH)) : '';
|
||||
\sprintf(' report-uri %s ;', \parse_url(route('cspReportUri'), \PHP_URL_PATH)) : '';
|
||||
$this->removeUnwantedHeaders($this->unwantedHeaderList);
|
||||
$response = $next($request);
|
||||
$response->headers->set('Referrer-Policy', 'no-referrer-when-downgrade');
|
||||
|
|
@ -51,23 +51,17 @@ class SecureHeaders
|
|||
"default-src 'none';",
|
||||
"manifest-src 'self';",
|
||||
// * CKEDITOR Specific https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/csp.html
|
||||
'connect-src ' . implode(" ", [
|
||||
'\'self\'',
|
||||
'https://yl.s-web.fr',
|
||||
'https://api-adresse.data.gouv.fr',
|
||||
]) . ' blob:;',
|
||||
"connect-src 'self' blob:;",
|
||||
"img-src * data: blob:;",
|
||||
"frame-src 'self' data: " . implode(' ', [
|
||||
'frame-src ' . implode(' ', [
|
||||
'https://www.google.com/recaptcha/',
|
||||
'https://recaptcha.google.com/recaptcha/',
|
||||
'https://www.google.com/maps/',
|
||||
'https://www.youtube.com'
|
||||
'https://www.google.com/maps/'
|
||||
]) . ';',
|
||||
"font-src 'self' data: https://fonts.gstatic.com;",
|
||||
// ! Using CKEditor will must have unsafe-inline style
|
||||
// phpcs:ignore Generic.Files.LineLength.TooLong
|
||||
"style-src 'self' 'unsafe-inline' " . \implode(' ', [
|
||||
"https://unpkg.com",
|
||||
'https://cdnjs.cloudflare.com',
|
||||
// * File Manager
|
||||
'https://fonts.googleapis.com',
|
||||
|
|
@ -83,6 +77,7 @@ class SecureHeaders
|
|||
'https://unpkg.com',
|
||||
'https://www.googletagmanager.com',
|
||||
'https://cdnjs.cloudflare.com',
|
||||
"$scheme://www.google-analytics.com",
|
||||
]) . ';'
|
||||
];
|
||||
|
||||
|
|
@ -100,7 +95,7 @@ class SecureHeaders
|
|||
* @param array $headerList
|
||||
* @return void
|
||||
*/
|
||||
private function removeUnwantedHeaders(array $headerList)
|
||||
private function removeUnwantedHeaders(array $headerList): void
|
||||
{
|
||||
foreach ($headerList as $header) {
|
||||
header_remove($header);
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class TrustProxies extends Middleware
|
|||
* @var integer
|
||||
*/
|
||||
protected $headers =
|
||||
Request::HEADER_X_FORWARDED_FOR |
|
||||
Request::HEADER_X_FORWARDED_FOR |
|
||||
Request::HEADER_X_FORWARDED_HOST |
|
||||
Request::HEADER_X_FORWARDED_PORT |
|
||||
Request::HEADER_X_FORWARDED_PROTO |
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
|
||||
namespace App\Lib;
|
||||
namespace App\Lib\Helpers;
|
||||
|
||||
use Illuminate\Container\Container;
|
||||
use Illuminate\Pagination\LengthAwarePaginator;
|
||||
|
|
|
|||
|
|
@ -132,7 +132,10 @@ class Recipe extends Model
|
|||
*/
|
||||
public function getCookingTimeLabelAttribute(): string
|
||||
{
|
||||
return self::convertMinutesToHourMinutes($this->cooking_time);
|
||||
if ($this->cooking_time) {
|
||||
return self::convertMinutesToHourMinutes($this->cooking_time);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"type": "project",
|
||||
"description": "Site de la marque Lionor",
|
||||
"require": {
|
||||
"php": "^8.1",
|
||||
"php": "^8.2",
|
||||
"axlon/laravel-postal-code-validation": "^3.3",
|
||||
"diglactic/laravel-breadcrumbs": "^8.1.1",
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
|
|
|
|||
5058
package-lock.json
generated
5058
package-lock.json
generated
File diff suppressed because it is too large
Load diff
69
package.json
69
package.json
|
|
@ -12,63 +12,50 @@
|
|||
"stylelint-ci": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 '**/resources/**/*.scss' -f json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/types": "^7.21.2",
|
||||
"@fancyapps/ui": "^5.0.19",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.4.0",
|
||||
"@fortawesome/free-brands-svg-icons": "^6.4.0",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.4.0",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.4.0",
|
||||
"@fancyapps/ui": "^5.0.24",
|
||||
"@fortawesome/fontawesome-svg-core": "latest",
|
||||
"@fortawesome/free-brands-svg-icons": "latest",
|
||||
"@fortawesome/free-regular-svg-icons": "latest",
|
||||
"@fortawesome/free-solid-svg-icons": "latest",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.3",
|
||||
"@ldc-web/cookie-notice": "^3.0.8",
|
||||
"@rushstack/eslint-patch": "^1.3.2",
|
||||
"@sipec/vue3-tags-input": "^3.0.4",
|
||||
"@types/bootstrap": "^5.2.6",
|
||||
"@types/bootstrap": "^5.2.7",
|
||||
"@types/cropperjs": "^1.3.0",
|
||||
"@types/leaflet": "^1.9.3",
|
||||
"@types/toastify-js": "^1.11.1",
|
||||
"@types/webpack-env": "^1.18.1",
|
||||
"@typescript-eslint/eslint-plugin": "^5.60.0",
|
||||
"@typescript-eslint/parser": "^5.60.0",
|
||||
"@vitejs/plugin-legacy": "^4.0.1",
|
||||
"@vitejs/plugin-vue": "^4.0.0",
|
||||
"@vue/eslint-config-typescript": "^11.0.3",
|
||||
"@vitejs/plugin-legacy": "latest",
|
||||
"@vitejs/plugin-vue": "latest",
|
||||
"@vue/compiler-sfc": "latest",
|
||||
"@vue/eslint-config-typescript": "latest",
|
||||
"@vue/tsconfig": "latest",
|
||||
"axios": "^1.1.2",
|
||||
"bootstrap": "^5.2.3",
|
||||
"cropperjs": "^1.5.13",
|
||||
"eslint": "^8.43.0",
|
||||
"eslint-import-resolver-alias": "^1.1.2",
|
||||
"eslint-plugin-vue": "^9.15.0",
|
||||
"cropperjs": "^1.6.1",
|
||||
"eslint": "latest",
|
||||
"eslint-plugin-vue": "latest",
|
||||
"fslightbox": "^3.4.1",
|
||||
"laravel-vite-plugin": "^0.7.2",
|
||||
"laravel-vite-plugin": "latest",
|
||||
"leaflet": "^1.9.4",
|
||||
"postcss": "^8.4.24",
|
||||
"postcss-discard-comments": "^5.1.2",
|
||||
"postcss-html": "^1.5.0",
|
||||
"postcss-scss": "^4.0.6",
|
||||
"prettier": "2.8.8",
|
||||
"prettier": "latest",
|
||||
"print-js": "^1.6.0",
|
||||
"resolve-url-loader": "^5.0.0",
|
||||
"sass": "^1.63.6",
|
||||
"sass": "latest",
|
||||
"slugify": "^1.6.6",
|
||||
"stylelint": "^14.16.1",
|
||||
"stylelint-config-idiomatic-order": "^8.1.0",
|
||||
"stylelint-config-sass-guidelines": "^9.0.1",
|
||||
"stylelint-config-standard-scss": "^6.1.0",
|
||||
"stylelint-scss": "^4.7.0",
|
||||
"stylelint-webpack-plugin": "^3.3.0",
|
||||
"sweetalert2": "^11.7.12",
|
||||
"stylelint-config-idiomatic-order": "github:ream88/stylelint-config-idiomatic-order",
|
||||
"stylelint-config-sass-guidelines": "latest",
|
||||
"stylelint-config-standard-scss": "latest",
|
||||
"sweetalert2": "^11.7.32",
|
||||
"terser": "latest",
|
||||
"toastify-js": "^1.12.0",
|
||||
"ts-loader": "^9.4.3",
|
||||
"typescript": "^4.9.5",
|
||||
"typescript-eslint": "^0.0.1-alpha.0",
|
||||
"vite": "^4.0.0",
|
||||
"vite-plugin-checker": "^0.5.6",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
"vite-plugin-stylelint": "^4.2.0",
|
||||
"vue": "^3.2.38",
|
||||
"vue-eslint-parser": "^9.3.1",
|
||||
"vue-loader": "^16.8.3",
|
||||
"vue-tsc": "^1.8.1",
|
||||
"typescript": "latest",
|
||||
"vite-plugin-checker": "latest",
|
||||
"vite-plugin-eslint": "latest",
|
||||
"vite-plugin-stylelint": "latest",
|
||||
"vue": "latest",
|
||||
"vue-tsc": "1.6.0",
|
||||
"vue3-nestable": "^3.0.3"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,10 +96,10 @@
|
|||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: #0073aa #006799 #006799;
|
||||
border-radius: 3px;
|
||||
margin: 0;
|
||||
appearance: none;
|
||||
background: #0085ba;
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 1px 0 #006799;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ $dkmoonlight: "DK Moonlight Serenade";
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 992px) {
|
||||
@media screen and (width >= 992px) {
|
||||
.font-amatic {
|
||||
&-before::before {
|
||||
display: block;
|
||||
|
|
|
|||
|
|
@ -5,10 +5,10 @@
|
|||
@import "utilities/bootstrap-variables";
|
||||
|
||||
// 2. Include functions first (so you can manipulate colors, SVGs, calc, etc)
|
||||
@import "~bootstrap/scss/functions";
|
||||
@import "~/bootstrap/scss/functions";
|
||||
|
||||
// 3. Include remainder of required Bootstrap stylesheets
|
||||
@import "~bootstrap/scss/variables";
|
||||
@import "~/bootstrap/scss/variables";
|
||||
|
||||
// * Laravel mail vendor
|
||||
|
||||
|
|
@ -146,8 +146,8 @@ p {
|
|||
-premailer-width: 100%;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
border-top: 1px solid $bg-lightened;
|
||||
border-bottom: 1px solid $bg-lightened;
|
||||
border-top: 1px solid #{$bg-lightened};
|
||||
border-bottom: 1px solid #{$bg-lightened};
|
||||
margin: 0;
|
||||
background-color: $bg-lightened;
|
||||
-premailer-cellpadding: 0;
|
||||
|
|
@ -160,9 +160,9 @@ p {
|
|||
padding: 0;
|
||||
border-width: 1px;
|
||||
border-color: color.scale($body-bg, $lightness: -30%);
|
||||
border-radius: 2px;
|
||||
margin: 0 auto;
|
||||
background-color: $body-bg;
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 2px 0 rgb(0 0 150 / 2.5%), 2px 4px 0 rgb(0 0 150 / 1.5%);
|
||||
-premailer-cellpadding: 0;
|
||||
-premailer-cellspacing: 0;
|
||||
|
|
@ -255,29 +255,29 @@ p {
|
|||
|
||||
.button-blue,
|
||||
.button-primary {
|
||||
border-top: 8px solid $color-primary;
|
||||
border-right: 18px solid $color-primary;
|
||||
border-bottom: 8px solid $color-primary;
|
||||
border-left: 18px solid $color-primary;
|
||||
background-color: $color-primary;
|
||||
border-top: 8px solid #{$color-primary};
|
||||
border-right: 18px solid #{$color-primary};
|
||||
border-bottom: 8px solid #{$color-primary};
|
||||
border-left: 18px solid #{$color-primary};
|
||||
background-color: #{$color-primary};
|
||||
}
|
||||
|
||||
.button-green,
|
||||
.button-success {
|
||||
border-top: 8px solid $color-success;
|
||||
border-right: 18px solid $color-success;
|
||||
border-bottom: 8px solid $color-success;
|
||||
border-left: 18px solid $color-success;
|
||||
background-color: $color-success;
|
||||
border-top: 8px solid #{$color-success};
|
||||
border-right: 18px solid #{$color-success};
|
||||
border-bottom: 8px solid #{$color-success};
|
||||
border-left: 18px solid #{$color-success};
|
||||
background-color: #{$color-success};
|
||||
}
|
||||
|
||||
.button-red,
|
||||
.button-error {
|
||||
border-top: 8px solid $color-danger;
|
||||
border-right: 18px solid $color-danger;
|
||||
border-bottom: 8px solid $color-danger;
|
||||
border-left: 18px solid $color-danger;
|
||||
background-color: $color-danger;
|
||||
border-top: 8px solid #{$color-danger};
|
||||
border-right: 18px solid #{$color-danger};
|
||||
border-bottom: 8px solid #{$color-danger};
|
||||
border-left: 18px solid #{$color-danger};
|
||||
background-color: #{$color-danger};
|
||||
}
|
||||
|
||||
/* Panels */
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
.search {
|
||||
.form-control {
|
||||
padding-left: 40px;
|
||||
border-radius: 30px 0 0 30px;
|
||||
background-image: url("@/images/location-arrow.png");
|
||||
background-position: left 10px center;
|
||||
background-repeat: no-repeat;
|
||||
border-radius: 30px 0 0 30px;
|
||||
}
|
||||
|
||||
.btn {
|
||||
background-color: $red;
|
||||
border-radius: 0 30px 30px 0;
|
||||
background-color: $red;
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,6 @@
|
|||
|
||||
h3 {
|
||||
padding-right: 70px;
|
||||
border-bottom: 1px solid $gray-300;
|
||||
border-bottom: 1px solid #{$gray-300};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 992px) {
|
||||
@media screen and (width <= 992px) {
|
||||
.steps .steps-list {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -91,11 +91,8 @@
|
|||
|
||||
.dropdown-menu .dropdown-item {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
background-color: transparent;
|
||||
inset: 0;
|
||||
}
|
||||
|
||||
.dropdown-toggle::after {
|
||||
|
|
@ -114,8 +111,8 @@
|
|||
left: 0;
|
||||
width: 47px;
|
||||
height: 3px;
|
||||
background-color: $red;
|
||||
border-radius: 4px;
|
||||
background-color: $red;
|
||||
content: "";
|
||||
}
|
||||
|
||||
|
|
@ -203,7 +200,7 @@
|
|||
|
||||
// END FORM
|
||||
|
||||
@media screen and (min-width: 1400px) {
|
||||
@media screen and (width >= 1400px) {
|
||||
.navbar {
|
||||
.navbar-collapse {
|
||||
margin-top: -25px;
|
||||
|
|
@ -216,7 +213,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 992px) {
|
||||
@media screen and (width >= 992px) {
|
||||
.navbar-brand {
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
|
|
@ -257,8 +254,8 @@
|
|||
display: flex;
|
||||
flex-direction: row;
|
||||
border: 0 none;
|
||||
background-color: transparent;
|
||||
border-radius: 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -283,20 +280,20 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) and (max-width: 1400px) {
|
||||
@media (width >= 992px) and (width <= 1400px) {
|
||||
.nav-item:nth-child(-n + 3)::after {
|
||||
margin-right: 8px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 790px) and (max-width: 1200px) {
|
||||
@media (width >= 790px) and (width <= 1200px) {
|
||||
.navbar {
|
||||
margin-top: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 992px) {
|
||||
@media screen and (width <= 992px) {
|
||||
.navbar .dropdown-menu li {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
|
|||
|
|
@ -91,13 +91,13 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1200px) {
|
||||
@media screen and (width >= 1200px) {
|
||||
.hero-content {
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 992px) {
|
||||
@media screen and (width >= 992px) {
|
||||
.hero {
|
||||
&_left {
|
||||
padding-right: 45px;
|
||||
|
|
@ -120,7 +120,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1305px) {
|
||||
@media screen and (width <= 1305px) {
|
||||
.hero {
|
||||
&_left {
|
||||
padding-right: 30px;
|
||||
|
|
@ -140,7 +140,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
@media screen and (width <= 768px) {
|
||||
.hero {
|
||||
> img {
|
||||
display: none;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 992px) {
|
||||
@media screen and (width >= 992px) {
|
||||
.local {
|
||||
h2::after {
|
||||
position: absolute;
|
||||
|
|
@ -39,7 +39,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 991px) {
|
||||
@media screen and (width <= 991px) {
|
||||
.local > div:first-of-type {
|
||||
text-align: center;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,13 +34,13 @@
|
|||
left: 0;
|
||||
width: 47px;
|
||||
height: 3px;
|
||||
background-color: $red;
|
||||
border-radius: 4px;
|
||||
background-color: $red;
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 991px) {
|
||||
@media screen and (width <= 991px) {
|
||||
.navigation nav,
|
||||
#navbar-supported-content {
|
||||
position: absolute;
|
||||
|
|
@ -79,21 +79,21 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
@media screen and (width >= 768px) {
|
||||
.navigation nav,
|
||||
#navbar-supported-content {
|
||||
top: 93px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 767px) {
|
||||
@media screen and (width <= 767px) {
|
||||
.navigation nav,
|
||||
#navbar-supported-content {
|
||||
top: 65px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 992px) {
|
||||
@media screen and (width >= 992px) {
|
||||
#menu-btn {
|
||||
display: none;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 992px) {
|
||||
@media screen and (width >= 992px) {
|
||||
.reassurances {
|
||||
&::before {
|
||||
position: absolute;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 769px) {
|
||||
@media screen and (width >= 769px) {
|
||||
.site-footer {
|
||||
&::before {
|
||||
position: absolute;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
left: 0;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 991px) {
|
||||
@media screen and (width <= 991px) {
|
||||
.site-header {
|
||||
background-color: $white;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
.socials {
|
||||
padding-top: 8px;
|
||||
padding-bottom: 8px;
|
||||
border-top: 1px solid $gray-300;
|
||||
border-bottom: 1px solid $gray-300;
|
||||
border-top: 1px solid #{$gray-300};
|
||||
border-bottom: 1px solid #{$gray-300};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@
|
|||
z-index: 1;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
background-color: $red;
|
||||
border-radius: 50%;
|
||||
background-color: $red;
|
||||
content: "";
|
||||
}
|
||||
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
height: 0;
|
||||
border-top: 6px solid transparent;
|
||||
border-bottom: 6px solid transparent;
|
||||
border-left: 6px solid $white;
|
||||
border-left: 6px solid #{$white};
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
@use "sass:color";
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
|
@ -14,7 +16,7 @@ a {
|
|||
}
|
||||
|
||||
.bckg-yellow {
|
||||
background-color: rgba($yellow, 0.9);
|
||||
background-color: rgba(color.red($yellow), color.green($yellow), color.blue($yellow), 90%);
|
||||
}
|
||||
|
||||
.bckg-yellow:not(.opacity) {
|
||||
|
|
@ -22,7 +24,7 @@ a {
|
|||
}
|
||||
|
||||
.bckg-red {
|
||||
background-color: rgba($red, 0.9);
|
||||
background-color: rgba(color.red($red), color.green($red), color.blue($red), 90%);
|
||||
|
||||
.btn.btn-primary {
|
||||
border-color: $white;
|
||||
|
|
@ -62,7 +64,7 @@ h2 span {
|
|||
}
|
||||
|
||||
.separator {
|
||||
border: 1px solid $gray-300;
|
||||
border: 1px solid #{$gray-300};
|
||||
content: "";
|
||||
}
|
||||
|
||||
|
|
@ -119,7 +121,7 @@ h2 span {
|
|||
|
||||
.section {
|
||||
padding-bottom: 6px;
|
||||
border-bottom: 1px solid $gray-400;
|
||||
border-bottom: 1px solid #{$gray-400};
|
||||
|
||||
&.fw-bold {
|
||||
font-size: 20px;
|
||||
|
|
@ -145,9 +147,9 @@ ol:not(.breadcrumb) li::before {
|
|||
height: 28px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
background-color: $yellow;
|
||||
border-radius: 50%;
|
||||
color: $white;
|
||||
content: counter(my-awesome-counter) "";
|
||||
}
|
||||
|
|
@ -193,7 +195,7 @@ li strong {
|
|||
object-position: top;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1200px) {
|
||||
@media screen and (width >= 1200px) {
|
||||
.navbar-brand {
|
||||
width: 260px;
|
||||
max-width: 260px;
|
||||
|
|
@ -424,7 +426,7 @@ li strong {
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 576px) {
|
||||
@media screen and (width >= 576px) {
|
||||
.stripes {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
|
@ -457,7 +459,7 @@ li strong {
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 769px) {
|
||||
@media screen and (width >= 769px) {
|
||||
.special {
|
||||
&::before {
|
||||
position: absolute;
|
||||
|
|
@ -481,7 +483,7 @@ li strong {
|
|||
}
|
||||
}
|
||||
|
||||
@media (min-width: 790px) and (max-width: 1200px) {
|
||||
@media (width >= 790px) and (width <= 1200px) {
|
||||
.navbar .container {
|
||||
.nav-link {
|
||||
padding-right: 0;
|
||||
|
|
@ -490,7 +492,7 @@ li strong {
|
|||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) and (max-width: 1399px) {
|
||||
@media (width >= 1200px) and (width <= 1399px) {
|
||||
.about-two {
|
||||
> div::after {
|
||||
position: absolute;
|
||||
|
|
@ -520,7 +522,7 @@ li strong {
|
|||
}
|
||||
}
|
||||
|
||||
@media (min-width: 993px) and (max-width: 1199px) {
|
||||
@media (width >= 993px) and (width <= 1199px) {
|
||||
.about-two {
|
||||
> div::after {
|
||||
position: absolute;
|
||||
|
|
@ -550,7 +552,7 @@ li strong {
|
|||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1200px) {
|
||||
@media screen and (width <= 1200px) {
|
||||
.navbar-brand {
|
||||
width: 19%;
|
||||
max-width: 19%;
|
||||
|
|
|
|||
|
|
@ -62,5 +62,5 @@
|
|||
/// @param {Length} $height
|
||||
@mixin size-fract($width, $fract: 4 / 3) {
|
||||
width: $width;
|
||||
height: calc($width / $fract);
|
||||
height: calc(#{$width} / #{$fract});
|
||||
}
|
||||
|
|
|
|||
58
resources/sass/fo/vendor/_bootstrap.scss
vendored
58
resources/sass/fo/vendor/_bootstrap.scss
vendored
|
|
@ -2,43 +2,43 @@
|
|||
@import "./../utilities/bootstrap-variables";
|
||||
|
||||
// 2. Include functions first (so you can manipulate colors, SVGs, calc, etc)
|
||||
@import "~/bootstrap/scss/functions";
|
||||
@import "bootstrap/scss/functions";
|
||||
|
||||
// 3. Include remainder of required Bootstrap stylesheets
|
||||
@import "~/bootstrap/scss/variables";
|
||||
@import "~/bootstrap/scss/variables-dark";
|
||||
@import "bootstrap/scss/variables";
|
||||
@import "bootstrap/scss/variables-dark";
|
||||
|
||||
// 4. Include remainder of required parts
|
||||
@import "~/bootstrap/scss/maps";
|
||||
@import "~/bootstrap/scss/mixins";
|
||||
@import "~/bootstrap/scss/root";
|
||||
@import "bootstrap/scss/maps";
|
||||
@import "bootstrap/scss/mixins";
|
||||
@import "bootstrap/scss/root";
|
||||
|
||||
// 5. Optionally include any other parts as needed
|
||||
@import "~/bootstrap/scss/alert";
|
||||
@import "~/bootstrap/scss/buttons";
|
||||
@import "~/bootstrap/scss/button-group";
|
||||
@import "~/bootstrap/scss/containers";
|
||||
@import "~/bootstrap/scss/dropdown";
|
||||
@import "~/bootstrap/scss/forms";
|
||||
@import "~/bootstrap/scss/grid";
|
||||
@import "~/bootstrap/scss/helpers";
|
||||
@import "~/bootstrap/scss/images";
|
||||
@import "~/bootstrap/scss/list-group";
|
||||
@import "~/bootstrap/scss/nav";
|
||||
@import "~/bootstrap/scss/navbar";
|
||||
@import "~/bootstrap/scss/pagination";
|
||||
@import "~/bootstrap/scss/spinners";
|
||||
@import "~/bootstrap/scss/reboot";
|
||||
@import "~/bootstrap/scss/tables";
|
||||
@import "~/bootstrap/scss/tooltip";
|
||||
@import "~/bootstrap/scss/transitions";
|
||||
@import "~/bootstrap/scss/type";
|
||||
@import "~/bootstrap/scss/utilities";
|
||||
@import "~/bootstrap/scss/close";
|
||||
@import "~/bootstrap/scss/breadcrumb";
|
||||
@import "bootstrap/scss/alert";
|
||||
@import "bootstrap/scss/buttons";
|
||||
@import "bootstrap/scss/button-group";
|
||||
@import "bootstrap/scss/containers";
|
||||
@import "bootstrap/scss/dropdown";
|
||||
@import "bootstrap/scss/forms";
|
||||
@import "bootstrap/scss/grid";
|
||||
@import "bootstrap/scss/helpers";
|
||||
@import "bootstrap/scss/images";
|
||||
@import "bootstrap/scss/list-group";
|
||||
@import "bootstrap/scss/nav";
|
||||
@import "bootstrap/scss/navbar";
|
||||
@import "bootstrap/scss/pagination";
|
||||
@import "bootstrap/scss/spinners";
|
||||
@import "bootstrap/scss/reboot";
|
||||
@import "bootstrap/scss/tables";
|
||||
@import "bootstrap/scss/tooltip";
|
||||
@import "bootstrap/scss/transitions";
|
||||
@import "bootstrap/scss/type";
|
||||
@import "bootstrap/scss/utilities";
|
||||
@import "bootstrap/scss/close";
|
||||
@import "bootstrap/scss/breadcrumb";
|
||||
|
||||
// 6. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss`
|
||||
@import "~/bootstrap/scss/utilities/api";
|
||||
@import "bootstrap/scss/utilities/api";
|
||||
|
||||
// 7 Overload bootstrap classes
|
||||
@import "./../utilities/bootstrap-custom";
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
@import "~/bootstrap/scss/functions";
|
||||
@import "~/bootstrap/scss/variables";
|
||||
@import "~/bootstrap/scss/variables-dark";
|
||||
|
||||
@import "~/bootstrap/scss/maps";
|
||||
@import "~/bootstrap/scss/mixins";
|
||||
@import "~/bootstrap/scss/root";
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
// ASSETS
|
||||
import.meta.glob(["./../assets/images/**"]);
|
||||
|
||||
// UTILITIES
|
||||
import "./utilities/bootstrap";
|
||||
import "./utilities/fontawesome";
|
||||
|
||||
// MODULES
|
||||
import "./modules/sweetalert";
|
||||
|
||||
// CUSTOM
|
||||
import "./bo/common";
|
||||
import "./bo/vue-bo";
|
||||
48
resources/ts/bo/base/common.ts
Normal file
48
resources/ts/bo/base/common.ts
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
import type { SweetAlertResult } from "sweetalert2";
|
||||
import sweetalert from "../../modules/sweetalertConfirm";
|
||||
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
/**
|
||||
* Popup delete item.
|
||||
*/
|
||||
const elements = document.getElementsByClassName(
|
||||
"confirmDeleteTS"
|
||||
) as HTMLCollectionOf<Element>;
|
||||
for (const element of elements) {
|
||||
element.addEventListener("submit", function (e) {
|
||||
e.preventDefault();
|
||||
const el = e.target;
|
||||
if (!el || !(el instanceof HTMLFormElement)) {
|
||||
throw new Error(
|
||||
"confirmDoneJS can only be executed on an exising form"
|
||||
);
|
||||
}
|
||||
sweetalert.methods.confirm(
|
||||
"Êtes-vous sûr ?",
|
||||
"Toutes les données vont être perdu",
|
||||
el as HTMLFormElement,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
function (response: SweetAlertResult<any>) {
|
||||
(el as HTMLFormElement).submit();
|
||||
},
|
||||
{ icon: "warning" }
|
||||
);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const formSubmit = document.getElementById(
|
||||
"formSubmit"
|
||||
) as HTMLFormElement | null,
|
||||
formSubmitClone = document.getElementById(
|
||||
"formSubmitClone"
|
||||
) as HTMLButtonElement | null;
|
||||
if (formSubmit && formSubmitClone) {
|
||||
formSubmitClone.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
formSubmit.submit();
|
||||
});
|
||||
}
|
||||
});
|
||||
15
resources/ts/bo/bo.ts
Normal file
15
resources/ts/bo/bo.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// ASSETS
|
||||
/// <reference types="vite/client" />
|
||||
import.meta.glob(["./../../assets/images/**"]);
|
||||
|
||||
// UTILITIES
|
||||
import "./utilities/bootstrap";
|
||||
import "./utilities/fontawesome";
|
||||
import "./utilities/vue-bo";
|
||||
|
||||
// MODULES
|
||||
import "../modules/sweetalert";
|
||||
|
||||
// CUSTOM
|
||||
import "./base/common";
|
||||
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const formSubmit = document.getElementById(
|
||||
"formSubmit"
|
||||
) as HTMLFormElement | null,
|
||||
formSubmitClone = document.getElementById(
|
||||
"formSubmitClone"
|
||||
) as HTMLButtonElement | null;
|
||||
if (formSubmit && formSubmitClone) {
|
||||
formSubmitClone.addEventListener("click", (event) => {
|
||||
event.preventDefault();
|
||||
formSubmit.submit();
|
||||
});
|
||||
}
|
||||
});
|
||||
21
resources/ts/bo/utilities/bootstrap.ts
Normal file
21
resources/ts/bo/utilities/bootstrap.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import axios from "axios";
|
||||
import * as bootstrap from "bootstrap";
|
||||
import bsTooltips from "./../../modules/bsTooltips";
|
||||
|
||||
/**
|
||||
* We'll load the axios HTTP library which allows us to easily issue requests
|
||||
* to our Laravel back-end. This library automatically handles sending the
|
||||
* CSRF token as a header based on the value of the "XSRF" token cookie.
|
||||
*/
|
||||
axios.defaults.headers.common = {
|
||||
Accept: "application/json, text/plain, */*",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
"X-CSRF-TOKEN": document
|
||||
.querySelector("meta[name=\"csrf-token\"]")!
|
||||
.getAttribute("content"),
|
||||
};
|
||||
|
||||
window.axios = axios;
|
||||
window.bootstrap = bootstrap;
|
||||
|
||||
bsTooltips.methods.initTooltips();
|
||||
92
resources/ts/bo/utilities/fontawesome.ts
Normal file
92
resources/ts/bo/utilities/fontawesome.ts
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
import { config, dom, library } from "@fortawesome/fontawesome-svg-core";
|
||||
import {
|
||||
faArrowAltCircleDown,
|
||||
faArrowAltCircleUp,
|
||||
faArrowDown,
|
||||
faArrowLeft,
|
||||
faArrowLeftLong,
|
||||
faArrowRight,
|
||||
faArrowRightFromBracket,
|
||||
faArrowUp,
|
||||
faArrowsAltH,
|
||||
faArrowsAltV,
|
||||
faBackspace,
|
||||
faBan,
|
||||
faCheck,
|
||||
faChevronLeft,
|
||||
faChevronRight,
|
||||
faCircleCheck,
|
||||
faCircleExclamation,
|
||||
faCircleInfo,
|
||||
faCircleNotch,
|
||||
faCircleXmark,
|
||||
faCopy,
|
||||
faCrop,
|
||||
faEraser,
|
||||
faEye,
|
||||
faEyeSlash,
|
||||
faFolderOpen,
|
||||
faListUl,
|
||||
faPaintRoller,
|
||||
faPencil,
|
||||
faPlus,
|
||||
faQuestionCircle,
|
||||
faRedoAlt,
|
||||
faSearch,
|
||||
faSearchMinus,
|
||||
faSearchPlus,
|
||||
faSliders,
|
||||
faSyncAlt,
|
||||
faTimes,
|
||||
faTrash,
|
||||
faUndoAlt,
|
||||
faWandMagic
|
||||
} from "@fortawesome/free-solid-svg-icons";
|
||||
|
||||
config.autoReplaceSvg = false;
|
||||
library.add(faEraser);
|
||||
library.add(faArrowLeftLong);
|
||||
library.add(faPlus);
|
||||
library.add(faTrash);
|
||||
library.add(faEye);
|
||||
library.add(faEyeSlash);
|
||||
library.add(faFolderOpen);
|
||||
library.add(faCrop);
|
||||
library.add(faQuestionCircle);
|
||||
library.add(faCheck);
|
||||
library.add(faUndoAlt);
|
||||
library.add(faRedoAlt);
|
||||
library.add(faSyncAlt);
|
||||
library.add(faSearchPlus);
|
||||
library.add(faSearchMinus);
|
||||
library.add(faArrowLeft);
|
||||
library.add(faArrowRight);
|
||||
library.add(faArrowUp);
|
||||
library.add(faArrowDown);
|
||||
library.add(faArrowsAltH);
|
||||
library.add(faArrowsAltV);
|
||||
library.add(faWandMagic);
|
||||
library.add(faPencil);
|
||||
library.add(faTimes);
|
||||
library.add(faBackspace);
|
||||
library.add(faSearch);
|
||||
library.add(faArrowRightFromBracket);
|
||||
library.add(faArrowAltCircleDown);
|
||||
library.add(faArrowAltCircleUp);
|
||||
library.add(faCircleCheck);
|
||||
library.add(faCircleXmark);
|
||||
library.add(faCopy);
|
||||
library.add(faListUl);
|
||||
library.add(faBan);
|
||||
library.add(faCircleExclamation);
|
||||
library.add(faCircleInfo);
|
||||
library.add(faPaintRoller);
|
||||
|
||||
// Front
|
||||
library.add(faChevronLeft);
|
||||
library.add(faChevronRight);
|
||||
library.add(faCircleXmark);
|
||||
library.add(faCircleNotch);
|
||||
library.add(faSliders);
|
||||
|
||||
dom.watch();
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
import { App, Component, createApp } from "vue";
|
||||
import type { App, Component } from "vue";
|
||||
import { createApp } from "vue";
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const setupApp = (app: App<Element>) => {
|
||||
|
|
@ -7,7 +8,8 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||
};
|
||||
|
||||
// Register components
|
||||
const vues = import.meta.glob("./../bo/components/*.vue") as Record<
|
||||
/// <reference types="vite/client" />
|
||||
const vues = import.meta.glob("./../components/*.vue") as Record<
|
||||
string,
|
||||
() => Promise<{ default: Component }>
|
||||
>;
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
// ASSETS
|
||||
import.meta.glob(["./../assets/images/**"]);
|
||||
/// <reference types="vite/client" />
|
||||
import.meta.glob(["./../../assets/images/**"]);
|
||||
|
||||
// UTILITIES
|
||||
import "./utilities/bootstrap";
|
||||
import "./utilities/fontawesome";
|
||||
import "./utilities/vue-fo";
|
||||
|
||||
// LDCWEB Cookies
|
||||
import CookieNotice from "@ldc-web/cookie-notice";
|
||||
|
|
@ -17,6 +19,6 @@ window.Fancybox = Fancyapps.Fancybox;
|
|||
import "fslightbox";
|
||||
|
||||
// CUSTOM
|
||||
import "./fo/common";
|
||||
import "./fo/burgermenu";
|
||||
import "./fo/vue-fo";
|
||||
import "./base/common";
|
||||
import "./burgermenu";
|
||||
|
||||
21
resources/ts/fo/utilities/bootstrap.ts
Normal file
21
resources/ts/fo/utilities/bootstrap.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import axios from "axios";
|
||||
import * as bootstrap from "bootstrap";
|
||||
import bsTooltips from "./../../modules/bsTooltips";
|
||||
|
||||
/**
|
||||
* We'll load the axios HTTP library which allows us to easily issue requests
|
||||
* to our Laravel back-end. This library automatically handles sending the
|
||||
* CSRF token as a header based on the value of the "XSRF" token cookie.
|
||||
*/
|
||||
axios.defaults.headers.common = {
|
||||
Accept: "application/json, text/plain, */*",
|
||||
"X-Requested-With": "XMLHttpRequest",
|
||||
"X-CSRF-TOKEN": document
|
||||
.querySelector("meta[name=\"csrf-token\"]")!
|
||||
.getAttribute("content"),
|
||||
};
|
||||
|
||||
window.axios = axios;
|
||||
window.bootstrap = bootstrap;
|
||||
|
||||
bsTooltips.methods.initTooltips();
|
||||
90
resources/ts/fo/utilities/fontawesome.ts
Normal file
90
resources/ts/fo/utilities/fontawesome.ts
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
import { dom, library, config } from "@fortawesome/fontawesome-svg-core";
|
||||
import {
|
||||
faEraser,
|
||||
faArrowLeftLong,
|
||||
faPlus,
|
||||
faTrash,
|
||||
faEye,
|
||||
faFolderOpen,
|
||||
faCrop,
|
||||
faQuestionCircle,
|
||||
faCheck,
|
||||
faUndoAlt,
|
||||
faRedoAlt,
|
||||
faSyncAlt,
|
||||
faSearchPlus,
|
||||
faSearchMinus,
|
||||
faArrowLeft,
|
||||
faArrowRight,
|
||||
faArrowUp,
|
||||
faArrowDown,
|
||||
faArrowsAltH,
|
||||
faArrowsAltV,
|
||||
faWandMagic,
|
||||
faPencil,
|
||||
faTimes,
|
||||
faBackspace,
|
||||
faSearch,
|
||||
faArrowRightFromBracket,
|
||||
faArrowAltCircleDown,
|
||||
faArrowAltCircleUp,
|
||||
faChevronLeft,
|
||||
faChevronRight,
|
||||
faCircleNotch,
|
||||
faSliders,
|
||||
faCircleCheck,
|
||||
faCircleXmark,
|
||||
faCopy,
|
||||
faListUl,
|
||||
faBan,
|
||||
faEyeSlash,
|
||||
faCircleExclamation,
|
||||
faCircleInfo
|
||||
} from "@fortawesome/free-solid-svg-icons";
|
||||
|
||||
config.autoReplaceSvg = false;
|
||||
library.add(faEraser);
|
||||
library.add(faArrowLeftLong);
|
||||
library.add(faPlus);
|
||||
library.add(faTrash);
|
||||
library.add(faEye);
|
||||
library.add(faEyeSlash);
|
||||
library.add(faFolderOpen);
|
||||
library.add(faCrop);
|
||||
library.add(faQuestionCircle);
|
||||
library.add(faCheck);
|
||||
library.add(faUndoAlt);
|
||||
library.add(faRedoAlt);
|
||||
library.add(faSyncAlt);
|
||||
library.add(faSearchPlus);
|
||||
library.add(faSearchMinus);
|
||||
library.add(faArrowLeft);
|
||||
library.add(faArrowRight);
|
||||
library.add(faArrowUp);
|
||||
library.add(faArrowDown);
|
||||
library.add(faArrowsAltH);
|
||||
library.add(faArrowsAltV);
|
||||
library.add(faWandMagic);
|
||||
library.add(faPencil);
|
||||
library.add(faTimes);
|
||||
library.add(faBackspace);
|
||||
library.add(faSearch);
|
||||
library.add(faArrowRightFromBracket);
|
||||
library.add(faArrowAltCircleDown);
|
||||
library.add(faArrowAltCircleUp);
|
||||
library.add(faCircleCheck);
|
||||
library.add(faCircleXmark);
|
||||
library.add(faCopy);
|
||||
library.add(faListUl);
|
||||
library.add(faBan);
|
||||
library.add(faCircleExclamation);
|
||||
library.add(faCircleInfo);
|
||||
|
||||
// Front
|
||||
library.add(faChevronLeft);
|
||||
library.add(faChevronRight);
|
||||
library.add(faCircleXmark);
|
||||
library.add(faCircleNotch);
|
||||
library.add(faSliders);
|
||||
|
||||
dom.watch();
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
import { App, Component, createApp } from "vue";
|
||||
import type { App, Component } from "vue";
|
||||
import { createApp } from "vue";
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
const setupApp = (app: App<Element>) => {
|
||||
|
|
@ -7,7 +8,8 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||
};
|
||||
|
||||
// Register components
|
||||
const vues = import.meta.glob("./../fo/components/*.vue") as Record<
|
||||
/// <reference types="vite/client" />
|
||||
const vues = import.meta.glob("./../components/*.vue") as Record<
|
||||
string,
|
||||
() => Promise<{ default: Component }>
|
||||
>;
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import { SweetAlertResult } from "sweetalert2";
|
||||
import type { SweetAlertResult } from "sweetalert2";
|
||||
import confirm from "./sweetalertConfirm";
|
||||
|
||||
window.addEventListener("DOMContentLoaded", () => {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
// SweetAlert
|
||||
import Swal, { SweetAlertResult } from "sweetalert2";
|
||||
import { SweetAlertOptions } from "sweetalert2";
|
||||
import type { SweetAlertOptions, SweetAlertResult } from "sweetalert2";
|
||||
import Swal from "sweetalert2";
|
||||
|
||||
import * as trans from "../modules/trans";
|
||||
|
||||
|
|
@ -23,6 +23,7 @@ export default {
|
|||
Swal.fire({
|
||||
title: title,
|
||||
text: text,
|
||||
color: getComputedStyle(document.body).getPropertyValue("--bs-body-color"),
|
||||
icon: icon,
|
||||
showCancelButton: true,
|
||||
confirmButtonText:
|
||||
|
|
@ -34,10 +35,11 @@ export default {
|
|||
reverseButtons: true,
|
||||
// * Bootstrap Styling
|
||||
customClass: {
|
||||
confirmButton: "btn btn-lg btn-success ms-3 me-3",
|
||||
cancelButton: "btn btn-lg btn-danger ms-3 me-3",
|
||||
confirmButton: "btn btn-primary mx-1",
|
||||
cancelButton: "btn btn-danger mx-1",
|
||||
},
|
||||
buttonsStyling: false,
|
||||
background: getComputedStyle(document.body).getPropertyValue("--bs-body-bg"),
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
if (after) {
|
||||
|
|
@ -51,12 +53,14 @@ export default {
|
|||
title: trans.default.methods.__(
|
||||
"L'opération n'as pas été effectuée"
|
||||
),
|
||||
color: getComputedStyle(document.body).getPropertyValue("--bs-body-color"),
|
||||
confirmButtonText: trans.default.methods.__("Ok"),
|
||||
// * Bootstrap Styling
|
||||
customClass: {
|
||||
confirmButton: "btn btn-lg btn-primary",
|
||||
confirmButton: "btn btn-primary",
|
||||
},
|
||||
buttonsStyling: false,
|
||||
background: getComputedStyle(document.body).getPropertyValue("--bs-body-bg"),
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
@ -73,12 +77,14 @@ export default {
|
|||
Swal.fire({
|
||||
title: title,
|
||||
text: text,
|
||||
color: getComputedStyle(document.body).getPropertyValue("--bs-body-color"),
|
||||
icon: icon,
|
||||
// * Bootstrap Styling
|
||||
customClass: {
|
||||
confirmButton: "btn btn-lg btn-primary",
|
||||
},
|
||||
buttonsStyling: false,
|
||||
background: getComputedStyle(document.body).getPropertyValue("--bs-body-bg"),
|
||||
}).then((result) => {
|
||||
if (after) {
|
||||
if (self) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import Toastify from "toastify-js";
|
||||
import { Options } from "toastify-js";
|
||||
import type { Options } from "toastify-js";
|
||||
import * as Toastify from "toastify-js";
|
||||
|
||||
export default {
|
||||
methods: {
|
||||
|
|
@ -22,7 +22,7 @@ export default {
|
|||
stopOnFocus: true,
|
||||
};
|
||||
options.text = message;
|
||||
Toastify(options).showToast();
|
||||
Toastify.default(options).showToast();
|
||||
},
|
||||
notify(message: string, duration = 4000): void {
|
||||
this.toast(message, duration, "notifications");
|
||||
|
|
|
|||
|
|
@ -11,12 +11,12 @@
|
|||
<a class="navbar-brand rounded px-2 py-1" href="{{ url('/') }}">
|
||||
{{ config('app.name', 'Laravel') }}
|
||||
</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"
|
||||
<button class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" type="button"
|
||||
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<div class="navbar-collapse collapse" id="navbarSupportedContent">
|
||||
<!-- Left Side Of Navbar -->
|
||||
@include('bo.layouts.nav-menu')
|
||||
|
||||
|
|
@ -24,38 +24,40 @@
|
|||
<ul class="navbar-nav ms-auto">
|
||||
<!-- Authentication Links -->
|
||||
@guest('backend')
|
||||
@if (Route::has('bo.login'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('bo.login') }}">{{ __('Connexion') }}</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Route::has('bo.login'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('bo.login') }}">{{ __('Connexion') }}</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if (Route::has('bo.register'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('bo.register') }}">{{ __('Créer un compte') }}</a>
|
||||
</li>
|
||||
@endif
|
||||
@if (Route::has('bo.register'))
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ route('bo.register') }}">{{ __('Créer un compte') }}</a>
|
||||
</li>
|
||||
@endif
|
||||
@endguest
|
||||
@auth('backend')
|
||||
<li class="nav-item dropdown">
|
||||
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button"
|
||||
data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
{{ auth('backend')->user()->firstname }} {{ auth('backend')->user()->lastname}} <span class="caret"></span>
|
||||
</a>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" id="navbarDropdown" data-bs-toggle="dropdown" href="#" role="button"
|
||||
aria-haspopup="true" aria-expanded="false">
|
||||
{{ auth('backend')->user()->firstname }} {{ auth('backend')->user()->lastname }} <span
|
||||
class="caret"></span>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
|
||||
<form action="{{ route('bo.logout') }}" method="POST" class="text-center">
|
||||
@csrf
|
||||
<button class="btn btn-link p-0 text-decoration-none text-muted text-capitalize" type="submit">{{ __('Déconnexion') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
|
||||
<form class="text-center" action="{{ route('bo.logout') }}" method="POST">
|
||||
@csrf
|
||||
<button class="btn btn-link text-decoration-none text-muted text-capitalize p-0"
|
||||
type="submit">{{ __('Déconnexion') }}</button>
|
||||
</form>
|
||||
</div>
|
||||
</li>
|
||||
@endauth
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<main class="container-fluid pt-2 @yield('bg-color')">
|
||||
<main class="container-fluid @yield('bg-color') pt-2">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col col-md-6">
|
||||
@include('modules.flash-messages')
|
||||
|
|
@ -67,14 +69,14 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="row p-md-3 justify-content-center">
|
||||
<div class="col-12 col-md-10 col-lg-8 pt-3 p-md-0">
|
||||
<div class="col-12 col-md-10 col-lg-8 p-md-0 pt-3">
|
||||
@yield('content')
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
@stack('scripts-constants')
|
||||
@include('modules.script-constants')
|
||||
@vite(['resources/ts/bo.ts'])
|
||||
@vite(['resources/ts/bo/bo.ts'])
|
||||
@stack('scripts')
|
||||
</body>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<body>
|
||||
@include('fo.layouts.header')
|
||||
|
||||
<main class="container-fluid p-0 @yield('bg-color')">
|
||||
<main class="container-fluid @yield('bg-color') p-0">
|
||||
@yield('content')
|
||||
</main>
|
||||
|
||||
|
|
@ -18,8 +18,8 @@
|
|||
@stack('script-constants')
|
||||
@include('modules.script-constants')
|
||||
@include('modules.script-routes')
|
||||
@vite(['resources/ts/fo.ts'])
|
||||
@vite(['resources/ts/fo/fo.ts'])
|
||||
@stack('scripts')
|
||||
</body>
|
||||
</html>
|
||||
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -6,19 +6,21 @@
|
|||
|
||||
@section('canonical', route('ranges.products', ['publishedRange' => $publishedRange]))
|
||||
|
||||
@section('breadcrumb', request()->route()->getName())
|
||||
@section('breadcrumb',
|
||||
request()->route()->getName())
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="g-0 pb-md-5 position-relative hero">
|
||||
<img src="{{ Vite::asset('resources/assets/images/100LOCAL-V1.png') }}" alt="Logo 100% local" class="img-fluid">
|
||||
<img class="img-fluid" src="{{ Vite::asset('resources/assets/images/100LOCAL-V1.png') }}" alt="Logo 100% local">
|
||||
<div class="position-relative hero-fix-height">
|
||||
<img src="{{ Vite::asset('resources/assets/images/Panoramique2.jpg') }}" alt="Des saucisses de volailles cuites accompagnées de salade, d'oignons et de tomates cerise" class="img-fluid">
|
||||
<img class="img-fluid w-100" src="{{ asset($publishedRange->banner) }}" title="{{ $publishedRange->banner_title }}"
|
||||
alt="{{ $publishedRange->banner_alt }}">
|
||||
</div>
|
||||
<!-- breadcrumb -->
|
||||
<div class="container breadcrumb-obj small mt-3">
|
||||
<div class="breadcrumb-obj small container mt-3">
|
||||
<div class="row">
|
||||
<div class="col-12 d-flex ">
|
||||
<div class="col-12 d-flex">
|
||||
<p class="fst-italic me-2">Vous êtes ici</p>
|
||||
@include('modules/breadcrumb/breadcrumb-body', ['brParam' => $publishedRange])
|
||||
</div>
|
||||
|
|
@ -27,7 +29,7 @@
|
|||
<!-- END breadcrumb -->
|
||||
</div>
|
||||
|
||||
<div class="container-fluid pt-5 position-relative bckg-illustration bckg-illustration--fromage bckg-illustration--tomates">
|
||||
<div class="container-fluid position-relative bckg-illustration bckg-illustration--fromage bckg-illustration--tomates pt-5">
|
||||
<div class="row">
|
||||
<div class="col-md-8 offset-md-2">
|
||||
<div class="container">
|
||||
|
|
@ -41,15 +43,18 @@
|
|||
<!-- FICHES PRODUIT -->
|
||||
<div class="row mt-4 text-center">
|
||||
@foreach ($products as $product)
|
||||
<div class="col-md-4 product-item mb-5">
|
||||
<div class="card">
|
||||
<img src="{{ asset($product->sticker) }}" alt="{{ $product->sticker_alt }}" title="{{ $product->sticker_title }}" class="card-img-top">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title text-uppercase font-amatic font-amatic-46 mt-4">{{ $product->name }}</h3>
|
||||
<a href="{{ route('products.show', ['publishedProduct' => $product]) }}" title="{{ $product->name }}" class="btn btn-primary text-uppercase">{{ __('Découvrir >') }}</a>
|
||||
<div class="col-md-4 product-item mb-5">
|
||||
<div class="card">
|
||||
<img class="card-img-top" src="{{ asset($product->sticker) }}" title="{{ $product->sticker_title }}"
|
||||
alt="{{ $product->sticker_alt }}">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title text-uppercase font-amatic font-amatic-46 mt-4">{{ $product->name }}</h3>
|
||||
<a class="btn btn-primary text-uppercase"
|
||||
href="{{ route('products.show', ['publishedProduct' => $product]) }}"
|
||||
title="{{ $product->name }}">{{ __('Découvrir >') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
import legacy from "@vitejs/plugin-legacy";
|
||||
import vue from "@vitejs/plugin-vue";
|
||||
import laravel from "laravel-vite-plugin";
|
||||
import path from "path";
|
||||
import { defineConfig } from "vite";
|
||||
import checker from "vite-plugin-checker";
|
||||
import eslint from "vite-plugin-eslint";
|
||||
import laravel from "laravel-vite-plugin";
|
||||
import legacy from "@vitejs/plugin-legacy";
|
||||
import path from "path";
|
||||
import stylelint from "vite-plugin-stylelint";
|
||||
import vue from "@vitejs/plugin-vue";
|
||||
|
||||
export default defineConfig({
|
||||
build: {
|
||||
|
|
@ -22,7 +22,6 @@ export default defineConfig({
|
|||
}[hash].[ext]`,
|
||||
},
|
||||
},
|
||||
chunkSizeWarningLimit: 700,
|
||||
emptyOutDir: true,
|
||||
sourcemap: process.env.NODE_ENV === "local" ? "inline" : false,
|
||||
},
|
||||
|
|
@ -62,9 +61,9 @@ export default defineConfig({
|
|||
laravel({
|
||||
input: [
|
||||
"resources/sass/bo/bo.scss",
|
||||
"resources/ts/bo.ts",
|
||||
"resources/ts/bo/bo.ts",
|
||||
"resources/sass/fo/fo.scss",
|
||||
"resources/ts/fo.ts",
|
||||
"resources/ts/fo/fo.ts",
|
||||
],
|
||||
}),
|
||||
stylelint({
|
||||
|
|
@ -74,12 +73,7 @@ export default defineConfig({
|
|||
chokidar: true,
|
||||
quiet: false,
|
||||
include: ["**/resources/**/*.scss", "**/resources/**/*.css"],
|
||||
exclude: [
|
||||
"**/node_modules/**/*.scss",
|
||||
"**/node_modules/**/*.css",
|
||||
"**/vendor/**/*.scss",
|
||||
"**/vendor/**/*.css",
|
||||
],
|
||||
exclude: ["node_modules", "vendor"],
|
||||
lintOnStart: false,
|
||||
emitError: true,
|
||||
emitWarning: true,
|
||||
|
|
@ -90,6 +84,7 @@ export default defineConfig({
|
|||
cache: false,
|
||||
extensions: ["js", "ts"],
|
||||
include: "**/*.ts",
|
||||
exclude: ["node_modules", "vendor"],
|
||||
lintOnStart: false,
|
||||
emitWarning: true,
|
||||
emitError: true,
|
||||
|
|
@ -97,7 +92,8 @@ export default defineConfig({
|
|||
failOnError: false,
|
||||
}),
|
||||
vue({
|
||||
isProduction: process.env.NODE_ENV !== "development" ? true : false,
|
||||
isProduction: process.env.NODE_ENV !== "local" ? true : false,
|
||||
exclude: ["node_modules", "vendor"],
|
||||
}),
|
||||
legacy({
|
||||
targets: "last 3 version, not dead, >0.3%",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue