Merge branch 're7-fixes' into develop
|
|
@ -61,6 +61,9 @@ VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
|||
# Sentry
|
||||
SENTRY_LARAVEL_DSN=
|
||||
|
||||
# Matomo
|
||||
MATOMO_SITE_ID=id
|
||||
|
||||
# MAILS
|
||||
MAIL_CONTACT_REMARK="equipe.web@ldc.fr"
|
||||
MAIL_CONTACT_SPONSORING="equipe.web@ldc.fr"
|
||||
|
|
|
|||
|
|
@ -30,4 +30,74 @@ enum SpeciesEnum: int
|
|||
self::guinea_fowl->name => 'Pintade',
|
||||
self::rooster->name => 'Coq',
|
||||
];
|
||||
|
||||
/**
|
||||
* Pictures paths.
|
||||
*/
|
||||
private const PICTURES = [
|
||||
self::chicken->name => 'resources/assets/images/pictos/chicken.jpg',
|
||||
self::turkey->name => 'resources/assets/images/pictos/turkey.jpg',
|
||||
self::hen->name => 'resources/assets/images/pictos/hen_and_rooster.jpg',
|
||||
self::duck->name => 'resources/assets/images/pictos/duck.jpg',
|
||||
self::rabbit->name => 'resources/assets/images/pictos/rabbit.jpg',
|
||||
self::guinea_fowl->name => 'resources/assets/images/pictos/guinea_fowl.jpg',
|
||||
self::rooster->name => 'resources/assets/images/pictos/hen_and_rooster.jpg',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get picture path
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function picture(): string
|
||||
{
|
||||
return self::PICTURES[$this->name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Alt attributes for pictures.
|
||||
*/
|
||||
private const ALTS = [
|
||||
self::chicken->name => 'Pictogramme pour la catégorie \'poulet\'',
|
||||
self::turkey->name => 'Pictogramme pour la catégorie \'dinde\'',
|
||||
self::hen->name => 'Pictogramme pour la catégorie \'poule\'',
|
||||
self::duck->name => 'Pictogramme pour la catégorie \'canard\'',
|
||||
self::rabbit->name => 'Pictogramme pour la catégorie \'lapin\'',
|
||||
self::guinea_fowl->name => 'Pictogramme pour la catégorie \'pintade\'',
|
||||
self::rooster->name => 'Pictogramme pour la catégorie \'coq\'',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get picture alt attribute
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function alt(): string
|
||||
{
|
||||
return self::ALTS[$this->name];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Alt attributes for pictures.
|
||||
*/
|
||||
private const TITLES = [
|
||||
self::chicken->name => 'Pictogramme pour la catégorie \'poulet\'',
|
||||
self::turkey->name => 'Pictogramme pour la catégorie \'dinde\'',
|
||||
self::hen->name => 'Pictogramme pour la catégorie \'poule\'',
|
||||
self::duck->name => 'Pictogramme pour la catégorie \'canard\'',
|
||||
self::rabbit->name => 'Pictogramme pour la catégorie \'lapin\'',
|
||||
self::guinea_fowl->name => 'Pictogramme pour la catégorie \'pintade\'',
|
||||
self::rooster->name => 'Pictogramme pour la catégorie \'coq\'',
|
||||
];
|
||||
|
||||
/**
|
||||
* Get picture alt attribute
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function title(): string
|
||||
{
|
||||
return self::TITLES[$this->name];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ enum StaticPageType: int
|
|||
// @phpcs:enable
|
||||
return match ($this) {
|
||||
self::contact => false,
|
||||
self::legals => false,
|
||||
self::legals => true,
|
||||
self::confidentiality => true,
|
||||
self::home => false,
|
||||
self::unveil => false,
|
||||
|
|
|
|||
|
|
@ -42,15 +42,13 @@ class SiteController extends Controller
|
|||
$siteModels,
|
||||
$search,
|
||||
null,
|
||||
'title',
|
||||
'introduction',
|
||||
'content',
|
||||
'name',
|
||||
'description',
|
||||
);
|
||||
}
|
||||
$searchFields = \implode(', ', [
|
||||
Str::ucfirst(trans('validation.attributes.title')),
|
||||
trans('validation.custom.introduction'),
|
||||
trans('validation.attributes.content'),
|
||||
Str::ucfirst(trans('validation.attributes.name')),
|
||||
trans('validation.attributes.description'),
|
||||
]);
|
||||
|
||||
/** Sort columns with a query */
|
||||
|
|
|
|||
|
|
@ -61,6 +61,8 @@ class SecureHeaders
|
|||
"img-src 'self' data: blob: " . implode(' ', [
|
||||
// * Leaftlet With OpenStreetmaps
|
||||
'https://tile.openstreetmap.org',
|
||||
// * Youtube thumbnails
|
||||
'https://img.youtube.com/vi/',
|
||||
// * VITE DEV
|
||||
config('app.debug') ? "https://{$host}:4443" : '',
|
||||
]) . ';',
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ class StoreNewsRequest extends FormRequest
|
|||
return \array_merge(
|
||||
$rules,
|
||||
$this->pictureRules('picture', 500, 390, 500, 390, true),
|
||||
$this->pictureRules('thumbnail', 300, 200, 300, 200, true),
|
||||
$this->pictureRules('thumbnail', 660, 440, 660, 440, true),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,9 @@ class UpdateSectionRequest extends UpdateMiniCrudRequest
|
|||
/** @var \App\Models\Section|null $section */
|
||||
$section = $this->route('section');
|
||||
if ($section) {
|
||||
if ($section->section !== \App\Enums\Sections\PageSectionEnum::hire_grow) {
|
||||
if (
|
||||
$section->section !== \App\Enums\Sections\PageSectionEnum::hire_grow
|
||||
) {
|
||||
$rules = \array_merge($rules, [
|
||||
'text' => 'present',
|
||||
]);
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
namespace App\Http\Requests\Bo\Strips;
|
||||
|
||||
use App\Rules\WysiwygLength;
|
||||
use App\Traits\Requests\HasPicture;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rules\Enum;
|
||||
|
||||
class StoreStripRequest extends FormRequest
|
||||
|
|
@ -48,16 +48,7 @@ class StoreStripRequest extends FormRequest
|
|||
'text' => [
|
||||
'required',
|
||||
'string',
|
||||
'min:3',
|
||||
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed
|
||||
function (string $attribute, mixed $value, \Closure $fail) {
|
||||
if (Str::wordCount(\strip_tags($value)) > 255) {
|
||||
$fail(trans('validation.max_words', [
|
||||
'attribute' => trans('validation.attributes.text'),
|
||||
'count' => '255'
|
||||
]));
|
||||
}
|
||||
}
|
||||
new WysiwygLength(3, 90),
|
||||
],
|
||||
'news_id' => 'nullable|exists:news,id',
|
||||
'published' => 'required|boolean',
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ abstract class UpdateMiniCrudRequest extends FormRequest
|
|||
]);
|
||||
break;
|
||||
case InputType::image->value:
|
||||
$required = $this->isUpdate() ? 'sometimes' : 'required';
|
||||
$required = $this->isUpdate() ? 'sometimes' : ($input['required'] ? 'required' : 'nullable');
|
||||
$ipt = $this->data[$iptName];
|
||||
$max = isset($ipt['dimensionsMax']);
|
||||
$dim = \is_string($input['dimensions']) ? collect(explode(
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ class Section extends Model
|
|||
$model->text = FileStorageHelper::storeModelFilesFromHtml($model, $model->text);
|
||||
});
|
||||
static::updated(function (self $model) {
|
||||
$model->minicrudUpdated();
|
||||
FileStorageHelper::removeOldModelFilesFromHtml(
|
||||
$model->text,
|
||||
ToolboxHelper::getOriginal($model, 'text')
|
||||
|
|
@ -196,18 +197,41 @@ class Section extends Model
|
|||
/**
|
||||
* Empty bloc for the button boolean.
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $name
|
||||
* @param array $data
|
||||
* @param string $name
|
||||
* @param boolean $value
|
||||
* @return array
|
||||
*/
|
||||
public static function emptyButtonBooleanBloc(
|
||||
array $data,
|
||||
string $name
|
||||
string $name,
|
||||
bool $value = false
|
||||
): array {
|
||||
$data['bloc_button_' . Str::of($name)->snake()->ascii()->remove(['\'', '-'])] = [
|
||||
'label' => "Afficher le bouton '{$name}' ?",
|
||||
'inputType' => InputType::boolean->value,
|
||||
'value' => false
|
||||
'value' => $value
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Empty bloc for a boolean.
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $name
|
||||
* @param boolean $value
|
||||
* @return array
|
||||
*/
|
||||
public static function emptyBooleanBloc(
|
||||
array $data,
|
||||
string $name,
|
||||
bool $value = false
|
||||
): array {
|
||||
$data['bloc_boolean_' . Str::of($name)->snake()->ascii()->remove(['\'', '-'])] = [
|
||||
'label' => "{$name} ?",
|
||||
'inputType' => InputType::boolean->value,
|
||||
'value' => $value
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
|
|
|
|||
83
app/Rules/WysiwygLength.php
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
|
||||
namespace App\Rules;
|
||||
|
||||
use Illuminate\Contracts\Validation\ValidationRule;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
/**
|
||||
* Check the length of a Wysiwyg field, excluding tags and end spaces.
|
||||
*
|
||||
* @package App\Rules
|
||||
*/
|
||||
class WysiwygLength implements ValidationRule
|
||||
{
|
||||
/**
|
||||
* Construct method.
|
||||
*
|
||||
* @param integer $min The minimum length of the content (excluding tags). Default is 15.
|
||||
* @param integer|null $max The maximum length of the content (excluding tags).
|
||||
* Default is null (max will be defined by the type of the column in DB).
|
||||
* @return void
|
||||
* @throws \InvalidArgumentException If $max < $min.
|
||||
*/
|
||||
public function __construct(private int $min = 15, private int|null $max = null)
|
||||
{
|
||||
if ($max !== null && $max < $min && $min < 0) {
|
||||
throw new \InvalidArgumentException(sprintf(
|
||||
'$max should be higher than $min. $max = %d. $min = %d.',
|
||||
$max,
|
||||
$min
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the validation rule.
|
||||
*
|
||||
* @param string $attribute
|
||||
* @param mixed $value
|
||||
* @param \Closure $fail
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function validate(string $attribute, mixed $value, \Closure $fail): void
|
||||
{
|
||||
$length = Str::length(\strip_tags($value));
|
||||
|
||||
$translatedAttribute = self::getTranslatedAttribute($attribute);
|
||||
if (!\is_null($this->max) and !($length >= $this->min && $length <= $this->max)) {
|
||||
$fail(trans('validation.between.string', [
|
||||
'attribute' => $translatedAttribute,
|
||||
'min' => $this->min,
|
||||
'max' => $this->max
|
||||
]));
|
||||
return;
|
||||
}
|
||||
if ($length < $this->min) {
|
||||
$fail(trans('validation.min.string', [
|
||||
'attribute' => $translatedAttribute,
|
||||
'min' => $this->min
|
||||
]));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the correct translation for the given attrribute.
|
||||
*
|
||||
* @param string $attribute
|
||||
* @return string
|
||||
*/
|
||||
private static function getTranslatedAttribute(string $attribute): string
|
||||
{
|
||||
/** @var \Illuminate\Translation\Translator $trans */
|
||||
$trans = trans();
|
||||
if ($trans->has('validation.attributes.' . $attribute)) {
|
||||
return trans('validation.attributes.' . $attribute);
|
||||
}
|
||||
if ($trans->has('validation.custom.' . $attribute)) {
|
||||
return trans('validation.custom.' . $attribute);
|
||||
}
|
||||
return $attribute;
|
||||
}
|
||||
}
|
||||
|
|
@ -39,8 +39,8 @@ trait MiniCrudModel
|
|||
foreach ($data as &$input) {
|
||||
switch ($input['inputType']) {
|
||||
case InputType::text->value:
|
||||
$input['text'] = clean($input['text']);
|
||||
$input['text'] = FileStorageHelper::storeModelFilesFromHtml($this, $input['text']);
|
||||
$input['value'] = clean($input['value']);
|
||||
$input['value'] = FileStorageHelper::storeModelFilesFromHtml($this, $input['value']);
|
||||
break;
|
||||
} //end switch
|
||||
} //end foreach
|
||||
|
|
@ -70,8 +70,15 @@ trait MiniCrudModel
|
|||
case InputType::text->value:
|
||||
$original = ToolboxHelper::getOriginal($this, 'data');
|
||||
FileStorageHelper::removeOldModelFilesFromHtml(
|
||||
$input['text'],
|
||||
$original[$index]['text'] ?? ''
|
||||
$input['value'],
|
||||
$original[$index]['value'] ?? ''
|
||||
);
|
||||
break;
|
||||
case InputType::image->value:
|
||||
$original = ToolboxHelper::getOriginal($this, 'data');
|
||||
FileStorageHelper::removeOldFiles(
|
||||
[$original[$index]['value']],
|
||||
[$input['value']]
|
||||
);
|
||||
break;
|
||||
} //end switch
|
||||
|
|
@ -85,11 +92,18 @@ trait MiniCrudModel
|
|||
*/
|
||||
public function minicrudDeleted(): void
|
||||
{
|
||||
/** @var array */
|
||||
foreach ($this->data as $input) {
|
||||
/** @var array $input */
|
||||
foreach ($this->data as $index => $input) {
|
||||
switch ($input['inputType']) {
|
||||
case InputType::text->value:
|
||||
FileStorageHelper::removeModelFilesOfHtml($input['text']);
|
||||
FileStorageHelper::removeModelFilesOfHtml($input['value']);
|
||||
break;
|
||||
case InputType::image->value:
|
||||
$original = ToolboxHelper::getOriginal($this, 'data');
|
||||
FileStorageHelper::removeOldFiles(
|
||||
[$original[$index]['value']],
|
||||
[]
|
||||
);
|
||||
break;
|
||||
} //end switch
|
||||
} //end foreach
|
||||
|
|
|
|||
|
|
@ -4,9 +4,7 @@ use App\Enums\Sections\PageSectionEnum;
|
|||
use App\Lib\Helpers\FileStorageHelper;
|
||||
use App\Models\Section;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
|
||||
use App\Enums\Sections\PageSectionEnum;
|
||||
use App\Models\Section;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Collection::macro('insertAfter', function ($target, $value, $new_key = null) {
|
||||
if (is_int($target)) {
|
||||
$this->items = array_merge(array_slice($this->items, 0, $target + 1), [$value], array_slice($this->items, $target + 1));
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($this->items as $key => $old) {
|
||||
$new[$key] = $old;
|
||||
if ($key === $target && is_null($new_key)) {
|
||||
$new[] = $value;
|
||||
} elseif ($key === $target) {
|
||||
$new[$new_key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$this->items = $new;
|
||||
});
|
||||
|
||||
$hireSection = Section::query()->where('section', PageSectionEnum::hire_find)->first();
|
||||
if ($hireSection) {
|
||||
$data = collect($hireSection->data);
|
||||
$bloc = collect(Section::emptyBooleanBloc(
|
||||
[],
|
||||
"Afficher l'image",
|
||||
true
|
||||
))->first();
|
||||
$data->insertAfter(
|
||||
"bloc_contenu_n1_content",
|
||||
$bloc,
|
||||
"bloc_button_display_picture"
|
||||
);
|
||||
$hireSection->data = $data->all();
|
||||
$hireSection->saveQuietly();
|
||||
} //end if
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$hireSection = Section::query()->where('section', PageSectionEnum::hire_find)->first();
|
||||
if ($hireSection) {
|
||||
$data = collect($hireSection->data);
|
||||
$data->forget("bloc_button_display_picture");
|
||||
$hireSection->data = $data->all();
|
||||
$hireSection->saveQuietly();
|
||||
} //end if
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
<?php
|
||||
|
||||
use App\Enums\Sections\PageSectionEnum;
|
||||
use App\Models\Section;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Collection::macro('insertAfter', function ($target, $value, $new_key = null) {
|
||||
if (is_int($target)) {
|
||||
$this->items = array_merge(array_slice($this->items, 0, $target + 1), [$value], array_slice($this->items, $target + 1));
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($this->items as $key => $old) {
|
||||
$new[$key] = $old;
|
||||
if ($key === $target && is_null($new_key)) {
|
||||
$new[] = $value;
|
||||
} elseif ($key === $target) {
|
||||
$new[$new_key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$this->items = $new;
|
||||
});
|
||||
|
||||
$commitSection = Section::query()->where('section', PageSectionEnum::commit_commitments)->first();
|
||||
if ($commitSection) {
|
||||
$data = collect($commitSection->data);
|
||||
$bloc = collect(Section::emptyLinkNewTabBloc(
|
||||
[],
|
||||
"le rapport"
|
||||
))->first();
|
||||
$data->insertAfter(
|
||||
"bloc_link",
|
||||
$bloc,
|
||||
"bloc_link_new_tab"
|
||||
);
|
||||
$commitSection->data = $data->all();
|
||||
$commitSection->saveQuietly();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$commitSection = Section::query()->where('section', PageSectionEnum::commit_commitments)->first();
|
||||
if ($commitSection) {
|
||||
$data = collect($commitSection->data);
|
||||
$data->forget("bloc_link_new_tab");
|
||||
$commitSection->data = $data->all();
|
||||
$commitSection->saveQuietly();
|
||||
}
|
||||
}
|
||||
};
|
||||
8
package-lock.json
generated
|
|
@ -13,7 +13,7 @@
|
|||
"@fortawesome/free-regular-svg-icons": "^6.5.1",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.5.1",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.5",
|
||||
"@ldc-web/cookie-notice": "^4.0.1",
|
||||
"@ldc-web/cookie-notice": "^6.0.3",
|
||||
"@sipec/vue3-tags-input": "^3.0.4",
|
||||
"@types/bootstrap": "^5.2.7",
|
||||
"@types/leaflet": "^1.9.8",
|
||||
|
|
@ -1069,9 +1069,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/@ldc-web/cookie-notice": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://lab.s-web.fr/api/v4/projects/50/packages/npm/@ldc-web/cookie-notice/-/@ldc-web/cookie-notice-4.0.1.tgz",
|
||||
"integrity": "sha1-NvTFoKF7Ki/+3PDr9hmqjjTFuZE=",
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://lab.s-web.fr/api/v4/projects/50/packages/npm/@ldc-web/cookie-notice/-/@ldc-web/cookie-notice-6.0.3.tgz",
|
||||
"integrity": "sha1-mW2DD+8ipWkmvKhZ3m9h5wemAHI=",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@nodelib/fs.scandir": {
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
"@fortawesome/free-regular-svg-icons": "^6.5.1",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.5.1",
|
||||
"@fortawesome/vue-fontawesome": "^3.0.5",
|
||||
"@ldc-web/cookie-notice": "^4.0.1",
|
||||
"@ldc-web/cookie-notice": "^6.0.3",
|
||||
"@sipec/vue3-tags-input": "^3.0.4",
|
||||
"@types/bootstrap": "^5.2.7",
|
||||
"@types/leaflet": "^1.9.8",
|
||||
|
|
|
|||
BIN
resources/assets/images/banners/we_commit.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
resources/assets/images/banners/we_listen.png
Normal file
|
After Width: | Height: | Size: 470 KiB |
BIN
resources/assets/images/banners/we_move.jpg
Normal file
|
After Width: | Height: | Size: 430 KiB |
BIN
resources/assets/images/banners/we_produce.png
Normal file
|
After Width: | Height: | Size: 1.8 MiB |
BIN
resources/assets/images/banners/we_unveil.jpeg
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
resources/assets/images/pictos/chicken.jpg
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
resources/assets/images/pictos/duck.jpg
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
resources/assets/images/pictos/guinea_fowl.jpg
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
resources/assets/images/pictos/hen_and_rooster.jpg
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
resources/assets/images/pictos/rabbit.jpg
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
resources/assets/images/pictos/turkey.jpg
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
|
|
@ -1,32 +1,27 @@
|
|||
<?php
|
||||
|
||||
// * Version 4.0.1
|
||||
// * Version 6.0.4
|
||||
// phpcs:disable
|
||||
return [
|
||||
'button_customize_cookies' => 'Personnaliser les cookies',
|
||||
'button_close_cookies' => 'Fermer la fenêtre des cookies',
|
||||
'button_forbid' => 'Interdire',
|
||||
'button_allow' => 'Autoriser',
|
||||
'button_toggle_cookie' => 'Autoriser ou refuser',
|
||||
'button_forbid_all' => 'Tout refuser',
|
||||
'button_allow_all' => 'Tout accepter',
|
||||
'button_forbid_all_title' => 'Refuser tous les cookies et fermer le panneau des cookies',
|
||||
'button_allow_all_title' => 'Accepter tous les cookies et fermer le panneau des cookies',
|
||||
'button_customize' => 'Personnaliser',
|
||||
'button_back' => 'Retour',
|
||||
'button_validate_and_close' => 'Valider et fermer',
|
||||
'button_title_open_new_tab' => 'Ouvrir le lien dans un nouvel onglet',
|
||||
'banner_title' => 'Le site internet :site_name utilise des cookies !',
|
||||
'banner_text' => 'Nous utilisons des cookies pour nous assurer du bon fonctionnement de notre site et à des fins analytiques.
|
||||
Vous pouvez changer d’avis à tout moment en cliquant sur l’icône présente sur chaque page de notre site.
|
||||
En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l’utilisation de technologies de suivi nécessaires à leur bon fonctionnement.',
|
||||
'modal_title' => 'Fenêtre de gestion de cookies',
|
||||
'panel_title' => 'Panneau de gestion des cookies',
|
||||
'panel_content' => 'Contenu du panneau des cookies',
|
||||
'panel_subtitle' => 'Le respect de votre vie privée est notre priorité',
|
||||
'panel_details' => 'Les fonctionnalités de ce site s’appuient sur des services proposés par des tiers. Si vous acceptez, ces tiers déposeront des cookies qui vous permettront de visualiser sur le site du contenu hébergé par ces tiers. Via ces cookies, ces tiers collecteront et utiliseront vos données de navigation pour des finalités qui leur sont propres, conformément à leur politique de confidentialité (lien ci-dessous). Cette page vous permet de donner ou de retirer votre consentement, soit globalement soit service par service.',
|
||||
'picture_cookie_title' => 'Image d’un bon gros cookie',
|
||||
'navigation_title' => 'Navigation du panneau des cookies',
|
||||
'custom' => [
|
||||
'frame' => 'Vous devez accepter les cookies pour visionner cette vidéo',
|
||||
'analytics' => [
|
||||
'title' => 'Google Analytics',
|
||||
'description' => 'Les services de mesure d’audience permettent de générer des statistiques de fréquentation utiles à l’amélioration du site.',
|
||||
|
|
@ -46,7 +41,7 @@ return [
|
|||
'title' => 'reCAPTCHA',
|
||||
'description' => 'Les cookies qui sont déposés via le recaptcha sur les formulaires ont pour finalité d’empêcher que ceux-ci ne soient soumis par des robots.',
|
||||
'labelLink' => 'En apprendre plus',
|
||||
'warning' => 'Vous devez accepter les cookies pour envoyer le formulaire',
|
||||
'warning' => 'Vous devez accepter les cookies reCAPTCHA pour envoyer le formulaire',
|
||||
]
|
||||
]
|
||||
];
|
||||
|
|
|
|||
|
|
@ -24,3 +24,6 @@
|
|||
@import "./pages/unveil";
|
||||
@import "./pages/news";
|
||||
@import "./pages/hire";
|
||||
|
||||
// * PARTIALS
|
||||
@import "./partials/slider";
|
||||
|
|
|
|||
|
|
@ -11,9 +11,12 @@
|
|||
.swiper-sites-brands {
|
||||
clip-path: inset(-2rem -50vw 0 0);
|
||||
|
||||
.separator {
|
||||
border-right: 1px solid;
|
||||
border-right-color: #ddd;
|
||||
.swiper-slide {
|
||||
padding: 0 1rem;
|
||||
|
||||
&:not(:last-child) {
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,14 +86,15 @@
|
|||
}
|
||||
|
||||
.picture {
|
||||
z-index: 0;
|
||||
top: 3rem;
|
||||
left: -3rem;
|
||||
max-height: 70%;
|
||||
transform: rotate(-15deg);
|
||||
width: auto;
|
||||
max-height: 20rem;
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
z-index: 0;
|
||||
top: 3rem;
|
||||
left: 2rem;
|
||||
max-height: 70%;
|
||||
transform: rotate(-15deg);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
17
resources/sass/fo/partials/_slider.scss
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
.swiper-sites-map {
|
||||
.swiper-slide {
|
||||
.ck-content {
|
||||
height: 3em;
|
||||
}
|
||||
|
||||
.site-title {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
height: 2.5em;
|
||||
max-height: 2.5em;
|
||||
line-height: 1.2em;
|
||||
text-overflow: ellipsis;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -136,7 +136,6 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
modules: [Navigation],
|
||||
grabCursor: true,
|
||||
slidesPerView: 1.2,
|
||||
centeredSlides: true,
|
||||
spaceBetween: 10,
|
||||
navigation: {
|
||||
nextEl: ".testi-next",
|
||||
|
|
@ -154,6 +153,8 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
1200: {
|
||||
slidesPerView: 3,
|
||||
spaceBetween: 20,
|
||||
initialSlide: 1,
|
||||
centerInsufficientSlides: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -245,7 +246,8 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
"swiper-sites-brands": {
|
||||
modules: [Navigation, Keyboard],
|
||||
grabCursor: true,
|
||||
slidesPerView: "auto",
|
||||
slidesPerView: 2,
|
||||
centerInsufficientSlides: true,
|
||||
keyboard: {
|
||||
enabled: true,
|
||||
},
|
||||
|
|
@ -347,6 +349,15 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
(swiper.autoplay.paused) ? swiper.autoplay.start() : swiper.autoplay.pause();
|
||||
});
|
||||
}
|
||||
// Specific behaviour for sites.show.
|
||||
if (swiper.el.id === "swiper-sites-map" && window.location.pathname.startsWith("/sites/")) {
|
||||
for (const slide of swiper.slides) {
|
||||
// Slide to the correct slide
|
||||
if (slide.dataset.indextoslide) {
|
||||
swiper.slideTo(Number(slide.dataset.indextoslide));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GoToTop Button
|
||||
|
|
|
|||
|
|
@ -5,9 +5,11 @@ document.addEventListener("DOMContentLoaded", function () {
|
|||
}
|
||||
|
||||
const button = document.querySelector(".commit-navigation .btn") as HTMLButtonElement;
|
||||
const navWrapper = document.querySelector(".commit-navigation-wrapper") as HTMLDivElement;
|
||||
const navWrapper = document.querySelectorAll(".commit-navigation-wrapper ");
|
||||
button.addEventListener("click", () => {
|
||||
navWrapper.classList.toggle("show");
|
||||
navWrapper.forEach((element: Element) => {
|
||||
element.classList.toggle("show");
|
||||
});
|
||||
document.querySelectorAll(".commit-navigation .btn svg").forEach(icon => {
|
||||
icon.classList.toggle("d-none");
|
||||
});
|
||||
|
|
|
|||
|
|
@ -318,12 +318,12 @@
|
|||
@include('bo.partials.inputs.varchar-picture', [
|
||||
'id' => 'newsPictureThumbnail',
|
||||
'name' => 'thumbnail',
|
||||
'width' => 300,
|
||||
'height' => 200,
|
||||
'width' => 660,
|
||||
'height' => 440,
|
||||
'model' => $newsModel ?? null,
|
||||
'helper' => __('crud.minicrud.dimensions_must_be', [
|
||||
'widthpx' => '300px',
|
||||
'heightpx' => '200px',
|
||||
'widthpx' => '660px',
|
||||
'heightpx' => '440px',
|
||||
]),
|
||||
'required' => true,
|
||||
'preview' => true,
|
||||
|
|
|
|||
|
|
@ -7,11 +7,6 @@
|
|||
<img id="background-{{ $loop->index }}" src="{{ asset($slideModel->picture) }}" title="{{ $slideModel->picture_title }}"
|
||||
alt="{{ $slideModel->picture_alt }}">
|
||||
<div class="text-parts d-flex flex-column align-items-center w-75">
|
||||
@if ($loop->first)
|
||||
<img class="d-lg-none logo" src="{{ Vite::asset('resources/assets/images/header/volena-logo.svg') }}"
|
||||
title="{{ __('Logo :app', ['app' => config('app.name')]) }}"
|
||||
alt="{{ __('Logo :app', ['app' => config('app.name')]) }}">
|
||||
@endif
|
||||
@if (!empty($slideModel->title))
|
||||
<h2 class="fs-1 text-center">{{ $slideModel->title }}</h2>
|
||||
@endif
|
||||
|
|
@ -24,7 +19,7 @@
|
|||
@endif
|
||||
</div>
|
||||
@isset($displayArrow)
|
||||
<a class="banner-arrow d-none d-sm-block rounded-pill border-0" href="{{ $buttonLink }}">
|
||||
<a class="banner-arrow rounded-pill border-0" href="{{ $buttonLink }}">
|
||||
<img class="img-fluid" src="{{ Vite::asset('resources/assets/images/misc/banner-arrow.svg') }}" role="img"
|
||||
aria-label="{{ __('Flèche pointant vers le bas') }}">
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
@empty($noOverlay)
|
||||
<div class="overlay"></div>
|
||||
@endempty
|
||||
<div class="text-parts">
|
||||
<div class="text-parts w-75 text-center">
|
||||
<h1 class="m-0">{{ $h1 }}</h1>
|
||||
@if (!empty($span))
|
||||
<span class="h4">{{ $span }}</span>
|
||||
|
|
|
|||
|
|
@ -22,13 +22,13 @@
|
|||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col text-center">
|
||||
<a class="text-decoration-none btn btn-link mx-2" href="FIXME:#chaine-youtube"
|
||||
<a class="text-decoration-none btn btn-link mx-2" href="https://www.youtube.com/@Volena-ldc"
|
||||
title="{{ __('Aller sur la chaine Youtube') }}" target="_blank">
|
||||
<img src="{{ Vite::asset('resources/assets/images/social/youtube-blanc.svg') }}" alt="{{ __('Youtube') }}"
|
||||
role="img">
|
||||
</a>
|
||||
<a class="text-decoration-none btn btn-link mx-2" href="FIXME:#linked" title="{{ __('Aller sur le profile LinkedIn') }}"
|
||||
target="_blank">
|
||||
<a class="text-decoration-none btn btn-link mx-2" href="https://www.linkedin.com/company/s-n-v/?viewAsMember=true"
|
||||
title="{{ __('Aller sur le profile LinkedIn') }}" target="_blank">
|
||||
<img src="{{ Vite::asset('resources/assets/images/social/linkedin-blanc.svg') }}" alt="{{ __('LinkedIn') }}"
|
||||
role="img">
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -82,12 +82,12 @@
|
|||
</div>
|
||||
{{-- Socials --}}
|
||||
<div class="border-top border-bottom mx-3 mb-2 px-4 py-2 text-center">
|
||||
<a class="text-decoration-none btn btn-link" href="FIXME:#chaine-youtube" title="{{ __('Aller sur la chaine Youtube') }}"
|
||||
target="_blank">
|
||||
<a class="text-decoration-none btn btn-link" href="https://www.youtube.com/@Volena-ldc"
|
||||
title="{{ __('Aller sur la chaine Youtube') }}" target="_blank">
|
||||
<img src="{{ Vite::asset('resources/assets/images/social/youtube.svg') }}" alt="{{ __('Youtube') }}" role="img"></a>
|
||||
<span class="text-wrap">{{ __('Retrouvez nous sur les réseaux sociaux') }}</span>
|
||||
<a class="text-decoration-none btn btn-link" href="FIXME:#linked" title="{{ __('Aller sur le profile LinkedIn') }}"
|
||||
target="_blank">
|
||||
<a class="text-decoration-none btn btn-link" href="https://www.linkedin.com/company/s-n-v/?viewAsMember=true"
|
||||
title="{{ __('Aller sur le profile LinkedIn') }}" target="_blank">
|
||||
<img src="{{ Vite::asset('resources/assets/images/social/linkedin.svg') }}" alt="{{ __('LinkedIn') }}" role="img">
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
@section('banner')
|
||||
@include('fo.layouts.banner', [
|
||||
'h1' => __($staticPageModel->title),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/home_reworked.jpg'),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/we_commit.png'),
|
||||
'title' => __('Paysage d\'un champs de blé au soleil couchant avec une lisière en fond de tableau'),
|
||||
'alt' => __('Image de fond'),
|
||||
'displayArrow' => true,
|
||||
|
|
@ -185,7 +185,7 @@
|
|||
alt="{{ $slide->picture_alt }}">
|
||||
</div>
|
||||
<div class="card-footer bg-transparent">
|
||||
<p class="m-0 text-center">{{ $slide->content }}</p>
|
||||
<p class="m-0 text-center">{{ $slide->title }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -329,10 +329,12 @@
|
|||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-8 mx-auto">
|
||||
<h2 class="h2 fw-bold text-sixt text-center">{{ $feedSection->h2_title }}</h2>
|
||||
<img class="my-3" src="{{ Vite::asset('resources/assets/images/commitments/feed.png') }}"
|
||||
title="{{ __('Illustration de l\'engagement \'Bien nourrir\'') }}"
|
||||
alt="{{ __('Illustration d\'une femme et d\'un enfant mangeant un délicieux repas') }}">
|
||||
<div class="d-flex flex-column align-items-center">
|
||||
<h2 class="h2 fw-bold text-sixt text-center">{{ $feedSection->h2_title }}</h2>
|
||||
<img class="my-3" src="{{ Vite::asset('resources/assets/images/commitments/feed.png') }}"
|
||||
title="{{ __('Illustration de l\'engagement \'Bien nourrir\'') }}"
|
||||
alt="{{ __('Illustration d\'une femme et d\'un enfant mangeant un délicieux repas') }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-md-between align-items-center">
|
||||
|
|
|
|||
|
|
@ -70,15 +70,16 @@
|
|||
@foreach ($videoModels as $video)
|
||||
<div class="swiper-slide h-auto">
|
||||
<figure>
|
||||
<div class="d-md-flex justify-content-center">
|
||||
<div class="d-md-flex justify-content-center cn-youtube">
|
||||
@include('fo.modules.video-frame', [
|
||||
'type' => 'youtube',
|
||||
'title' => __('Visionner la vidéo'),
|
||||
'videoId' => $video->video_id,
|
||||
'picture' => Vite::asset(
|
||||
'resources/assets/images/others/background_video.png'),
|
||||
'picture' => sprintf(
|
||||
'https://img.youtube.com/vi/%s/maxresdefault.jpg',
|
||||
$video->video_id),
|
||||
'alt' => __('Video_about_who_we_are'),
|
||||
'linkNewTab' => false,
|
||||
'linkNewTab' => true,
|
||||
])
|
||||
</div>
|
||||
<figcaption class="text-center">
|
||||
|
|
@ -100,7 +101,7 @@
|
|||
</div>
|
||||
<div class="col-12 mt-5 text-center">
|
||||
<a class="btn rounded-pill fw-semibold border-primary text-primary text-initial border border-2"
|
||||
href="https://www.youtube.com/watch?v=x8ENDjHsehY" title="{{ __('Lien vers YouTube') }}" target="blank">
|
||||
href="https://www.youtube.com/@Volena-ldc" title="{{ __('Lien vers YouTube') }}" target="blank">
|
||||
{{ __('Voir toutes les vidéos') }}
|
||||
<img src="{{ Vite::asset('resources/assets/images/misc/blue-arrow.svg') }}" />
|
||||
</a>
|
||||
|
|
@ -259,12 +260,6 @@
|
|||
{!! clean($paritySection->data['bloc_contenu_n2_content']['value']) !!}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 w-lg-75 my-3">
|
||||
<div class="text-center">
|
||||
<img class="card-img-top p-2" src="{{ Vite::asset('resources/assets/images/infographie.png') }}"
|
||||
alt="{{ __('Schéma des activités') }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 my-3">
|
||||
<div class="card bg-tertiary-light">
|
||||
<img class="card-img-top rounded-top-4 p-2" src="{{ $paritySection->data['bloc_image_n2']['value'] }}"
|
||||
|
|
@ -295,7 +290,15 @@
|
|||
<div class="container">
|
||||
<div class="row text-primary text-center">
|
||||
<div class="col-12 mb-3">
|
||||
<h2 class="fw-bold">{{ $findSection->data['bloc_string_titre_h3_de_la_section']['value'] }}</h2>
|
||||
<h2 class="fw-bold">{{ $findSection->h2_title }}</h2>
|
||||
</div>
|
||||
<div class="col-10 offset-1">
|
||||
<div class="ck-content mb-5">
|
||||
{!! clean($findSection->text) !!}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 mb-3">
|
||||
<h3 class="fw-bold">{{ $findSection->data['bloc_string_titre_h3_de_la_section']['value'] }}</h3>
|
||||
</div>
|
||||
<div class="col-10 offset-1">
|
||||
<div class="ck-content mb-5">
|
||||
|
|
@ -303,13 +306,15 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12 text-center">
|
||||
<img class="img-fluid rounded-4 find-img"
|
||||
src="{{ Vite::asset('resources/assets/images/banners/alternative_banner_reworked.jpg') }}"
|
||||
title="{{ $findSection->data['bloc_image']['title'] }}" alt="{{ $findSection->data['bloc_image']['alt'] }}">
|
||||
@if ($findSection->data['bloc_button_display_picture']['value'])
|
||||
<div class="row">
|
||||
<div class="col-12 text-center">
|
||||
<img class="img-fluid rounded-4 find-img" src="{{ asset($findSection->data['bloc_image']['value']) }}"
|
||||
title="{{ $findSection->data['bloc_image']['title'] }}"
|
||||
alt="{{ $findSection->data['bloc_image']['alt'] }}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
<div class="row text-primary row-gap-3 mt-4 text-center">
|
||||
<div class="col-12 fw-bolder fs-4 mb-2">
|
||||
{{ __('Nos offres: ') }}
|
||||
|
|
|
|||
|
|
@ -61,14 +61,14 @@
|
|||
<div class="row align-items-center mt-5">
|
||||
@if ($missionSection->data['bloc_button_on_se_devoile']['value'])
|
||||
<div class="col-12">
|
||||
<div class="d-flex justify-content-center mt-4">
|
||||
<div class="d-flex justify-content-center my-4">
|
||||
<a class="btn btn-primary rounded-5 fw-bold border-primary border border-2" href="{{ route('fo.unveil.show') }}"
|
||||
title="{{ __('Accéder à la page \'On se dévoile\'') }}">{{ __('On se dévoile') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
<div class="col-12">
|
||||
<div class="d-md-flex justify-content-center">
|
||||
<div class="d-md-flex justify-content-center cn-youtube">
|
||||
@include('fo.modules.video-frame', [
|
||||
'type' => 'youtube',
|
||||
'title' => __('Visionner la vidéo'),
|
||||
|
|
@ -147,9 +147,12 @@
|
|||
<div class="swiper-wrapper">
|
||||
@php
|
||||
$homeTeamData = [
|
||||
'Culture d’entreprise inclusive et collaborative :' => 'Notre entreprise valorise la diversité des perspectives et favorise un environnement où chacun se sent écouté et respecté. Nous croyons en la force de la collaboration et encourageons l’innovation à tous les niveaux.',
|
||||
'Opportunités de développement professionnel :' => 'En nous rejoignant, vous aurez accès à des programmes de formation et de développement pour renforcer vos compétences et progresser dans votre carrière. Nous encourageons la croissance personnelle et professionnelle de nos employés.',
|
||||
'Implication dans des projets innovants :' => 'Nous travaillons sur des projets stimulants et innovants qui offre l’opportunité de faire une réelle différence pour les consommateurs. Rejoindre notre équipe vous permettra de contribuer à des initiatives passionnantes et impactantes.<br><br>Et en plus, on est sympas.',
|
||||
'Culture d’entreprise inclusive et collaborative :' =>
|
||||
'Notre entreprise valorise la diversité des perspectives et favorise un environnement où chacun se sent écouté et respecté. Nous croyons en la force de la collaboration et encourageons l’innovation à tous les niveaux.',
|
||||
'Opportunités de développement professionnel :' =>
|
||||
'En nous rejoignant, vous aurez accès à des programmes de formation et de développement pour renforcer vos compétences et progresser dans votre carrière. Nous encourageons la croissance personnelle et professionnelle de nos employés.',
|
||||
'Implication dans des projets innovants :' =>
|
||||
'Nous travaillons sur des projets stimulants et innovants qui offre l’opportunité de faire une réelle différence pour les consommateurs. Rejoindre notre équipe vous permettra de contribuer à des initiatives passionnantes et impactantes.<br><br>Et en plus, on est sympas.',
|
||||
];
|
||||
@endphp
|
||||
@foreach ($homeTeamData as $title => $text)
|
||||
|
|
@ -255,7 +258,7 @@
|
|||
</section>
|
||||
{{-- STRIP --}}
|
||||
@if ($stripModels->isNotEmpty())
|
||||
<section class="strip bg-quad d-flex sticky-lg-bottom z-2 mt-5 overflow-hidden text-black">
|
||||
<section class="strip bg-quad d-flex sticky-bottom z-2 mt-5 overflow-hidden text-black">
|
||||
<div class="moving-strip d-flex" id="moving-strip">
|
||||
@foreach ($stripModels as $stripModel)
|
||||
@include('fo.partials.strips.strip-item')
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
@section('banner')
|
||||
@include('fo.layouts.banner', [
|
||||
'h1' => __($staticPageModel->title),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/home_reworked.jpg'),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/we_listen.png'),
|
||||
'title' => __('Paysage d\'un champs de blé au soleil couchant avec une lisière en fond de tableau'),
|
||||
'alt' => __('Image de fond'),
|
||||
'displayArrow' => true,
|
||||
|
|
@ -21,27 +21,19 @@
|
|||
<a class="btn btn-outline-primary rounded-pill border-primary border shadow-none" href="{{ route('fo.hire.show') }}#on-se-retrouve">
|
||||
{{ __('Je suis candidat') }}
|
||||
</a>
|
||||
<a class="btn btn-outline-primary rounded-pill border-primary my-3 border shadow-none"
|
||||
href="https://recrutement.ldc.fr/fr/annonces?brands=789,591,2727" target="_blank">
|
||||
{{ __('Recrutement') }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="rounded-5 p-md-4" id="wrapper-listen-form">
|
||||
<div class="row m-md-0 p-md-4 my-5 py-5">
|
||||
<div class="col-12 col-lg-4 text-lg-start text-center">
|
||||
{{-- <div class="col-12 col-lg-4 text-lg-start align-self-center">
|
||||
<h2 class="h2 fw-bold text-primary m-0">{{ $staticPageModel->title }}</h2>
|
||||
</div>
|
||||
</div> --}}
|
||||
<div class="d-lg-none col-12 text-center">
|
||||
<a class="btn btn-outline-primary rounded-pill border-primary text-lowercase my-3 border shadow-none"
|
||||
href="{{ route('fo.hire.show') }}#on-se-retrouve">
|
||||
{{ __('Je suis candidat') }}
|
||||
</a>
|
||||
<a class="btn btn-outline-primary rounded-pill border-primary my-3 border shadow-none"
|
||||
href="https://recrutement.ldc.fr/fr/annonces?brands=789,591,2727" target="_blank">
|
||||
{{ __('Recrutement') }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 text-lg-start d-lg-flex align-items-end justify-content-center text-center">
|
||||
<div class="col-12 col-lg-10 text-lg-start d-lg-flex align-items-end justify-content-center text-center">
|
||||
@if ($staticPageModel->content)
|
||||
<div class="ck-content text-primary">
|
||||
{!! clean($staticPageModel->content) !!}
|
||||
|
|
@ -52,14 +44,27 @@
|
|||
<div class="badge-logo bg-primary rounded-pill"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-3 border-primary fw-bold rounded-4 cn-cookie-activate d-flex flex-column flex-md-row mx-3 mb-3 mt-4 border bg-white p-3"
|
||||
data-cookie-name="recaptcha">
|
||||
<span class="d-flex flex-column w-md-75 w-100">
|
||||
<strong class="text-underline text-bold text-primary fs-5 mb-2">
|
||||
{{ __('cookie-notice.custom.recaptcha.warning') }}
|
||||
</strong>
|
||||
<br><br>
|
||||
<small class="text-success fw-normal fs-5">
|
||||
{{ __('Acceptez ce cookie pour utiliser les formulaires') }}
|
||||
</small>
|
||||
</span>
|
||||
<button class="btn btn-primary w-25 h-50 fs-5 rounded-4 mt-md-0 mt-3" id="recaptcha-accept">{{ __('AUTORISER') }}</button>
|
||||
</div>
|
||||
<form class="rounded-4 p-md-3 p-xl-5 p-0" id="listen-form" method="POST" action="{{ route('fo.listen.send') }}"
|
||||
enctype="multipart/form-data">
|
||||
enctype="multipart/form-data" inert>
|
||||
@method('POST')
|
||||
@csrf
|
||||
<div class="position-relative row w-100 gx-0 gx-md-4 mx-auto">
|
||||
<div class="col-12 col-md-6 col-xl-4">
|
||||
<div class="row">
|
||||
<fieldset class="col-12 form-floating mb-3" inert="true">
|
||||
<fieldset class="col-12 form-floating mb-3">
|
||||
<input class="form-control bg-transparent" id="contactSociety" name="society" type="text"
|
||||
value="{{ old('society') }}" placeholder="{{ Str::of(__('validation.custom.society'))->ucFirst() }}">
|
||||
<label for="contactSociety">{{ Str::of(__('validation.custom.society'))->ucFirst() }}</label>
|
||||
|
|
@ -67,7 +72,7 @@
|
|||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@endforeach
|
||||
</fieldset>
|
||||
<fieldset class="col-12 form-floating mb-3" inert="true">
|
||||
<fieldset class="col-12 form-floating mb-3">
|
||||
<input class="form-control bg-transparent" id="contactFirstname" name="first_name" type="text"
|
||||
value="{{ old('first_name') }}"
|
||||
placeholder="{{ Str::of(__('validation.attributes.first_name'))->ucFirst() }}">
|
||||
|
|
@ -76,7 +81,7 @@
|
|||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@endforeach
|
||||
</fieldset>
|
||||
<fieldset class="col-12 form-floating mb-3" inert="true">
|
||||
<fieldset class="col-12 form-floating mb-3">
|
||||
<input class="form-control bg-transparent" id="contactLastname" name="last_name" type="text"
|
||||
value="{{ old('last_name') }}"
|
||||
placeholder="{{ Str::of(__('validation.attributes.last_name'))->ucFirst() }}" required>
|
||||
|
|
@ -85,7 +90,7 @@
|
|||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@endforeach
|
||||
</fieldset>
|
||||
<fieldset class="col-12 form-floating mb-3" inert="true">
|
||||
<fieldset class="col-12 form-floating mb-3">
|
||||
<input class="form-control bg-transparent" id="contactEmail" name="email" type="text"
|
||||
value="{{ old('email') }}" required
|
||||
placeholder="{{ Str::of(__('validation.attributes.email'))->ucFirst() }}">
|
||||
|
|
@ -95,7 +100,7 @@
|
|||
@endforeach
|
||||
</fieldset>
|
||||
<fieldset class="col-12 form-floating mb-3" inert="true">
|
||||
<input class="form-control bg-transparent" id="contactPhone" name="phone" type="number"
|
||||
<input class="form-control bg-transparent" id="contactPhone" name="phone" type="tel"
|
||||
value="{{ old('phone') }}" placeholder="{{ Str::of(__('validation.attributes.phone'))->ucFirst() }}">
|
||||
<label for="contactPhone">{{ Str::of(__('validation.attributes.phone'))->ucFirst() }}</label>
|
||||
@foreach ($errors->get('phone') as $message)
|
||||
|
|
@ -106,7 +111,7 @@
|
|||
</div>
|
||||
<div class="col-12 col-md-6 col-xl-4">
|
||||
<div class="row">
|
||||
<fieldset class="col-12" inert="true">
|
||||
<fieldset class="col-12">
|
||||
<div class="row">
|
||||
<div class="col-6 col-md-12 form-floating mb-3">
|
||||
<input class="form-control bg-transparent" id="contactPostalcode" name="postal_code" type="number"
|
||||
|
|
@ -129,7 +134,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset class="col-12 mb-3" inert="true">
|
||||
<fieldset class="col-12 mb-3">
|
||||
<select class="form-control bg-transparent px-2" id="contactCountry" name="country">
|
||||
<option value="null" selected>
|
||||
{{ __('Sélectionner un :entity', ['entity' => __('validation.attributes.country')]) }}
|
||||
|
|
@ -145,7 +150,7 @@
|
|||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@endforeach
|
||||
</fieldset>
|
||||
<fieldset class="col-12 form-floating mb-3" inert="true">
|
||||
<fieldset class="col-12 form-floating mb-3">
|
||||
<input class="form-control bg-transparent" id="contactAddress" name="address" type="text"
|
||||
value="{{ old('address') }}"
|
||||
placeholder="{{ Str::of(__('validation.attributes.address'))->ucFirst() }}">
|
||||
|
|
@ -158,7 +163,7 @@
|
|||
</div>
|
||||
<fieldset class="col-12 col-xl-4 listen-message rounded-4 p-md-4 d-flex justify-content-center align-items-center p-0">
|
||||
<div class="row">
|
||||
<div class="col-12 form-floating mb-3" inert="true">
|
||||
<div class="col-12 form-floating mb-3">
|
||||
<select class="form-control bg-transparent px-2" id="contactObject" name="object">
|
||||
<option value="null" selected>
|
||||
{{ __('Sélectionner un :entity de mail*', ['entity' => __('validation.custom.object')]) }}
|
||||
|
|
@ -174,7 +179,7 @@
|
|||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<div class="col-12 form-floating mb-3" inert="true">
|
||||
<div class="col-12 form-floating mb-3">
|
||||
<textarea class="form-control bg-transparent" id="contactMessage" name="message" rows="6" placeholder="Leave a comment here"
|
||||
required>{{ old('message') }}</textarea>
|
||||
<label class="ms-2" for="contactMessage">
|
||||
|
|
@ -207,48 +212,18 @@
|
|||
<div class="d-none d-lg-block col-12 col-xl-4 visibility-hidden"></div>
|
||||
<div class="col-12 col-xl-4 py-xl-0 py-4">
|
||||
<div class="row">
|
||||
<fieldset class="col-12 d-flex justify-content-start align-items-start align-items-md-center mb-1 flex-row"
|
||||
inert="true">
|
||||
<input class="form-check-input mt-2 p-2" id="accept_rules" name="accept_rules" type="checkbox"
|
||||
role="button" @if (old('accept_rules')) checked @endif required>
|
||||
<label class="ms-2 mt-1" for="accept_rules" role="button">
|
||||
{!! nl2br(
|
||||
__('J’autorise :appName à traiter mes données personnelles conformément à la :startAPolitique de confidentialité:endA.', [
|
||||
'appName' => config('app.name'),
|
||||
'startA' => '<a href="' . route('fo.confidentiality') . '">',
|
||||
'startA' => '<a href="' . route('fo.confidentiality') . '">',
|
||||
'endA' => '</a>',
|
||||
]),
|
||||
) !!}
|
||||
</label>
|
||||
@foreach ($errors->get('accept_rules') as $message)
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@endforeach
|
||||
</fieldset>
|
||||
<fieldset class="col-12 d-flex justify-content-start align-items-start align-items-md-center mb-1 flex-row"
|
||||
inert="true">
|
||||
<input class="form-check-input mt-2 p-2" id="send_data" name="send_data" type="checkbox" role="button"
|
||||
@if (old('send_data')) checked @endif required>
|
||||
<label class="ms-2 mt-1" for="send_data" role="button">
|
||||
{!! nl2br(
|
||||
__('J\'ai lu et j\'accepte la politique de confidentialité de ce site: :startA Voir nos mentions légales et CGU:endA.', [
|
||||
'startA' => '<a href="' . route('fo.legals') . '">',
|
||||
'endA' => '</a>',
|
||||
]),
|
||||
) !!}
|
||||
</label>
|
||||
@foreach ($errors->get('send_data') as $message)
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@endforeach
|
||||
<fieldset class="col-12 d-flex justify-content-start align-items-start align-items-md-center mb-1 flex-row">
|
||||
<p>
|
||||
{{ __('Les informations recueillies à partir de ce formulaire sont traitées par le Responsable de Traitement pour donner suite à votre demande de contact. Pour connaître vos droits, vous pouvez consulter la') }}
|
||||
<a class="fw-bold text-decoration-underline" href="{{ route('fo.confidentiality') }}"
|
||||
title="{{ __('Consulter la charte de confidentialité') }}">
|
||||
{{ __('Charte de confidentialité') }}
|
||||
</a>
|
||||
</p>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-xl-4">
|
||||
<a class="cn-cookie-link" id="recaptcha-warning" href="" rel="nofollow">
|
||||
<strong class="text-underline text-bold text-normal text-danger">
|
||||
{{ __('cookie-notice.custom.recaptcha.warning') }}
|
||||
</strong>
|
||||
</a>
|
||||
<div class="d-flex flex-column justify-content-center align-items-center">
|
||||
<div id="r_captcha"></div>
|
||||
@if ($errors->has('g-recaptcha-response'))
|
||||
|
|
@ -260,8 +235,8 @@
|
|||
</div>
|
||||
<div class="text-center">
|
||||
<button class="g-recaptcha btn btn-primary rounded-pill text-capitalize"
|
||||
data-sitekey="{{ config('services.google.recaptcha.public') }}" type="submit"
|
||||
inert="true">{{ Str::ucfirst(__('Envoyer')) }}</button>
|
||||
data-sitekey="{{ config('services.google.recaptcha.public') }}"
|
||||
type="submit">{{ Str::ucfirst(__('Envoyer')) }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -273,7 +248,14 @@
|
|||
@push('scripts')
|
||||
<script nonce="{{ $nonce }}">
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const initFormCaptcha = () => {
|
||||
const newDiv = document.createElement("div");
|
||||
newDiv.classList.add('g-recaptcha');
|
||||
document.getElementById('r_captcha').appendChild(newDiv);
|
||||
document.getElementById('listen-form').inert = true;
|
||||
};
|
||||
window.__CN_Recaptcha = function() {
|
||||
initFormCaptcha();
|
||||
(function(d, t) {
|
||||
let g = d.createElement(t),
|
||||
s = d.getElementsByTagName(t)[0];
|
||||
|
|
@ -281,15 +263,19 @@
|
|||
s.parentNode.insertBefore(g, s)
|
||||
}(document, 'script'));
|
||||
};
|
||||
window.__CN_Recaptcha_Reset = function() {
|
||||
document.querySelector('#r_captcha > div')?.remove();
|
||||
};
|
||||
window.__CN_Recaptcha_Loaded = function() {
|
||||
grecaptcha.render('r_captcha', {
|
||||
document.getElementById('listen-form').inert = false;
|
||||
grecaptcha.render(document.querySelector('#r_captcha > div'), {
|
||||
'sitekey': '{{ config('services.google.recaptcha.public') }}'
|
||||
});
|
||||
document.getElementById('recaptcha-warning').remove();
|
||||
document.getElementById('listen-form').querySelectorAll('[inert="true"]').forEach(element => {
|
||||
element.inert = false;
|
||||
});
|
||||
};
|
||||
document.getElementById("recaptcha-accept").addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
window.WebCookieNotice.acceptCookie('recaptcha');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
@section('banner')
|
||||
@include('fo.layouts.banner', [
|
||||
'h1' => __($staticPageModel->title),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/alternative_banner_reworked.jpg'),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/we_move.jpg'),
|
||||
'title' => __('Paysage d\'un champs de blé au soleil couchant avec une lisière en fond de tableau'),
|
||||
'alt' => __('Image de fond'),
|
||||
'displayArrow' => true,
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
@section('banner')
|
||||
@include('fo.layouts.banner', [
|
||||
'h1' => __($staticPageModel->title),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/home_reworked.jpg'),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/we_produce.png'),
|
||||
'title' => __('Paysage d\'un champs de blé au soleil couchant avec une lisière en fond de tableau'),
|
||||
'alt' => __('Image de fond'),
|
||||
'displayArrow' => true,
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
</div>
|
||||
</section>
|
||||
{{-- GMS --}}
|
||||
<section class="border-top-curved-tertiary-light">
|
||||
{{-- <section class="border-top-curved-tertiary-light">
|
||||
<div class="bg-tertiary-light overflow-hidden pb-5">
|
||||
<div class="container text-center">
|
||||
<h2 class="fw-bold text-primary mb-3">{{ $gmsSection->h2_title }}</h2>
|
||||
|
|
@ -50,21 +50,21 @@
|
|||
<div class="ck-content">
|
||||
{!! clean($gmsSection->text) !!}
|
||||
</div>
|
||||
</div>
|
||||
</div> --}}
|
||||
{{-- PART 1 --}}
|
||||
@include('fo.pages.produce.banner-elements', [
|
||||
{{-- @include('fo.pages.produce.banner-elements', [
|
||||
'partName' => 'de_la_partie1',
|
||||
'data' => $gmsSection->data,
|
||||
'itemMax' => 3,
|
||||
])
|
||||
]) --}}
|
||||
{{-- PART 2 --}}
|
||||
@include('fo.pages.produce.banner-elements', [
|
||||
{{-- @include('fo.pages.produce.banner-elements', [
|
||||
'partName' => 'de_la_partie2',
|
||||
'data' => $gmsSection->data,
|
||||
'itemMax' => 3,
|
||||
])
|
||||
]) --}}
|
||||
{{-- PART 3 --}}
|
||||
@include('fo.pages.produce.banner-elements', [
|
||||
{{-- @include('fo.pages.produce.banner-elements', [
|
||||
'partName' => 'de_la_partie3',
|
||||
'data' => $gmsSection->data,
|
||||
'itemMax' => 1,
|
||||
|
|
@ -72,15 +72,15 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section> --}}
|
||||
{{-- RHD --}}
|
||||
<section class="border-top-curved-upper-tertiary-light">
|
||||
{{-- <section class="border-top-curved-upper-tertiary-light">
|
||||
<div class="overflow-hidden bg-white pb-5">
|
||||
<div class="container text-center">
|
||||
<h2 class="fw-bold text-primary mb-3">{{ $rhdSection->h2_title }}</h2>
|
||||
<div class="row justify-content-center">
|
||||
<div class="row justify-content-center"> --}}
|
||||
{{-- PART 1 --}}
|
||||
@include('fo.pages.produce.banner-elements', [
|
||||
{{-- @include('fo.pages.produce.banner-elements', [
|
||||
'partName' => 'de_la_partie1',
|
||||
'data' => $rhdSection->data,
|
||||
'itemMax' => 10,
|
||||
|
|
@ -92,9 +92,9 @@
|
|||
</div>
|
||||
<div class="col-md-8 mb-3">
|
||||
<button class="btn btn-primary rounded-pill">{{ __('LDC restauration') }}</button>
|
||||
</div>
|
||||
</div> --}}
|
||||
{{-- PART 2 --}}
|
||||
<div class="col-md-8 mb-3">
|
||||
{{-- <div class="col-md-8 mb-3">
|
||||
<div class="row w-100 bg-nine rounded-4 mx-auto p-4">
|
||||
<div class="col-4 d-none d-md-flex flex-column justify-content-center align-items-start">
|
||||
<h3 class="h3 text-primary fw-bold text-uppercase m-0">{{ __('le saviez-vous ?') }}</h3>
|
||||
|
|
@ -116,9 +116,9 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section> --}}
|
||||
{{-- EXPORT --}}
|
||||
<section class="border-top-curved-primary">
|
||||
{{-- <section class="border-top-curved-primary">
|
||||
<div class="bg-primary overflow-hidden pb-5 text-white">
|
||||
<div class="container text-center">
|
||||
<h2 class="fw-bold mb-3">{{ $exportSection->h2_title }}</h2>
|
||||
|
|
@ -131,25 +131,25 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section> --}}
|
||||
{{-- QUALITY --}}
|
||||
<section class="border-top-curved-upper-primary">
|
||||
{{-- <section class="border-top-curved-upper-primary"> --}}
|
||||
<div class="overflow-hidden bg-white pb-5">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center gx-5">
|
||||
<div class="col-md-8 mb-3 text-center">
|
||||
<h2 class="fw-bold mb-3">{{ $qualitySection->h2_title }}</h2>
|
||||
{{-- @include('fo.pages.produce.banner-elements', [
|
||||
'partName' => 'de_la_partie1',
|
||||
'data' => $qualitySection->data,
|
||||
'itemMax' => 1,
|
||||
])
|
||||
<div class="ck-content">{!! clean($qualitySection->text) !!}</div>
|
||||
@if ($qualitySection->data['bloc_button__on_vous_explique_comment_lire_cetteetiquette']['value'])
|
||||
<a class="btn btn-primary rounded-pill mt-3" href="https://www.etiquettebienetreanimal.fr/"
|
||||
target="_blank">{{ __('On vous explique comment lire cette étiquette') }}</a>
|
||||
@endif
|
||||
@endif --}}
|
||||
</div>
|
||||
@include('fo.pages.produce.banner-elements', [
|
||||
'partName' => 'de_la_partie1',
|
||||
'data' => $qualitySection->data,
|
||||
'itemMax' => 1,
|
||||
])
|
||||
<div class="col-md-8 mb-3 text-center">
|
||||
<div class="bg-tertiary-light rounded-4 my-3 p-4">
|
||||
<div class="ck-content">{!! clean($qualitySection->data['bloc_text_de_la_partie2_content']['value']) !!}</div>
|
||||
|
|
@ -193,5 +193,5 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{-- </section> --}}
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
</div>
|
||||
<div class="col-12">
|
||||
<div class="d-flex justify-content-between">
|
||||
<a href="{{ url()->previous() }}" title="{{ __('Retour à la page d\'accueil') }}">
|
||||
<a href="{{ route('fo.unveil.show') }}#sites" title="{{ __('Retour à la page \'On se dévoile\'') }}">
|
||||
<img class="arrow-left" src="{{ Vite::asset('resources/assets/images/misc/blue-arrow.svg') }}"
|
||||
title="{{ __('Retour à la page d\'accueil') }}" alt="{{ __('Flèche vers la gauche') }}">
|
||||
{{ __('Retour') }}
|
||||
|
|
@ -77,14 +77,18 @@
|
|||
<p class="text-tertiary mt-4 text-center">{{ $siteModel->description_2 }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row align-items-center mt-4">
|
||||
<div class="col-12 col-sm-6 mb-sm-0 text-md-end mb-2 text-center">
|
||||
<div class="d-flex flex-column flex-lg-row justify-content-center align-items-center mt-4">
|
||||
<div class="mb-sm-0 mb-2 me-4 text-center">
|
||||
<p class="text-primary m-0"><i class="fa-solid fa-user-group"></i> {{ $siteModel->employees }} {{ __('personnes') }}
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-12 col-sm-6 d-flex justify-content-center justify-content-md-start align-items-center">
|
||||
<i class="fa-solid fa-paw"></i>
|
||||
<p class="text-primary d-flex align-items-center my-0 ms-1">
|
||||
<div class="d-flex justify-content-center justify-content-md-start align-items-center">
|
||||
@foreach ($siteModel->pictos as $picto)
|
||||
@php $enum = \App\Enums\Sites\SpeciesEnum::make($picto) @endphp
|
||||
<img src="{{ Vite::asset($enum->picture()) }}" title="{{ $enum->title() }}" alt="{{ $enum->alt() }}"
|
||||
height="40">
|
||||
@endforeach
|
||||
<p class="text-primary d-flex align-items-center my-0 ms-3">
|
||||
{{ implode(
|
||||
', ',
|
||||
collect($siteModel->pictos)->map(function ($picto) {
|
||||
|
|
@ -232,16 +236,12 @@
|
|||
@foreach ($siteModel->logos as $logo)
|
||||
<div class="swiper-slide h-auto">
|
||||
<div class="d-flex">
|
||||
<div class="row align-items-center flex-grow-1">
|
||||
<div class="col-6 col-lg-12">
|
||||
<div class="row align-items-center flex-grow-1 justify-content-center">
|
||||
<div class="col-12">
|
||||
<img class="w-100" src="{{ asset($logo->picture) }}"
|
||||
title="{{ $logo->picture_title }}" alt="{{ $logo->picture_alt }}">
|
||||
</div>
|
||||
<div class="col-6 d-lg-none">
|
||||
<p class="w-100 text-center">{{ $logo->label }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="separator @if ($loop->last) border-0 @endif mx-3"></div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
@section('banner')
|
||||
@include('fo.layouts.banner', [
|
||||
'h1' => __($staticPageModel->title),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/home_reworked.jpg'),
|
||||
'asset' => Vite::asset('resources/assets/images/banners/we_unveil.jpeg'),
|
||||
'title' => __('Paysage d\'un champs de blé au soleil couchant avec une lisière en fond de tableau'),
|
||||
'alt' => __('Image de fond'),
|
||||
'displayArrow' => true,
|
||||
|
|
@ -60,6 +60,15 @@
|
|||
])
|
||||
</div>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="ck-content">
|
||||
{!! clean($keySection->text) !!}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{-- MISSIONS --}}
|
||||
<section class="missions border-top-curved-primary anchor-padding" id="missions">
|
||||
|
|
@ -184,18 +193,26 @@
|
|||
<div class="carousel-inner overflow-visible pb-4">
|
||||
@foreach ($historicalMilestoneModels as $historicalMilestoneModel)
|
||||
<div @class(['carousel-item bg-body', 'active' => $loop->first])>
|
||||
{{-- We needed to include this picture twice because bootstrap took the picture height in its calculation for the carousel height --}}
|
||||
@if ($historicalMilestoneModel->picture)
|
||||
<img class="position-absolute picture" src="{{ $historicalMilestoneModel->picture }}"
|
||||
<img class="position-absolute picture d-none d-lg-block"
|
||||
src="{{ $historicalMilestoneModel->picture }}"
|
||||
title="{{ $historicalMilestoneModel->picture_title }}"
|
||||
alt="{{ $historicalMilestoneModel->picture_alt }}">
|
||||
@endif
|
||||
<div class="z-3 position-relative text-primary historical-milestone-content text-center">
|
||||
<div class="row justify-content-end">
|
||||
<div class="row justify-content-center justify-content-lg-end">
|
||||
<div class="col-12 col-lg-6">
|
||||
<p class="year fw-bold text-{{ $colors[$loop->index % 4] }} mb-5">
|
||||
{{ $historicalMilestoneModel->year }}
|
||||
</p>
|
||||
</div>
|
||||
@if ($historicalMilestoneModel->picture)
|
||||
<img class="position-relative picture d-lg-none"
|
||||
src="{{ $historicalMilestoneModel->picture }}"
|
||||
title="{{ $historicalMilestoneModel->picture_title }}"
|
||||
alt="{{ $historicalMilestoneModel->picture_alt }}">
|
||||
@endif
|
||||
<div class="col-12 col-lg-3 text-lg-start d-flex flex-column justify-content-end">
|
||||
<div class="slide-content mx-lg-0 p-lg-0 mx-auto w-fit rounded p-3">
|
||||
<p class="fw-bold fs-5">
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
{{-- Carte page “on se dévoile” : Point central = Laval + rayon = 100 km --}}
|
||||
{{-- Carte page “site ” : Point central = le site + rayon = 50 km --}}
|
||||
{{-- FIXME: USE COORDINATES TO CENTER MAP --}}
|
||||
@php
|
||||
$data = [
|
||||
'wrapperClasses' => 'rounded-3 embed-map w-100 my-3',
|
||||
|
|
@ -20,9 +19,9 @@
|
|||
@endphp
|
||||
<div class="leaflet-map-vue w-100 z-1" data-json='@json($data)'></div>
|
||||
<div class="swiper w-100 z-2 swiper-sites-map position-absolute bottom-0 mb-4 px-2 pt-2" id="swiper-sites-map">
|
||||
<div class="swiper-wrapper h-fit">
|
||||
<div class="swiper-wrapper">
|
||||
@foreach ($siteModelList as $index => $siteModel)
|
||||
<div class="swiper-slide position-relative">
|
||||
<div class="swiper-slide position-relative" @if (request()->route()->getName() === 'fo.sites.show' && $siteModel->slug === request()->route('site')->slug) data-indexToSlide="{{ $loop->index }}" @endif>
|
||||
<div
|
||||
class="d-flex map-site-widget justify-content-center align-items-stretch text-bg-white rounded-4 border-primary border-1 flex-row overflow-hidden border p-2">
|
||||
<div class="d-flex align-items-center justify-content-center">
|
||||
|
|
@ -30,8 +29,11 @@
|
|||
title="{{ $siteModel->picture_1_title }}" alt="{{ $siteModel->picture_1_alt }}">
|
||||
</div>
|
||||
<div class="flex-grow-1 d-flex flex-column ps-3">
|
||||
<div class="h4 text-uppercase fw-bold text-primary">{{ Str::limit($siteModel->name, 25, '...') }}</div>
|
||||
<div class="ck-content text-primary py-1">{{ Str::limit(strip_tags($siteModel->description), 150, '...') }}
|
||||
<div class="h4 text-uppercase fw-bold text-primary site-title">
|
||||
{{ Str::limit($siteModel->name, 25, '...') }}
|
||||
</div>
|
||||
<div class="ck-content text-primary py-1">
|
||||
{{ Str::limit(strip_tags($siteModel->description), 65, '...') }}
|
||||
</div>
|
||||
<div class="flex-grow-1 d-flex justify-content-between align-items-end mt-2 flex-row pb-2">
|
||||
<span class="text-primary d-inline-block">
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@
|
|||
'hasWordCounter' => true,
|
||||
'name' => 'data[' . $k . '][alt]',
|
||||
'value' => old("data.{$k}.alt", $model->data[$k]['alt'] ?? null),
|
||||
'required' => true,
|
||||
'required' => $model->data[$k]['required'],
|
||||
'model' => $model ?? null,
|
||||
'helper' =>
|
||||
__('crud.minicrud.picture_alt_helper') .
|
||||
|
|
@ -186,7 +186,7 @@
|
|||
'hasWordCounter' => true,
|
||||
'name' => 'data[' . $k . '][title]',
|
||||
'value' => old("data.{$k}.title", $model->data[$k]['title'] ?? null),
|
||||
'required' => true,
|
||||
'required' => $model->data[$k]['required'],
|
||||
'model' => $model ?? null,
|
||||
'helper' =>
|
||||
__('crud.minicrud.picture_title_helper') .
|
||||
|
|
@ -213,7 +213,7 @@
|
|||
'width' => $input['dimensions']['width'],
|
||||
'height' => $input['dimensions']['height'],
|
||||
]),
|
||||
'required' => true,
|
||||
'required' => $model->data[$k]['required'],
|
||||
'preview' => true,
|
||||
])
|
||||
@include('modules.input-error', [
|
||||
|
|
|
|||
100
resources/views/vendor/cn-cookies.blade.php
vendored
|
|
@ -11,16 +11,19 @@ $strings = (object)[
|
|||
'button_customize_cookies' => __('cookie-notice.button_customize_cookies'),
|
||||
'button_close_cookies' => __('cookie-notice.button_close_cookies'),
|
||||
'button_title_open_new_tab' => __('cookie-notice.button_title_open_new_tab'),
|
||||
'button_forbid' => __('cookie-notice.button_forbid'),
|
||||
'button_allow' => __('cookie-notice.button_allow'),
|
||||
'button_toggle_cookie' => __('cookie-notice.button_toggle_cookie'),
|
||||
'button_forbid_all' => Str::upper(__('cookie-notice.button_forbid_all')),
|
||||
'button_allow_all' => Str::upper(__('cookie-notice.button_allow_all')),
|
||||
'button_customize' => Str::upper(__('cookie-notice.button_customize')),
|
||||
'button_forbid_all_title' => __('cookie-notice.button_forbid_all_title'),
|
||||
'button_allow_all_title' => __('cookie-notice.button_allow_all_title'),
|
||||
'button_back' => Str::upper(__('cookie-notice.button_back')),
|
||||
'button_validate_and_close' => Str::upper(__('cookie-notice.button_validate_and_close')),
|
||||
'banner_title' => __('cookie-notice.banner_title', ['site_name' => $site_name]),
|
||||
'banner_text' => __('cookie-notice.banner_text'),
|
||||
'banner_text' => sprintf(
|
||||
"%s<br><br>%s",
|
||||
"Nous utilisons des cookies pour nous assurer du bon fonctionnement de notre site et à des fins analytiques. Vous pouvez changer d'avis à tout moment en cliquant sur l'icône présente sur chaque page de notre site. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement.",
|
||||
"<a href='/charte-de-confidentialite'>Charte de confidentialité</a>"
|
||||
),
|
||||
'panel_title' => __('cookie-notice.panel_title'),
|
||||
'panel_content' => __('cookie-notice.panel_content'),
|
||||
'panel_subtitle' => __('cookie-notice.panel_subtitle'),
|
||||
|
|
@ -29,29 +32,82 @@ $strings = (object)[
|
|||
'navigation_title' => __('cookie-notice.navigation_title'),
|
||||
];
|
||||
|
||||
|
||||
$cookieInline = function ($cookieName, $text, $subtext = '') {
|
||||
return <<<SCRIPT
|
||||
(() => {
|
||||
const cookieActivate = document.createElement("span");
|
||||
cookieActivate.classList.add("cn-cookie-activate");
|
||||
cookieActivate.dataset.cookieName = '{$cookieName}';
|
||||
|
||||
const childSpan = document.createElement("span");
|
||||
const childSpanSpan = document.createElement("span");
|
||||
const childSpanSmall = document.createElement("span");
|
||||
childSpanSpan.textContent = '{$text}';
|
||||
childSpanSmall.textContent = '{$subtext}';
|
||||
childSpan.appendChild(childSpanSpan);
|
||||
childSpan.appendChild(childSpanSmall);
|
||||
|
||||
const childBtn = document.createElement("button");
|
||||
childBtn.classList.add('btn','btn-red');
|
||||
childBtn.textContent = 'Autoriser';
|
||||
|
||||
cookieActivate.appendChild(childSpan);
|
||||
cookieActivate.appendChild(childBtn);
|
||||
return cookieActivate;
|
||||
})
|
||||
SCRIPT;
|
||||
};
|
||||
|
||||
$cookies = [];
|
||||
|
||||
// youtube
|
||||
// YOUTUBE
|
||||
$cookies['youtube'] = [
|
||||
'name' => __('cookie-notice.custom.youtube.name'),
|
||||
'description' => __('cookie-notice.custom.youtube.description'),
|
||||
'labelLink' => __('cookie-notice.custom.youtube.labelLink'),
|
||||
'name' => 'VIDEOS - Youtube',
|
||||
'description' => __('Les cookies déposés via les services de partage de vidéo ont pour finalité de permettre à l’utilisateur de visionner directement sur le site le contenu multimédia.'),
|
||||
'link' => 'https://policies.google.com/technologies/cookies?hl=fr&utm_source=ucb',
|
||||
'labelLink' => __('En savoir +'),
|
||||
'cookies' => ['NID', 'VISITOR_INFO1_LIVE', 'YSC']
|
||||
];
|
||||
|
||||
$cookies['youtube']['script'] = <<<SCRIPT
|
||||
function () {
|
||||
window.__CN_VIDEO = window.__CN_VIDEO ?? {};
|
||||
window.__CN_VIDEO.youtube = true;
|
||||
let youtubeVids = document.getElementsByClassName('cn-youtube');
|
||||
for (let item of youtubeVids) {
|
||||
let id = item.dataset.id;
|
||||
let e = document.createElement('iframe');
|
||||
e.src = "https://www.youtube.com/embed/" + id;
|
||||
e.width = "640";
|
||||
e.height = "360";
|
||||
e.frameBorder = "0";
|
||||
e.allow = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture";
|
||||
e.allowFullscreen = true;
|
||||
item.innerHTML = "";
|
||||
item.appendChild(e);
|
||||
}
|
||||
}
|
||||
SCRIPT;
|
||||
$cookies['youtube']['fallback'] = <<<FALLBACK
|
||||
function () {
|
||||
window.__CN_VIDEO = window.__CN_VIDEO ?? {};
|
||||
window.__CN_VIDEO.youtube = false;
|
||||
let youtubeVids = document.getElementsByClassName('cn-youtube');
|
||||
for (let item of youtubeVids) {
|
||||
let a = document.createElement('a');
|
||||
a.innerText = 'Autoriser';
|
||||
a.classList.add('cn-cookie-link');
|
||||
a.setAttribute('role', 'button');
|
||||
a.onclick = function () {
|
||||
WebCookieNotice.openCookieModalToCookiePage();
|
||||
};
|
||||
let e = document.createElement('p');
|
||||
e.innerHTML = 'Youtube est désactivé. ';
|
||||
item.innerHTML = "";
|
||||
e.appendChild(a);
|
||||
item.appendChild(e);
|
||||
}
|
||||
}
|
||||
FALLBACK;
|
||||
|
||||
|
||||
// RECAPTCHA
|
||||
$cookies['recaptcha'] = [
|
||||
'name' => __('cookie-notice.custom.recaptcha.title'),
|
||||
|
|
@ -66,8 +122,28 @@ function () {
|
|||
if (window.__CN_Recaptcha) {
|
||||
window.__CN_Recaptcha();
|
||||
}
|
||||
[...document.getElementsByClassName('cn-cookie-activate')].forEach(function(el) {
|
||||
if (el.dataset.cookieName === 'recaptcha') {
|
||||
el.classList.add('d-none');
|
||||
document.getElementById('listen-form').inert = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
SCRIPT;
|
||||
$cookies['recaptcha']['fallback'] = <<<FALLBACK
|
||||
function () {
|
||||
if (window.__CN_Recaptcha_Reset) {
|
||||
window.__CN_Recaptcha_Reset();
|
||||
}
|
||||
[...document.getElementsByClassName('cn-cookie-activate')].forEach(function(el) {
|
||||
if (el.dataset.cookieName === 'recaptcha') {
|
||||
el.classList.remove('d-none');
|
||||
document.getElementById('listen-form').inert = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
FALLBACK;
|
||||
|
||||
|
||||
// MATOMO
|
||||
$cookies['matomo'] = [
|
||||
|
|
|
|||
|
|
@ -1,19 +1,17 @@
|
|||
<div id="cn-wrapper" title="{{ $strings->modal_title }}" role="alertdialog" tabindex="-1">
|
||||
<button id="cn-cookie-btn" title="{{ $strings->button_customize_cookies }}">
|
||||
{{-- COOKIE SVG --}}
|
||||
<svg role="img" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>{{ $strings->picture_cookie_title }}</title>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd"
|
||||
d="M14.0001 2.93383C14.0001 4.16622 14.6159 5.25477 15.5567 5.90849C15.3526 6.46423 15.2412 7.06473 15.2412 7.69126C15.2412 10.5472 17.5564 12.8624 20.4123 12.8624C21.0807 12.8624 21.7195 12.7356 22.3059 12.5047C22.9456 13.527 24.0817 14.2069 25.3766 14.2069C26.1872 14.2069 26.9357 13.9404 27.539 13.4903C27.5453 13.6594 27.5484 13.8294 27.5484 14C27.5484 21.4826 21.4826 27.5484 14 27.5484C6.51748 27.5484 0.45166 21.4826 0.45166 14C0.45166 6.51748 6.51748 0.45166 14 0.45166C14.3209 0.45166 14.6391 0.462811 14.9543 0.484747C14.3618 1.12929 14.0001 1.98931 14.0001 2.93383ZM21.2176 2.53212C21.2195 2.54914 21.2213 2.56619 21.2229 2.58328C21.2569 2.58864 21.2909 2.59433 21.3247 2.60035C21.2891 2.57745 21.2534 2.5547 21.2176 2.53212ZM25.5171 6.86104C25.523 6.89745 25.5285 6.93399 25.5336 6.97066C25.5512 6.97141 25.5687 6.97228 25.5861 6.97328C25.5633 6.93574 25.5403 6.89833 25.5171 6.86104ZM12.5247 2.09283C12.4748 2.38291 12.4487 2.68118 12.4487 2.98553C12.4487 4.33316 12.9591 5.56158 13.7972 6.48802C13.7266 6.87842 13.6898 7.28054 13.6898 7.69126C13.6898 11.404 16.6996 14.4137 20.4123 14.4137C20.8725 14.4137 21.3219 14.3675 21.7562 14.2794C22.689 15.1941 23.9669 15.7582 25.3766 15.7582C25.5439 15.7582 25.7094 15.7503 25.8726 15.7347C25.0321 21.5385 20.0368 25.9971 14.0001 25.9971C7.37431 25.9971 2.00305 20.6258 2.00305 14.0001C2.00305 7.87378 6.59498 2.82 12.5247 2.09283Z"
|
||||
fill="#0e2b45" />
|
||||
<circle cx="7.58784" cy="12.8624" r="1.96503" fill="#0e2b45" />
|
||||
<circle cx="8.82887" cy="19.2745" r="1.3445" fill="#0e2b45" />
|
||||
<circle cx="13.6897" cy="14.5171" r="1.03423" fill="#0e2b45" />
|
||||
<circle cx="11.4144" cy="7.48439" r="0.930805" fill="#0e2b45" />
|
||||
<circle cx="17.5164" cy="20.3089" r="1.86161" fill="#0e2b45" />
|
||||
<circle cx="21.3432" cy="6.7604" r="0.930805" fill="#0e2b45" />
|
||||
<circle cx="22.1706" cy="1.89958" r="1.44792" fill="#0e2b45" />
|
||||
<circle cx="26.8245" cy="8.31185" r="0.72396" fill="#0e2b45" />
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.0001 2.93383C14.0001 4.16622 14.6159 5.25477 15.5567 5.90849C15.3526 6.46423 15.2412 7.06473 15.2412 7.69126C15.2412 10.5472 17.5564 12.8624 20.4123 12.8624C21.0807 12.8624 21.7195 12.7356 22.3059 12.5047C22.9456 13.527 24.0817 14.2069 25.3766 14.2069C26.1872 14.2069 26.9357 13.9404 27.539 13.4903C27.5453 13.6594 27.5484 13.8294 27.5484 14C27.5484 21.4826 21.4826 27.5484 14 27.5484C6.51748 27.5484 0.45166 21.4826 0.45166 14C0.45166 6.51748 6.51748 0.45166 14 0.45166C14.3209 0.45166 14.6391 0.462811 14.9543 0.484747C14.3618 1.12929 14.0001 1.98931 14.0001 2.93383ZM21.2176 2.53212C21.2195 2.54914 21.2213 2.56619 21.2229 2.58328C21.2569 2.58864 21.2909 2.59433 21.3247 2.60035C21.2891 2.57745 21.2534 2.5547 21.2176 2.53212ZM25.5171 6.86104C25.523 6.89745 25.5285 6.93399 25.5336 6.97066C25.5512 6.97141 25.5687 6.97228 25.5861 6.97328C25.5633 6.93574 25.5403 6.89833 25.5171 6.86104ZM12.5247 2.09283C12.4748 2.38291 12.4487 2.68118 12.4487 2.98553C12.4487 4.33316 12.9591 5.56158 13.7972 6.48802C13.7266 6.87842 13.6898 7.28054 13.6898 7.69126C13.6898 11.404 16.6996 14.4137 20.4123 14.4137C20.8725 14.4137 21.3219 14.3675 21.7562 14.2794C22.689 15.1941 23.9669 15.7582 25.3766 15.7582C25.5439 15.7582 25.7094 15.7503 25.8726 15.7347C25.0321 21.5385 20.0368 25.9971 14.0001 25.9971C7.37431 25.9971 2.00305 20.6258 2.00305 14.0001C2.00305 7.87378 6.59498 2.82 12.5247 2.09283Z" fill="#FF4E4E" />
|
||||
<circle cx="7.58784" cy="12.8624" r="1.96503" fill="#FF4E4E" />
|
||||
<circle cx="8.82887" cy="19.2745" r="1.3445" fill="#FF4E4E" />
|
||||
<circle cx="13.6897" cy="14.5171" r="1.03423" fill="#FF4E4E" />
|
||||
<circle cx="11.4144" cy="7.48439" r="0.930805" fill="#FF4E4E" />
|
||||
<circle cx="17.5164" cy="20.3089" r="1.86161" fill="#FF4E4E" />
|
||||
<circle cx="21.3432" cy="6.7604" r="0.930805" fill="#FF4E4E" />
|
||||
<circle cx="22.1706" cy="1.89958" r="1.44792" fill="#FF4E4E" />
|
||||
<circle cx="26.8245" cy="8.31185" r="0.72396" fill="#FF4E4E" />
|
||||
</svg>
|
||||
</button>
|
||||
{{-- BANNER --}}
|
||||
|
|
@ -33,29 +31,21 @@
|
|||
<span>{!! nl2br(e($strings->banner_title)) !!}</span>
|
||||
</div>
|
||||
<div class="cn-banner-para-p">
|
||||
<p>{!! nl2br(e($strings->banner_text)) !!}</p>
|
||||
<p>{!! clean($strings->banner_text) !!}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{-- 2ND PAGE CUSTOMIZE PANEL --}}
|
||||
<div class="cn-modal-container d-none">
|
||||
<p class="cn-modal-title" aria-level="h2">{{ $strings->panel_title }}</p>
|
||||
<p class="cn-modal-subtitle">{!! nl2br(e($strings->panel_subtitle)) !!}</p>
|
||||
<p class="cn-modal-description">{!! nl2br(e($strings->panel_details)) !!}</p>
|
||||
<div class="cn-modal-wrapper">
|
||||
{{-- COOKIES LIST --}}
|
||||
<ul id="cn-modal-list"></ul>
|
||||
</div>
|
||||
{{-- COOKIES LIST --}}
|
||||
<ul id="cn-modal-list"></ul>
|
||||
</div>
|
||||
</div>
|
||||
{{-- NAV BAR --}}
|
||||
<div class="cn-nav" title="{{ $strings->navigation_title }}" role="navigation">
|
||||
<button class="cn-banner-btn cn-deny" id="cn-deny-banner"
|
||||
title="{{ $strings->button_forbid_all_title }}">{{ $strings->button_forbid_all }}</button>
|
||||
<button class="cn-banner-btn cn-accept" id="cn-accept-banner"
|
||||
title="{{ $strings->button_allow_all_title }}">{{ $strings->button_allow_all }}</button>
|
||||
<button class="cn-banner-btn cn-custom" id="cn-settings-banner" data-open-modal="{{ $strings->button_back }}"
|
||||
data-close-modal="{{ $strings->button_customize }}">{{ $strings->button_customize }}</button>
|
||||
<button class="cn-banner-btn cn-deny" id="cn-deny-banner" title="{{ $strings->button_forbid_all_title }}">{{ $strings->button_forbid_all }}</button>
|
||||
<button class="cn-banner-btn cn-accept" id="cn-accept-banner" title="{{ $strings->button_allow_all_title }}">{{ $strings->button_allow_all }}</button>
|
||||
<button class="cn-banner-btn cn-custom" id="cn-settings-banner" data-open-modal="{{ $strings->button_validate_and_close }}" data-close-modal="{{ $strings->button_customize }}">{{ $strings->button_customize }}</button>
|
||||
</div>
|
||||
|
||||
{{-- COOKIE LIST LI TEMPLATE --}}
|
||||
|
|
@ -67,14 +57,11 @@
|
|||
<a class="cn-cookie-link" title="{{ $strings->button_title_open_new_tab }}" target="blank">#link</a>
|
||||
</div>
|
||||
<div class="cn-cookie-buttons">
|
||||
<div class="deny">
|
||||
<input id="" name="" data-name="" data-status="false" type="radio">
|
||||
<label for="" role="button" tabindex="0">{{ $strings->button_forbid }}</label>
|
||||
</div>
|
||||
<div class="accept">
|
||||
<input id="" name="" data-name="" data-status="true" type="radio">
|
||||
<label for="" role="button" tabindex="0">{{ $strings->button_allow }}</label>
|
||||
</div>
|
||||
<label class="cn-switch" role="checkbox" aria-label="{{ $strings->button_toggle_cookie }}" title="{{ $strings->button_toggle_cookie }}" aria-checked="undefined"
|
||||
tabindex="0">
|
||||
<input type="checkbox" tabindex="-1" />
|
||||
<span></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||