<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\CoreExtension;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
use Twig\TemplateWrapper;
/* Parent/LoginParent.html.twig */
class __TwigTemplate_37bb9239606940e257554a0bc0386491 extends Template
{
private Source $source;
/**
* @var array<string, Template>
*/
private array $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->blocks = [
'LinksCss' => [$this, 'block_LinksCss'],
'Content' => [$this, 'block_Content'],
'javascript' => [$this, 'block_javascript'],
];
}
protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
{
// line 1
return "/Accueil/layoutAccueilParents.html.twig";
}
protected function doDisplay(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "Parent/LoginParent.html.twig"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "Parent/LoginParent.html.twig"));
$this->parent = $this->load("/Accueil/layoutAccueilParents.html.twig", 1);
yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
}
// line 2
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_LinksCss(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "LinksCss"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "LinksCss"));
// line 3
yield " ";
yield from $this->yieldParentBlock("LinksCss", $context, $blocks);
yield "
<link rel=\"stylesheet\" href=\"";
// line 5
yield "/css/Parent/css/login.css";
yield "\" >
<link rel=\"stylesheet\" href=\"";
// line 6
yield "/css/Parent/css/premiercnx.css";
yield "\">
<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css\">
<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css\">
<link href=\"";
// line 10
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("css/bootstrap-social.css"), "html", null, true);
yield "\" type=\"text/css\" rel=\"stylesheet\" >
<link rel=\"stylesheet\" href=\"";
// line 11
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("css/splide.min.css"), "html", null, true);
yield "\">
<style>
.titleProdbienvenu {
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
}
/* Style pour le bouton de retour en haut */
.scroll-top-btn {
position: fixed;
bottom: 20px;
right: 20px;
width: 40px;
height: 40px;
border-radius: 50%;
background-color: #41a2aa;
color: white;
border: none;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
z-index: 1000;
display: none;
cursor: pointer;
transition: all 0.3s ease;
}
.scroll-top-btn:hover {
background-color: #f09e7a;
transform: translateY(-3px);
}
/* Styles pour le loader d'inscription */
.register-loader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.9);
z-index: 9999;
display: none;
justify-content: center;
align-items: center;
}
.loader-content {
text-align: center;
background-color: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
max-width: 350px;
width: 90%;
}
.loader-message {
margin-top: 20px;
font-size: 18px;
font-weight: bold;
color: #41a2aa;
}
.loader-submessage {
margin-top: 10px;
font-size: 14px;
color: #666;
}
.spinner-border {
width: 3rem;
height: 3rem;
color: #f09e7a !important;
}
/* Styles pour le modal de confirmation */
.modal {
display: flex;
align-items: center;
justify-content: center;
}
.modal-dialog {
margin: 0 auto;
max-width: 500px;
width: 90%;
}
.modal-content {
border-radius: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
margin: 0 auto;
}
.modal-body {
padding: 30px 20px;
}
.modal-footer {
justify-content: center;
padding: 15px;
}
.circleModal {
background-color: #f09e7a;
color: white;
border: none;
border-radius: 5px;
padding: 10px 30px;
font-weight: bold;
transition: all 0.3s ease;
}
.circleModal:hover {
background-color: #e8865e;
transform: translateY(-2px);
}
/* Animation pour le passage au champ suivant */
.field-complete {
transition: all 0.3s ease;
border-color: #41a2aa !important;
box-shadow: 0 0 5px rgba(65, 162, 170, 0.5) !important;
transform: translateY(-2px);
}
.form-control:focus {
border-color: #f09e7a !important;
box-shadow: 0 0 6px rgba(240, 158, 122, 0.5) !important;
transition: all 0.3s ease;
}
/* Hide one form by default at 1024px and below */
@media screen and (max-width: 1360px) {
#connexionDiv, #inscriptionDiv {
width: 80% !important;
margin: 0 auto !important;
float: none !important;
margin-left: 10% !important;
}
/* Initially hide the connection form */
#connexionDiv {
display: none;
}
/* Make the inscription form take full width */
#inscriptionDiv {
display: block;
}
/* Hide the OR separator at 1024px */
.ou-container {
display: none;
}
/* Make the buttons more prominent for form switching */
.circleCree {
display: block !important;
width: 100% !important;
margin: 15px auto !important;
padding: 10px !important;
background-color: #41a2aa !important;
color: white !important;
border-radius: 5px !important;
border: none !important;
cursor: pointer !important;
text-align: center !important;
font-weight: bold !important;
}
/* Adjust column widths */
.col-md-5, .col-sm-5, .col-lg-5 {
width: 100% !important;
max-width: 100% !important;
flex: 0 0 100% !important;
}
/* Hide the middle column with the separator */
.col-md-1.col-sm-1.col-lg-1.col-xs-1 {
display: none !important;
}
}
/* Maintain desktop layout above 1024px */
@media screen and (min-width: 1360px) {
#connexionDiv, #inscriptionDiv {
display: block !important;
}
.circleCree {
display: none !important;
}
}
</style>
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 209
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_Content(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "Content"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "Content"));
// line 210
yield "
<!-- Bouton pour remonter en haut de la page -->
<button id=\"scrollTopBtn\" class=\"scroll-top-btn\" title=\"Retour en haut\">
<i class=\"fa fa-arrow-up\"></i>
</button>
<!-- Loader pour l'inscription -->
<div id=\"registerLoader\" class=\"register-loader\">
<div class=\"loader-content\">
<div class=\"spinner-border text-primary\" role=\"status\">
<span class=\"sr-only\">Chargement...</span>
</div>
<p class=\"loader-message\">Création de votre compte en cours...</p>
<p class=\"loader-submessage\">Nous préparons votre espace parent 5sur5sejour, merci de patienter.</p>
</div>
</div>
<!-- Modal de confirmation - avec l'attribut aria-hidden=\"true\" pour s'assurer qu'il est caché par défaut -->
<div class=\"modal fade\" id=\"exampleModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\" style=\"display: none;\">
<div class=\"modal-dialog modal-dialog-centered\" role=\"document\">
<div class=\"modal-content\">
<div class=\"modal-header\" style=\"border-bottom: none; padding-bottom: 0;\">
<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\" style=\"position: absolute; right: 15px; top: 15px;\">
<span aria-hidden=\"true\">×</span>
</button>
</div>
<div class=\"modal-body text-center\">
<img class=\"imageLogo2 mb-3\" src=\"";
// line 237
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/logoHeader.svg"), "html", null, true);
yield "\" alt=\"Logo 5 sur 5 séjour\">
<div class=\"row mb-4\">
<div class=\"col-12\">
<h4 class=\"font-weight-bold text-success\">Merci pour votre inscription à 5sur5sejour.com !</h4>
<p class=\"mt-3\">Vous allez recevoir un mail de confirmation afin d'accéder au site</p>
</div>
</div>
</div>
<div class=\"modal-footer\" style=\"border-top: none;\">
<button class=\"circleModal\" data-dismiss=\"modal\" onclick=\"location.reload();\" style=\"margin: 0 auto; padding: 10px 40px; font-size: 16px;\">OK</button>
</div>
</div>
</div>
</div>
<div class=\"splide no-padding no-margin\" id=\"imageSlider\" style=\"background:white\">
<div class=\"splide__track\">
<ul class=\"splide__list\">
<!-- Slide 1 -->
<!-- Slide 2 -->
<li class=\"splide__slide\">
<div class=\"slider-content\">
<div class=\"namePRD\" style=\"display: block;\">
<h4 class=\"titleProdbienvenu titleProdbienvenu1\" style=\"color: #41a2aa\">Offrez des souvenirs inoubliables à votre enfant </h4>
<h4 class=\"titleProdbienvenu titleProdbienvenu2\" style=\"color:#F09E7A\">avec des cadeaux personnalisés en toute simplicité !</h4>
</div>
<img src=\"";
// line 266
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("/images/3.png"), "html", null, true);
yield "\" class=\"imgslider\" alt=\"Image 2\" />
</div>
</li>
<li class=\"splide__slide\">
<div class=\"slider-content\">
<div class=\"namePRD\" style=\"display: block;\">
<h4 class=\"titleProdbienvenu titleProdbienvenu1\" style=\"color:#F09E7A\">Restez connecté au séjour de votre enfant 24h/24 </h4>
<h4 class=\"titleProdbienvenu titleProdbienvenu2\" style=\"color:#41a2aa\">grâce à des photos partagées en toute sécurité !</h4>
</div>
<img src=\"";
// line 277
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("/images/2.png"), "html", null, true);
yield "\" class=\"imgslider\" alt=\"Image 1\" />
</div>
</li>
<li class=\"splide__slide\">
<div class=\"slider-content\">
<div class=\"namePRD\" style=\"display: block;\">
<h4 class=\"titleProdbienvenu titleProdbienvenu1\" style=\"color: #41a2aa\">Accéder à une boite vocale en illimitée</h4>
<h4 class=\"titleProdbienvenu titleProdbienvenu2\" style=\"color:#F09E7A\">Pour écouter les messages laissés par les enfants et les accompagnateurs</h4>
</div>
<img src=\"";
// line 286
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("/images/1.png"), "html", null, true);
yield "\" class=\"imgslider\" alt=\"Image 2\" />
</div>
</li>
</ul>
</div>
</div>
<div class='row no-margin' style=\"padding-top:4%\">
<div class=\"col-lg-1 col-md-1 col-sm-1 col-xs-1 no-padding SeparateurLeftAccom\"></div>
<div class=\"col-md-10 col-sm-10 col-lg-10 col-xs-12 \" >
<!-- Bouton caché qui déclenche le modal de confirmation -->
<button type=\"button\" id=\"showOkInscription\" class=\"d-none\" data-toggle=\"modal\" data-target=\"#exampleModal\">
En savoir plus
</button>
<div class=\"row no-margin\" style='margin-right: auto;margin-top:15px' id=\"formSection\">
<div class=\"col-md-5 col-sm-5 col-lg-5 Inscription \" id='inscriptionDiv'>
<form class =\"form-section\" id=\"create\" onsubmit=\"cp(); return false;\">
<div class=\"soutitle\"> Créer un compte </div>
<div class =\"description2\" > Vous vous connectez pour la 1ère fois et n'avez pas
<br> de compte Parent(s) « 5 sur 5 séjour » </div>
<button type=\"button\" align =\"center\" class=\"circleCree\" onclick=\"AffichDivConnexion();\">Vous avez déjà un compte Parent(s) ? </button>
<div class=\"form-group\">
<input type=\"text\" class=\"form-control\" id=\"nomparent\" placeholder=\"NOM * \" >
<input type=\"text\" class=\"form-control\" id=\"prenomparent\" placeholder=\"PRENOM *\">
<input type=\"text\" autocomplete=\"off\" class=\"form-control\" id=\"mail\" placeholder=\"ADRESSE MAIL\" required data-toggle=\"tooltip\" data-placement=\"right\" title=\"\">
<input type=\"password\" autocomplete=\"off\" name=\"password\" id=\"Passworduser\" value=\"\" class=\"form-control\" placeholder=\"MOT DE PASSE * \">
<input type=\"password\" autocomplete=\"off\" name=\"password\" id=\"Passworduser2\" class=\"form-control\" placeholder=\"CONFIRMER VOTRE MOT DE PASSE\">
<p style=\"display: none; color:red; font-weight: bold; margin-top: 10px;\" id=\"eroor\">Cet email est déjà utilisé. <a href=\"";
// line 333
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("forgotPassparent");
yield "\" style=\"color:#f09e7a; text-decoration: underline;\">Mot de passe oublié ?</a></p>
<input type=\"text\" class=\"form-control\" id=\"num\" name=\"numero de téléphone\" placeholder=\"NUMERO DE TELEPHONE PORTABLE * \">
<div class=\"row no-margin \">
<div class=\"souTITRE\">Souhaitez-vous être averti lorsque l'organisateur dépose des images ou des messages du séjour ?</div>
</div>
<br>
<div class=\"row no-margin\">
<div class=\"box-1\" id=\"smsToggle\">
<input type='checkbox' name =\"sms\" id =\"smsInput\" />
<span class=\"toogle\"> </span>
</div>
<span class=\"sms\"> Par SMS </span>
<div class=\"box-1\">
<input type='checkbox' name =\"mail\" id =\"mailInput\" />
<span class=\"toogle\" > </span>
</div>
<span class=\"mail\"> Par Mail </span>
</div>
</div>
<div class=\"notification\" id=\"notification\" style=\"display: none;\">L'adresse e-mail est incorrecte.</div>
<div class=\"button-container\">
<button type=\"button\" onclick=\"cp();\" class=\"logButton\" style=\"color:#fff;border: 1px solid #f09e7a; position: relative;
background-color: #f09e7a;\" id=\"submitBtn\">
S'inscrire
</button></div>
<div class=\"button-container mobilesocial\">
<a href=\"";
// line 367
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("connect_google_start");
yield "\" style=\"color:#fff;background-color:#4F86EC;\" class=\"logButtonSocial\" onclick=\"_gaq.push(['_trackEvent', 'btn-social', 'click', 'btn-google']);\">
<img src=\"";
// line 368
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("/images/icons-google.png"), "html", null, true);
yield "\" >Continuer avec Google
</a>
</div>
<div class=\"mobilesocial\" >
<a href=\"";
// line 373
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("connect_facebook_start");
yield "\" class=\"logButtonSocial\" style=\"color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)\" >
<img src=\"";
// line 374
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("/images/icons-facebook.png"), "html", null, true);
yield "\" > Continuer avec Facebook
</a>
</div>
</form>
</div>
<div class=\"col-md-1 col-sm-1 col-lg-1 col-xs-1 \" ><div class=\"ou-container\" style=\"margin-left: 20%;\">
<div class=\"ou-line\"></div>
<div class=\"ou-text\">OU</div>
</div> </div>
<div class=\"col-md-5 col-sm-5 col-lg-5 col-xs-5 connexion \" id='connexionDiv' >
<div class=\"form-section\">
<div class=\"soutitle\"> Se connecter </div>
<div class =\"description2\" >Vous avez déja un compte Parent(s) « 5 sur 5 séjour » </div>
<button type=\"button\" align =\"center\" class=\"circleCree\" onclick=\"AffichDivInscri();\">Créer un compte ? </button>
<form method=\"post\" class=\"\">
";
// line 397
if ((($tmp = (isset($context["error"]) || array_key_exists("error", $context) ? $context["error"] : (function () { throw new RuntimeError('Variable "error" does not exist.', 397, $this->source); })())) && $tmp instanceof Markup ? (string) $tmp : $tmp)) {
// line 398
yield " <div class=\"alert alert-danger\">";
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans(CoreExtension::getAttribute($this->env, $this->source, (isset($context["error"]) || array_key_exists("error", $context) ? $context["error"] : (function () { throw new RuntimeError('Variable "error" does not exist.', 398, $this->source); })()), "messageKey", [], "any", false, false, false, 398), CoreExtension::getAttribute($this->env, $this->source, (isset($context["error"]) || array_key_exists("error", $context) ? $context["error"] : (function () { throw new RuntimeError('Variable "error" does not exist.', 398, $this->source); })()), "messageData", [], "any", false, false, false, 398), "security"), "html", null, true);
yield "</div>
";
}
// line 400
yield " <div class=\"form-group\">
<input type=\"text\" name=\"email\" id=\"inputEmail\" value=\"";
// line 402
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape((isset($context["last_username"]) || array_key_exists("last_username", $context) ? $context["last_username"] : (function () { throw new RuntimeError('Variable "last_username" does not exist.', 402, $this->source); })()), "html", null, true);
yield "\" class=\"form-control\" placeholder=\"Mon identifiant * \" >
<input type=\"password\" name=\"password\" id=\"inputPassword\" class=\"form-control\" placeholder=\"Mon mot de passe *\">
<span toggle=\"#inputPassword\" class=\"fa fa-fw fa-eye field-icon toggle-password\"></span>
<input type=\"hidden\" name=\"_csrf_token\" value=\"";
// line 408
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Symfony\Component\Form\FormRenderer')->renderCsrfToken("authenticate"), "html", null, true);
yield "\">
<div class=\"button-container\">
<button class=\"logButton\" style=\"color:#fff;background-color:#41a2aa;border-color:rgba(0,0,0,0.2)\" >
Se connecter
</button>
</div>
<div class =\"description\" > <a id=\"mdpobli\" href=\"";
// line 417
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("forgotPassparent");
yield "\" style=\"color:#f09e7a ; display: block\">Vous avez oublié votre mot de passe ? </a> </div>
<div class=\"button-container\">
<a href=\"";
// line 420
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("connect_google_start");
yield "\" style=\"color:#fff;background-color:#4F86EC;\" class=\"logButtonSocial\" onclick=\"_gaq.push(['_trackEvent', 'btn-social', 'click', 'btn-google']);\">
<img src=\"";
// line 421
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("/images/icons-google.png"), "html", null, true);
yield "\" >Continuer avec Google
</a>
</div>
<div class=\"button-c\" style=\"display: flex;
justify-content: center;
align-items: center;\">
<a href=\"";
// line 428
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("connect_facebook_start");
yield "\" class=\"logButtonSocial\" style=\"color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)\" >
<img src=\"";
// line 429
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("/images/icons-facebook.png"), "html", null, true);
yield "\" > Continuer avec Facebook
</a>
</div>
<br>
<br>
</div>
</form>
</div>
</div>
</div>
</div>
<div class=\"col-md-3\" style=\"margin-top: 21%;display:none\">
<a href=\"";
// line 449
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("connect_google_start");
yield "\" style=\"color:#fff;background-color:#4F86EC;border-color:rgba(0,0,0,0.2)\" class=\"btn btn-block btn-social btn-google\" onclick=\"_gaq.push(['_trackEvent', 'btn-social', 'click', 'btn-google']);\">
<span class=\"fa fa-google\"></span> S'inscrire avec Google
</a>
<br>
<br>
<a href=\"";
// line 456
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("connect_facebook_start");
yield "\" class=\"btn btn-block btn-social btn-facebook\" style=\"color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)\" >
<span class=\"fa fa-facebook\"></span> S'inscrire avec Facebook
</a></div>
</div>
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
// line 463
/**
* @return iterable<null|scalar|\Stringable>
*/
public function block_javascript(array $context, array $blocks = []): iterable
{
$macros = $this->macros;
$__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
$__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascript"));
$__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "javascript"));
// line 464
yield "
";
// line 467
yield from $this->yieldParentBlock("javascript", $context, $blocks);
yield "
<script src=\"";
// line 468
yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("js/splide.min.js"), "html", null, true);
yield "\"></script>
<script src=\"https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.all.min.js\"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
// S'assurer que le modal est caché au chargement de la page
\$('#exampleModal').modal('hide');
\$('#exampleModal').removeClass('show');
\$('#exampleModal').attr('aria-hidden', 'true');
\$('body').removeClass('modal-open');
\$('.modal-backdrop').remove();
// Gestion du bouton de retour en haut
const scrollTopBtn = document.getElementById('scrollTopBtn');
// Afficher/masquer le bouton en fonction du défilement
window.addEventListener('scroll', function() {
if (window.pageYOffset > 300) {
scrollTopBtn.style.display = 'block';
} else {
scrollTopBtn.style.display = 'none';
}
});
// Action de clic sur le bouton
scrollTopBtn.addEventListener('click', function() {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
});
// Initialisation du carrousel Splide
var splide = new Splide('#imageSlider', {
type: 'loop',
perPage: 1,
autoplay: true,
interval: 6000,
pauseOnHover: false,
pauseOnFocus: false,
pagination: false , // Désactive la pagination
arrows: false
});
splide.mount();
// Auto-scroll vers les formulaires après 3 secondes
setTimeout(function() {
scrollToFormSection();
}, 5000);
// Configuration du modal de confirmation - s'assurer qu'il est bien caché
\$('#exampleModal').modal('dispose'); // Supprimer toute initialisation précédente
// Réinitialiser le modal
\$('#exampleModal').modal({
backdrop: 'static',
keyboard: false,
show: false // S'assurer que le modal ne s'affiche pas automatiquement
});
// Centrage du modal uniquement lorsqu'il est affiché
\$('#exampleModal').on('show.bs.modal', function () {
\$(this).css('display', 'flex');
\$(this).css('align-items', 'center');
\$(this).find('.modal-dialog').css({
'display': 'flex',
'align-items': 'center',
'margin': '0 auto',
'max-height': '90vh'
});
});
// Fonction pour faire défiler vers la section des formulaires
function scrollToFormSection() {
const formSection = document.getElementById('formSection');
if (formSection) {
const formPosition = formSection.getBoundingClientRect().top + window.scrollY;
const headerOffset = 50; // Tenir compte de la hauteur de l'en-tête
const scrollPosition = formPosition - headerOffset;
// Animation de défilement fluide
window.scrollTo({
top: scrollPosition,
behavior: 'smooth'
});
// Les animations de mise en évidence ont été supprimées
}
}
});
// Fonction pour afficher le popover automatiquement avec animation
function cp() {
// Afficher le loader
\$('#registerLoader').css('display', 'flex');
// Définir un timeout pour masquer le loader après 10 secondes, même si la requête n'est pas terminée
var loaderTimeout = setTimeout(function() {
\$('#registerLoader').css('display', 'none');
Swal.fire({
icon: 'info',
title: 'Inscription en cours',
text: 'Votre inscription est en cours de traitement. Vous recevrez un email de confirmation.',
confirmButtonColor: '#41a2aa',
position: 'center'
});
}, 10000);
var nomparent = \"\";
var prenomparent= \"\";
var mail = \"\";
var num = \"5555\";
console.log(num);
var confirmpassword = \$('#Passworduser2').val();
var parent_register = \"";
// line 584
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("parent_register");
yield "\";
var Passworduser = \"\";
\$testDeCreation = false;
\$testDeCreation2 = false;
\$testDeCreation3 = false;
\$testDeCreation4 = false;
\$testDeCreation5 = false;
if (\$('#nomparent').val() == \"\") {
\$('#nomparent').addClass('is-invalid');
\$('#nomparent').removeClass('is-valid');
\$('#nomparent').css('border', '1px solid red');
\$testDeCreation = false;
} else {
\$('#nomparent').removeClass('is-invalid');
\$('#nomparent').addClass('is-valid');
\$('#nomparent').css('border', '1px solid green');
nomparent = \$('#nomparent').val();
\$testDeCreation = true;
}
if (\$('#prenomparent').val() == \"\") {
\$('#prenomparent').addClass('is-invalid');
\$('#prenomparent').removeClass('is-valid');
\$('#prenomparent').css('border', '1px solid red');
\$testDeCreation1 = false;
} else {
\$('#prenomparent').removeClass('is-invalid');
\$('#prenomparent').addClass('is-valid');
\$('#prenomparent').css('border', '1px solid green');
prenomparent = \$('#prenomparent').val();
\$testDeCreation1 = true;
}
if (\$('#num').val() == \"\") {
\$('#num ').addClass('is-invalid');
\$('#num').removeClass('is-valid');
\$('#num').css('border', '1px solid red');
\$testDeCreation2 = false;
} else {
\$('#num').removeClass('is-invalid');
\$('#num').addClass('is-valid');
\$('#num').css('border', '1px solid green');
num = \$('#num').val();
\$testDeCreation2 = true;
}
if (\$('#mail').val() == \"\") {
\$('#mail').addClass('is-invalid');
\$('#mail').removeClass('is-valid');
\$('#mail').css('border', '1px solid red');
\$testDeCreation3 = false;
} else {
\$('#mail').removeClass('is-invalid');
\$('#mail').addClass('is-valid');
\$('#mail').css('border', '1px solid green');
mail = \$('#mail').val();
\$testDeCreation3 = true;
}
if (\$('#Passworduser').val() == \"\") {
\$('#Passworduser').addClass('is-invalid');
\$('#Passworduser').removeClass('is-valid');
\$('#Passworduser').css('border', '1px solid red');
\$testDeCreation4 = false;
} else {
\$('#Passworduser').removeClass('is-invalid');
\$('#Passworduser').addClass('is-valid');
\$('#Passworduser').css('border', '1px solid green');
Passworduser = \$('#Passworduser').val();
\$testDeCreation4 = true;
}
var sms = 0; var mailnotif = 0;
if (\$(\"#smsInput\").is(':checked')) {
var sms = 1;
}
if (\$(\"#mailInput\").is(':checked')){
var mailnotif = 1;
}
\$_data = {
'nomparent': nomparent,
'prenomparent': prenomparent,
'mailprent': mail,
'numtel': num,
'passwordparent': Passworduser,
'confirmpassword':confirmpassword,
'sms': sms,
'mailnotif': mailnotif
}
console.log(\$_data);
if (\$testDeCreation && \$testDeCreation1 && \$testDeCreation2 && \$testDeCreation3 && \$testDeCreation4 ) {
\$.ajax({
type: \"POST\",
url: parent_register,
data: \$_data,
success: function (\$response) {
console.log(\$response);
// Masquer le loader quelle que soit la réponse
\$('#registerLoader').css('display', 'none');
// Annuler le timeout puisque la requête est terminée
clearTimeout(loaderTimeout);
if (\$response == 'eror') {
\$('#mail').css('border-color', 'red');
\$('#eroor').css('display', 'block');
// Afficher une alerte SweetAlert pour l'email déjà utilisé avec boutons d'action
Swal.fire({
icon: 'error',
title: 'Email déjà utilisé',
text: 'Cette adresse email est déjà associée à un compte.',
footer: '<a href=\"";
// line 715
yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("forgotPassparent");
yield "\" style=\"color:#f09e7a;\">Mot de passe oublié ?</a>',
showCancelButton: true,
confirmButtonText: 'Se connecter',
cancelButtonText: 'Modifier',
confirmButtonColor: '#41a2aa',
cancelButtonColor: '#f09e7a',
position: 'center'
}).then((result) => {
if (result.isConfirmed) {
// Basculer vers le formulaire de connexion et pré-remplir l'email
AffichDivConnexion();
\$('#inputEmail').val(\$('#mail').val());
\$('#inputPassword').focus();
}
});
}
else if(\$response == 'erorpasswordconfirm')
{
\$('#Passworduser2').css('border-color', 'red');
Swal.fire({
icon: 'error',
title: 'Oups..!',
text: 'Les mots de passe ne se correspondent pas.',
footer: '',
position: 'center'
})
}
else {
\$(\"#showOkInscription\").trigger('click');
// Réinitialiser tous les champs du formulaire
resetForm();
// S'assurer que le modal est bien centré
\$('#exampleModal').on('shown.bs.modal', function () {
\$(this).find('.modal-dialog').css({
'margin-top': function () {
return (\$(window).height() - \$(this).height()) / 2;
}
});
});
var windowWidth = document.documentElement.clientWidth;
if (windowWidth <= 560) {
setTimeout(function(){
location.reload();
},500);
}
}
},
error: function() {
// Masquer le loader en cas d'erreur
\$('#registerLoader').css('display', 'none');
// Annuler le timeout puisque la requête est terminée
clearTimeout(loaderTimeout);
// Afficher un message d'erreur
Swal.fire({
icon: 'error',
title: 'Erreur de connexion',
text: 'Un problème est survenu lors de l\\'inscription. Veuillez réessayer.',
confirmButtonColor: '#f09e7a',
position: 'center'
});
}
})
} else {
// Masquer le loader si la validation échoue
\$('#registerLoader').css('display', 'none');
// Annuler le timeout puisque la validation a échoué
clearTimeout(loaderTimeout);
}
}
function AffichDivConnexion() {
\$(\"#inscriptionDiv\").css(\"display\", \"none\");
\$(\"#connexionDiv\").css(\"display\", \"block\");
}
function AffichDivInscri() {
\$(\"#inscriptionDiv\").css(\"display\", \"block\");
\$(\"#connexionDiv\").css(\"display\", \"none\");
}
// Function to handle responsive behavior based on window width
function handleResponsiveFormDisplay() {
var windowWidth = \$(window).width();
if (windowWidth <= 1024) {
// Apply mobile-like behavior for tablets/smaller screens
// Show only one form at a time with toggle buttons
\$(\"#connexionDiv\").css(\"display\", \"none\");
\$(\"#inscriptionDiv\").css(\"display\", \"block\");
\$(\".circleCree\").css(\"display\", \"block\");
} else {
// For desktop, show both forms side by side
\$(\"#connexionDiv\").css(\"display\", \"block\");
\$(\"#inscriptionDiv\").css(\"display\", \"block\");
\$(\".circleCree\").css(\"display\", \"none\");
}
}
// Run on page load
\$(document).ready(function() {
handleResponsiveFormDisplay();
// Also run when window is resized
\$(window).resize(function() {
handleResponsiveFormDisplay();
});
// Configuration pour le passage automatique au champ suivant
setupAutoNextField();
// Ajouter la validation en temps réel pour tous les champs
setupRealtimeValidation();
});
// Fonction pour configurer le passage automatique au champ suivant
function setupAutoNextField() {
// Ordre des champs dans le formulaire d'inscription
const formFields = [
'nomparent',
'prenomparent',
'mail',
'Passworduser',
'Passworduser2',
'num'
];
// Pour chaque champ, ajouter des événements pour la navigation
formFields.forEach((field, index) => {
if (index < formFields.length - 1) {
const \$currentField = \$('#' + field);
let typingTimer; // Timer pour détecter quand l'utilisateur arrête de taper
const doneTypingInterval = 1500; // Temps en ms après lequel on considère que l'utilisateur a fini de taper
// Événement lorsque l'utilisateur tape
\$currentField.on('input', function() {
clearTimeout(typingTimer);
// Si l'utilisateur appuie sur espace et que le champ est valide
if (event && event.data === ' ' && isFieldValid(field, \$(this).val().trim())) {
event.preventDefault(); // Empêcher l'espace d'être ajouté
\$('#' + formFields[index + 1]).focus();
return;
}
// Démarrer un nouveau timer
if (\$(this).val()) {
typingTimer = setTimeout(function() {
// Vérifier si le champ est valide
if (isFieldValid(field, \$currentField.val().trim())) {
\$('#' + formFields[index + 1]).focus();
}
}, doneTypingInterval);
}
});
// Réinitialiser le timer si l'utilisateur continue de taper
\$currentField.on('keydown', function(e) {
clearTimeout(typingTimer);
// Si l'utilisateur appuie sur espace et que le champ est valide
if (e.key === ' ' && isFieldValid(field, \$(this).val().trim())) {
e.preventDefault(); // Empêcher l'espace d'être ajouté
\$('#' + formFields[index + 1]).focus();
return;
}
// Si l'utilisateur appuie sur Tab ou Entrée
if (e.key === 'Tab' && !e.shiftKey) {
// Laisser le comportement par défaut de Tab
return true;
}
if (e.key === 'Enter') {
e.preventDefault(); // Empêcher la soumission du formulaire
\$('#' + formFields[index + 1]).focus();
}
});
// Événement lorsque le champ perd le focus
\$currentField.on('blur', function() {
clearTimeout(typingTimer);
});
}
});
// Pour le dernier champ, la touche Enter déclenche l'inscription
\$('#' + formFields[formFields.length - 1]).on('keydown', function(e) {
if (e.key === 'Enter') {
e.preventDefault();
cp(); // Fonction d'inscription
}
});
}
// Fonction pour vérifier si un champ est valide selon son type
function isFieldValid(fieldId, value) {
switch(fieldId) {
case 'mail':
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\$/;
return emailRegex.test(value);
case 'Passworduser':
// Minimum 6 caractères pour un mot de passe
return value.length >= 6;
case 'Passworduser2':
// Doit correspondre au mot de passe et avoir au moins 6 caractères
return value === \$('#Passworduser').val() && value.length >= 6;
case 'num':
// Numéro de téléphone: doit contenir uniquement des chiffres et avoir au moins 8 caractères
const phoneRegex = /^[0-9]{8,}\$/;
return phoneRegex.test(value.replace(/\\s+/g, '')); // Enlever les espaces avant de tester
case 'nomparent':
case 'prenomparent':
// Nom et prénom: au moins 2 caractères, pas de chiffres
const nameRegex = /^[A-Za-zÀ-ÖØ-öø-ÿ\\s'-]{2,}\$/;
return nameRegex.test(value);
default:
return value.length >= 2;
}
}
</script>
<script>
function hideshow() {
document.getElementById(\"btnn\").disabled = true;
\$(\"#btnn\").css(\"background-color\", \"#ecf0f1\");
\$(\"#mdpobli\").css(\"display\", \"none\");
\$(\"#mdpoblier\").css(\"display\", \"block\");
}
</script>
<script>
function closeModale(){
\$(\"#monModalInscription\").modal('hide');
}
// \$(\".masktelph\").inputmask({\"mask\": \"9999999999\"});
</script>
<script>
/**
* this code is used to toggle the password
*/
\$(\".toggle-password\").click(function() {
\$(this).toggleClass(\"fa-eye fa-eye-slash\");
var input = \$(\$(this).attr(\"toggle\"));
if (input.attr(\"type\") == \"password\") {
input.attr(\"type\", \"text\");
} else {
input.attr(\"type\", \"password\");
}
});
\$(document).ready(function(){
\$('[data-toggle=\"tooltip\"]').tooltip({
trigger: 'manual',
html: true,
template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>'
});
function validateEmail(email) {
const re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\$/;
return re.test(String(email).toLowerCase());
}
\$('#mail').on('input', function() {
var emailInput = \$(this);
if (validateEmail(emailInput.val())) {
emailInput.removeClass('is-invalid');
emailInput.addClass('is-valid');
emailInput.tooltip('dispose');
\$('#notification').hide();
\$('#submitBtn').prop('disabled', false);
// Ne pas passer automatiquement au champ suivant ici,
// car c'est déjà géré par setupAutoNextField()
} else {
emailInput.removeClass('is-valid');
emailInput.addClass('is-invalid');
// Afficher le tooltip seulement si l'utilisateur a commencé à saisir
if (emailInput.val().length > 3) {
emailInput.attr('data-original-title', 'Votre adresse mail est incorrecte. Exemple: nom@domaine.com').tooltip('show');
if (emailInput.val().length > 0) {
\$('#notification').show();
}
} else {
\$('#notification').hide();
}
\$('#submitBtn').prop('disabled', false);
}
});
});
</script>
// Fonction pour configurer la validation en temps réel
function setupRealtimeValidation() {
const formFields = [
'nomparent',
'prenomparent',
'mail',
'Passworduser',
'Passworduser2',
'num'
];
formFields.forEach(field => {
\$('#' + field).on('input', function() {
const value = \$(this).val();
// Ne pas afficher d'erreur tant que l'utilisateur n'a pas commencé à saisir
if (value.length === 0) {
\$(this).removeClass('is-valid is-invalid');
\$(this).css('border', '1px solid #ced4da'); // Couleur de bordure par défaut
return;
}
// Vérifier la validité du champ
if (isFieldValid(field, value)) {
\$(this).removeClass('is-invalid').addClass('is-valid');
\$(this).css('border', '1px solid #28a745'); // Vert pour valide
} else {
\$(this).removeClass('is-valid').addClass('is-invalid');
\$(this).css('border', '1px solid #dc3545'); // Rouge pour invalide
}
});
});
}
// Fonction pour réinitialiser le formulaire
function resetForm() {
\$('#nomparent').css('border','1px solid #41a2aa');
\$('#nomparent').removeClass('is-valid');
\$('#nomparent').removeClass('is-invalid');
\$('#nomparent').val('');
\$('#prenomparent').css('border','1px solid #41a2aa');
\$('#prenomparent').removeClass('is-valid');
\$('#prenomparent').removeClass('is-invalid');
\$('#prenomparent').val('');
\$('#mail').css('border','1px solid #41a2aa');
\$('#mail').removeClass('is-valid');
\$('#mail').removeClass('is-invalid');
\$('#mail').val('');
\$('#eroor').css('display','none');
\$('#num').css('border','1px solid #41a2aa');
\$('#num').removeClass('is-valid');
\$('#num').removeClass('is-invalid');
\$('#num').val('');
\$('#Passworduser').css('border','1px solid #41a2aa');
\$('#Passworduser').removeClass('is-valid');
\$('#Passworduser').removeClass('is-invalid');
\$('#Passworduser').val('');
\$('#Passworduser2').css('border','1px solid #41a2aa');
\$('#Passworduser2').removeClass('is-valid');
\$('#Passworduser2').removeClass('is-invalid');
\$('#Passworduser2').val('');
\$(\"#smsInput\").prop(\"checked\",false);
\$(\"#mailInput\").prop(\"checked\",false);
}
";
$__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
$__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
yield from [];
}
/**
* @codeCoverageIgnore
*/
public function getTemplateName(): string
{
return "Parent/LoginParent.html.twig";
}
/**
* @codeCoverageIgnore
*/
public function isTraitable(): bool
{
return false;
}
/**
* @codeCoverageIgnore
*/
public function getDebugInfo(): array
{
return array ( 916 => 715, 782 => 584, 663 => 468, 659 => 467, 654 => 464, 641 => 463, 625 => 456, 615 => 449, 592 => 429, 588 => 428, 578 => 421, 574 => 420, 568 => 417, 556 => 408, 547 => 402, 543 => 400, 537 => 398, 535 => 397, 509 => 374, 505 => 373, 497 => 368, 493 => 367, 456 => 333, 406 => 286, 394 => 277, 380 => 266, 348 => 237, 319 => 210, 306 => 209, 99 => 11, 95 => 10, 88 => 6, 84 => 5, 78 => 3, 65 => 2, 42 => 1,);
}
public function getSourceContext(): Source
{
return new Source("{% extends '/Accueil/layoutAccueilParents.html.twig' %}
{% block LinksCss %}
{{ parent() }}
<link rel=\"stylesheet\" href=\"{{'/css/Parent/css/login.css'}}\" >
<link rel=\"stylesheet\" href=\"{{'/css/Parent/css/premiercnx.css'}}\">
<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css\">
<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css\">
<link href=\"{{ asset ('css/bootstrap-social.css')}}\" type=\"text/css\" rel=\"stylesheet\" >
<link rel=\"stylesheet\" href=\"{{ asset('css/splide.min.css') }}\">
<style>
.titleProdbienvenu {
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
}
/* Style pour le bouton de retour en haut */
.scroll-top-btn {
position: fixed;
bottom: 20px;
right: 20px;
width: 40px;
height: 40px;
border-radius: 50%;
background-color: #41a2aa;
color: white;
border: none;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
z-index: 1000;
display: none;
cursor: pointer;
transition: all 0.3s ease;
}
.scroll-top-btn:hover {
background-color: #f09e7a;
transform: translateY(-3px);
}
/* Styles pour le loader d'inscription */
.register-loader {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.9);
z-index: 9999;
display: none;
justify-content: center;
align-items: center;
}
.loader-content {
text-align: center;
background-color: white;
padding: 30px;
border-radius: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
max-width: 350px;
width: 90%;
}
.loader-message {
margin-top: 20px;
font-size: 18px;
font-weight: bold;
color: #41a2aa;
}
.loader-submessage {
margin-top: 10px;
font-size: 14px;
color: #666;
}
.spinner-border {
width: 3rem;
height: 3rem;
color: #f09e7a !important;
}
/* Styles pour le modal de confirmation */
.modal {
display: flex;
align-items: center;
justify-content: center;
}
.modal-dialog {
margin: 0 auto;
max-width: 500px;
width: 90%;
}
.modal-content {
border-radius: 10px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
margin: 0 auto;
}
.modal-body {
padding: 30px 20px;
}
.modal-footer {
justify-content: center;
padding: 15px;
}
.circleModal {
background-color: #f09e7a;
color: white;
border: none;
border-radius: 5px;
padding: 10px 30px;
font-weight: bold;
transition: all 0.3s ease;
}
.circleModal:hover {
background-color: #e8865e;
transform: translateY(-2px);
}
/* Animation pour le passage au champ suivant */
.field-complete {
transition: all 0.3s ease;
border-color: #41a2aa !important;
box-shadow: 0 0 5px rgba(65, 162, 170, 0.5) !important;
transform: translateY(-2px);
}
.form-control:focus {
border-color: #f09e7a !important;
box-shadow: 0 0 6px rgba(240, 158, 122, 0.5) !important;
transition: all 0.3s ease;
}
/* Hide one form by default at 1024px and below */
@media screen and (max-width: 1360px) {
#connexionDiv, #inscriptionDiv {
width: 80% !important;
margin: 0 auto !important;
float: none !important;
margin-left: 10% !important;
}
/* Initially hide the connection form */
#connexionDiv {
display: none;
}
/* Make the inscription form take full width */
#inscriptionDiv {
display: block;
}
/* Hide the OR separator at 1024px */
.ou-container {
display: none;
}
/* Make the buttons more prominent for form switching */
.circleCree {
display: block !important;
width: 100% !important;
margin: 15px auto !important;
padding: 10px !important;
background-color: #41a2aa !important;
color: white !important;
border-radius: 5px !important;
border: none !important;
cursor: pointer !important;
text-align: center !important;
font-weight: bold !important;
}
/* Adjust column widths */
.col-md-5, .col-sm-5, .col-lg-5 {
width: 100% !important;
max-width: 100% !important;
flex: 0 0 100% !important;
}
/* Hide the middle column with the separator */
.col-md-1.col-sm-1.col-lg-1.col-xs-1 {
display: none !important;
}
}
/* Maintain desktop layout above 1024px */
@media screen and (min-width: 1360px) {
#connexionDiv, #inscriptionDiv {
display: block !important;
}
.circleCree {
display: none !important;
}
}
</style>
{% endblock %}
{% block Content %}
<!-- Bouton pour remonter en haut de la page -->
<button id=\"scrollTopBtn\" class=\"scroll-top-btn\" title=\"Retour en haut\">
<i class=\"fa fa-arrow-up\"></i>
</button>
<!-- Loader pour l'inscription -->
<div id=\"registerLoader\" class=\"register-loader\">
<div class=\"loader-content\">
<div class=\"spinner-border text-primary\" role=\"status\">
<span class=\"sr-only\">Chargement...</span>
</div>
<p class=\"loader-message\">Création de votre compte en cours...</p>
<p class=\"loader-submessage\">Nous préparons votre espace parent 5sur5sejour, merci de patienter.</p>
</div>
</div>
<!-- Modal de confirmation - avec l'attribut aria-hidden=\"true\" pour s'assurer qu'il est caché par défaut -->
<div class=\"modal fade\" id=\"exampleModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\" style=\"display: none;\">
<div class=\"modal-dialog modal-dialog-centered\" role=\"document\">
<div class=\"modal-content\">
<div class=\"modal-header\" style=\"border-bottom: none; padding-bottom: 0;\">
<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\" style=\"position: absolute; right: 15px; top: 15px;\">
<span aria-hidden=\"true\">×</span>
</button>
</div>
<div class=\"modal-body text-center\">
<img class=\"imageLogo2 mb-3\" src=\"{{ asset ('Accueil/imagesAccueil/logoHeader.svg')}}\" alt=\"Logo 5 sur 5 séjour\">
<div class=\"row mb-4\">
<div class=\"col-12\">
<h4 class=\"font-weight-bold text-success\">Merci pour votre inscription à 5sur5sejour.com !</h4>
<p class=\"mt-3\">Vous allez recevoir un mail de confirmation afin d'accéder au site</p>
</div>
</div>
</div>
<div class=\"modal-footer\" style=\"border-top: none;\">
<button class=\"circleModal\" data-dismiss=\"modal\" onclick=\"location.reload();\" style=\"margin: 0 auto; padding: 10px 40px; font-size: 16px;\">OK</button>
</div>
</div>
</div>
</div>
<div class=\"splide no-padding no-margin\" id=\"imageSlider\" style=\"background:white\">
<div class=\"splide__track\">
<ul class=\"splide__list\">
<!-- Slide 1 -->
<!-- Slide 2 -->
<li class=\"splide__slide\">
<div class=\"slider-content\">
<div class=\"namePRD\" style=\"display: block;\">
<h4 class=\"titleProdbienvenu titleProdbienvenu1\" style=\"color: #41a2aa\">Offrez des souvenirs inoubliables à votre enfant </h4>
<h4 class=\"titleProdbienvenu titleProdbienvenu2\" style=\"color:#F09E7A\">avec des cadeaux personnalisés en toute simplicité !</h4>
</div>
<img src=\"{{ asset('/images/3.png') }}\" class=\"imgslider\" alt=\"Image 2\" />
</div>
</li>
<li class=\"splide__slide\">
<div class=\"slider-content\">
<div class=\"namePRD\" style=\"display: block;\">
<h4 class=\"titleProdbienvenu titleProdbienvenu1\" style=\"color:#F09E7A\">Restez connecté au séjour de votre enfant 24h/24 </h4>
<h4 class=\"titleProdbienvenu titleProdbienvenu2\" style=\"color:#41a2aa\">grâce à des photos partagées en toute sécurité !</h4>
</div>
<img src=\"{{ asset('/images/2.png') }}\" class=\"imgslider\" alt=\"Image 1\" />
</div>
</li>
<li class=\"splide__slide\">
<div class=\"slider-content\">
<div class=\"namePRD\" style=\"display: block;\">
<h4 class=\"titleProdbienvenu titleProdbienvenu1\" style=\"color: #41a2aa\">Accéder à une boite vocale en illimitée</h4>
<h4 class=\"titleProdbienvenu titleProdbienvenu2\" style=\"color:#F09E7A\">Pour écouter les messages laissés par les enfants et les accompagnateurs</h4>
</div>
<img src=\"{{ asset('/images/1.png') }}\" class=\"imgslider\" alt=\"Image 2\" />
</div>
</li>
</ul>
</div>
</div>
<div class='row no-margin' style=\"padding-top:4%\">
<div class=\"col-lg-1 col-md-1 col-sm-1 col-xs-1 no-padding SeparateurLeftAccom\"></div>
<div class=\"col-md-10 col-sm-10 col-lg-10 col-xs-12 \" >
<!-- Bouton caché qui déclenche le modal de confirmation -->
<button type=\"button\" id=\"showOkInscription\" class=\"d-none\" data-toggle=\"modal\" data-target=\"#exampleModal\">
En savoir plus
</button>
<div class=\"row no-margin\" style='margin-right: auto;margin-top:15px' id=\"formSection\">
<div class=\"col-md-5 col-sm-5 col-lg-5 Inscription \" id='inscriptionDiv'>
<form class =\"form-section\" id=\"create\" onsubmit=\"cp(); return false;\">
<div class=\"soutitle\"> Créer un compte </div>
<div class =\"description2\" > Vous vous connectez pour la 1ère fois et n'avez pas
<br> de compte Parent(s) « 5 sur 5 séjour » </div>
<button type=\"button\" align =\"center\" class=\"circleCree\" onclick=\"AffichDivConnexion();\">Vous avez déjà un compte Parent(s) ? </button>
<div class=\"form-group\">
<input type=\"text\" class=\"form-control\" id=\"nomparent\" placeholder=\"NOM * \" >
<input type=\"text\" class=\"form-control\" id=\"prenomparent\" placeholder=\"PRENOM *\">
<input type=\"text\" autocomplete=\"off\" class=\"form-control\" id=\"mail\" placeholder=\"ADRESSE MAIL\" required data-toggle=\"tooltip\" data-placement=\"right\" title=\"\">
<input type=\"password\" autocomplete=\"off\" name=\"password\" id=\"Passworduser\" value=\"\" class=\"form-control\" placeholder=\"MOT DE PASSE * \">
<input type=\"password\" autocomplete=\"off\" name=\"password\" id=\"Passworduser2\" class=\"form-control\" placeholder=\"CONFIRMER VOTRE MOT DE PASSE\">
<p style=\"display: none; color:red; font-weight: bold; margin-top: 10px;\" id=\"eroor\">Cet email est déjà utilisé. <a href=\"{{ path(\"forgotPassparent\") }}\" style=\"color:#f09e7a; text-decoration: underline;\">Mot de passe oublié ?</a></p>
<input type=\"text\" class=\"form-control\" id=\"num\" name=\"numero de téléphone\" placeholder=\"NUMERO DE TELEPHONE PORTABLE * \">
<div class=\"row no-margin \">
<div class=\"souTITRE\">Souhaitez-vous être averti lorsque l'organisateur dépose des images ou des messages du séjour ?</div>
</div>
<br>
<div class=\"row no-margin\">
<div class=\"box-1\" id=\"smsToggle\">
<input type='checkbox' name =\"sms\" id =\"smsInput\" />
<span class=\"toogle\"> </span>
</div>
<span class=\"sms\"> Par SMS </span>
<div class=\"box-1\">
<input type='checkbox' name =\"mail\" id =\"mailInput\" />
<span class=\"toogle\" > </span>
</div>
<span class=\"mail\"> Par Mail </span>
</div>
</div>
<div class=\"notification\" id=\"notification\" style=\"display: none;\">L'adresse e-mail est incorrecte.</div>
<div class=\"button-container\">
<button type=\"button\" onclick=\"cp();\" class=\"logButton\" style=\"color:#fff;border: 1px solid #f09e7a; position: relative;
background-color: #f09e7a;\" id=\"submitBtn\">
S'inscrire
</button></div>
<div class=\"button-container mobilesocial\">
<a href=\"{{ path('connect_google_start') }}\" style=\"color:#fff;background-color:#4F86EC;\" class=\"logButtonSocial\" onclick=\"_gaq.push(['_trackEvent', 'btn-social', 'click', 'btn-google']);\">
<img src=\"{{ asset('/images/icons-google.png') }}\" >Continuer avec Google
</a>
</div>
<div class=\"mobilesocial\" >
<a href=\"{{ path('connect_facebook_start') }}\" class=\"logButtonSocial\" style=\"color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)\" >
<img src=\"{{ asset('/images/icons-facebook.png') }}\" > Continuer avec Facebook
</a>
</div>
</form>
</div>
<div class=\"col-md-1 col-sm-1 col-lg-1 col-xs-1 \" ><div class=\"ou-container\" style=\"margin-left: 20%;\">
<div class=\"ou-line\"></div>
<div class=\"ou-text\">OU</div>
</div> </div>
<div class=\"col-md-5 col-sm-5 col-lg-5 col-xs-5 connexion \" id='connexionDiv' >
<div class=\"form-section\">
<div class=\"soutitle\"> Se connecter </div>
<div class =\"description2\" >Vous avez déja un compte Parent(s) « 5 sur 5 séjour » </div>
<button type=\"button\" align =\"center\" class=\"circleCree\" onclick=\"AffichDivInscri();\">Créer un compte ? </button>
<form method=\"post\" class=\"\">
{% if error %}
<div class=\"alert alert-danger\">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<div class=\"form-group\">
<input type=\"text\" name=\"email\" id=\"inputEmail\" value=\"{{ last_username }}\" class=\"form-control\" placeholder=\"Mon identifiant * \" >
<input type=\"password\" name=\"password\" id=\"inputPassword\" class=\"form-control\" placeholder=\"Mon mot de passe *\">
<span toggle=\"#inputPassword\" class=\"fa fa-fw fa-eye field-icon toggle-password\"></span>
<input type=\"hidden\" name=\"_csrf_token\" value=\"{{ csrf_token('authenticate') }}\">
<div class=\"button-container\">
<button class=\"logButton\" style=\"color:#fff;background-color:#41a2aa;border-color:rgba(0,0,0,0.2)\" >
Se connecter
</button>
</div>
<div class =\"description\" > <a id=\"mdpobli\" href=\"{{ path(\"forgotPassparent\") }}\" style=\"color:#f09e7a ; display: block\">Vous avez oublié votre mot de passe ? </a> </div>
<div class=\"button-container\">
<a href=\"{{ path('connect_google_start') }}\" style=\"color:#fff;background-color:#4F86EC;\" class=\"logButtonSocial\" onclick=\"_gaq.push(['_trackEvent', 'btn-social', 'click', 'btn-google']);\">
<img src=\"{{ asset('/images/icons-google.png') }}\" >Continuer avec Google
</a>
</div>
<div class=\"button-c\" style=\"display: flex;
justify-content: center;
align-items: center;\">
<a href=\"{{ path('connect_facebook_start') }}\" class=\"logButtonSocial\" style=\"color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)\" >
<img src=\"{{ asset('/images/icons-facebook.png') }}\" > Continuer avec Facebook
</a>
</div>
<br>
<br>
</div>
</form>
</div>
</div>
</div>
</div>
<div class=\"col-md-3\" style=\"margin-top: 21%;display:none\">
<a href=\"{{ path('connect_google_start') }}\" style=\"color:#fff;background-color:#4F86EC;border-color:rgba(0,0,0,0.2)\" class=\"btn btn-block btn-social btn-google\" onclick=\"_gaq.push(['_trackEvent', 'btn-social', 'click', 'btn-google']);\">
<span class=\"fa fa-google\"></span> S'inscrire avec Google
</a>
<br>
<br>
<a href=\"{{ path('connect_facebook_start') }}\" class=\"btn btn-block btn-social btn-facebook\" style=\"color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)\" >
<span class=\"fa fa-facebook\"></span> S'inscrire avec Facebook
</a></div>
</div>
{% endblock %}
{% block javascript %}
{{ parent() }}
<script src=\"{{ asset('js/splide.min.js') }}\"></script>
<script src=\"https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.all.min.js\"></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
// S'assurer que le modal est caché au chargement de la page
\$('#exampleModal').modal('hide');
\$('#exampleModal').removeClass('show');
\$('#exampleModal').attr('aria-hidden', 'true');
\$('body').removeClass('modal-open');
\$('.modal-backdrop').remove();
// Gestion du bouton de retour en haut
const scrollTopBtn = document.getElementById('scrollTopBtn');
// Afficher/masquer le bouton en fonction du défilement
window.addEventListener('scroll', function() {
if (window.pageYOffset > 300) {
scrollTopBtn.style.display = 'block';
} else {
scrollTopBtn.style.display = 'none';
}
});
// Action de clic sur le bouton
scrollTopBtn.addEventListener('click', function() {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
});
// Initialisation du carrousel Splide
var splide = new Splide('#imageSlider', {
type: 'loop',
perPage: 1,
autoplay: true,
interval: 6000,
pauseOnHover: false,
pauseOnFocus: false,
pagination: false , // Désactive la pagination
arrows: false
});
splide.mount();
// Auto-scroll vers les formulaires après 3 secondes
setTimeout(function() {
scrollToFormSection();
}, 5000);
// Configuration du modal de confirmation - s'assurer qu'il est bien caché
\$('#exampleModal').modal('dispose'); // Supprimer toute initialisation précédente
// Réinitialiser le modal
\$('#exampleModal').modal({
backdrop: 'static',
keyboard: false,
show: false // S'assurer que le modal ne s'affiche pas automatiquement
});
// Centrage du modal uniquement lorsqu'il est affiché
\$('#exampleModal').on('show.bs.modal', function () {
\$(this).css('display', 'flex');
\$(this).css('align-items', 'center');
\$(this).find('.modal-dialog').css({
'display': 'flex',
'align-items': 'center',
'margin': '0 auto',
'max-height': '90vh'
});
});
// Fonction pour faire défiler vers la section des formulaires
function scrollToFormSection() {
const formSection = document.getElementById('formSection');
if (formSection) {
const formPosition = formSection.getBoundingClientRect().top + window.scrollY;
const headerOffset = 50; // Tenir compte de la hauteur de l'en-tête
const scrollPosition = formPosition - headerOffset;
// Animation de défilement fluide
window.scrollTo({
top: scrollPosition,
behavior: 'smooth'
});
// Les animations de mise en évidence ont été supprimées
}
}
});
// Fonction pour afficher le popover automatiquement avec animation
function cp() {
// Afficher le loader
\$('#registerLoader').css('display', 'flex');
// Définir un timeout pour masquer le loader après 10 secondes, même si la requête n'est pas terminée
var loaderTimeout = setTimeout(function() {
\$('#registerLoader').css('display', 'none');
Swal.fire({
icon: 'info',
title: 'Inscription en cours',
text: 'Votre inscription est en cours de traitement. Vous recevrez un email de confirmation.',
confirmButtonColor: '#41a2aa',
position: 'center'
});
}, 10000);
var nomparent = \"\";
var prenomparent= \"\";
var mail = \"\";
var num = \"5555\";
console.log(num);
var confirmpassword = \$('#Passworduser2').val();
var parent_register = \"{{ path('parent_register') }}\";
var Passworduser = \"\";
\$testDeCreation = false;
\$testDeCreation2 = false;
\$testDeCreation3 = false;
\$testDeCreation4 = false;
\$testDeCreation5 = false;
if (\$('#nomparent').val() == \"\") {
\$('#nomparent').addClass('is-invalid');
\$('#nomparent').removeClass('is-valid');
\$('#nomparent').css('border', '1px solid red');
\$testDeCreation = false;
} else {
\$('#nomparent').removeClass('is-invalid');
\$('#nomparent').addClass('is-valid');
\$('#nomparent').css('border', '1px solid green');
nomparent = \$('#nomparent').val();
\$testDeCreation = true;
}
if (\$('#prenomparent').val() == \"\") {
\$('#prenomparent').addClass('is-invalid');
\$('#prenomparent').removeClass('is-valid');
\$('#prenomparent').css('border', '1px solid red');
\$testDeCreation1 = false;
} else {
\$('#prenomparent').removeClass('is-invalid');
\$('#prenomparent').addClass('is-valid');
\$('#prenomparent').css('border', '1px solid green');
prenomparent = \$('#prenomparent').val();
\$testDeCreation1 = true;
}
if (\$('#num').val() == \"\") {
\$('#num ').addClass('is-invalid');
\$('#num').removeClass('is-valid');
\$('#num').css('border', '1px solid red');
\$testDeCreation2 = false;
} else {
\$('#num').removeClass('is-invalid');
\$('#num').addClass('is-valid');
\$('#num').css('border', '1px solid green');
num = \$('#num').val();
\$testDeCreation2 = true;
}
if (\$('#mail').val() == \"\") {
\$('#mail').addClass('is-invalid');
\$('#mail').removeClass('is-valid');
\$('#mail').css('border', '1px solid red');
\$testDeCreation3 = false;
} else {
\$('#mail').removeClass('is-invalid');
\$('#mail').addClass('is-valid');
\$('#mail').css('border', '1px solid green');
mail = \$('#mail').val();
\$testDeCreation3 = true;
}
if (\$('#Passworduser').val() == \"\") {
\$('#Passworduser').addClass('is-invalid');
\$('#Passworduser').removeClass('is-valid');
\$('#Passworduser').css('border', '1px solid red');
\$testDeCreation4 = false;
} else {
\$('#Passworduser').removeClass('is-invalid');
\$('#Passworduser').addClass('is-valid');
\$('#Passworduser').css('border', '1px solid green');
Passworduser = \$('#Passworduser').val();
\$testDeCreation4 = true;
}
var sms = 0; var mailnotif = 0;
if (\$(\"#smsInput\").is(':checked')) {
var sms = 1;
}
if (\$(\"#mailInput\").is(':checked')){
var mailnotif = 1;
}
\$_data = {
'nomparent': nomparent,
'prenomparent': prenomparent,
'mailprent': mail,
'numtel': num,
'passwordparent': Passworduser,
'confirmpassword':confirmpassword,
'sms': sms,
'mailnotif': mailnotif
}
console.log(\$_data);
if (\$testDeCreation && \$testDeCreation1 && \$testDeCreation2 && \$testDeCreation3 && \$testDeCreation4 ) {
\$.ajax({
type: \"POST\",
url: parent_register,
data: \$_data,
success: function (\$response) {
console.log(\$response);
// Masquer le loader quelle que soit la réponse
\$('#registerLoader').css('display', 'none');
// Annuler le timeout puisque la requête est terminée
clearTimeout(loaderTimeout);
if (\$response == 'eror') {
\$('#mail').css('border-color', 'red');
\$('#eroor').css('display', 'block');
// Afficher une alerte SweetAlert pour l'email déjà utilisé avec boutons d'action
Swal.fire({
icon: 'error',
title: 'Email déjà utilisé',
text: 'Cette adresse email est déjà associée à un compte.',
footer: '<a href=\"{{ path(\"forgotPassparent\") }}\" style=\"color:#f09e7a;\">Mot de passe oublié ?</a>',
showCancelButton: true,
confirmButtonText: 'Se connecter',
cancelButtonText: 'Modifier',
confirmButtonColor: '#41a2aa',
cancelButtonColor: '#f09e7a',
position: 'center'
}).then((result) => {
if (result.isConfirmed) {
// Basculer vers le formulaire de connexion et pré-remplir l'email
AffichDivConnexion();
\$('#inputEmail').val(\$('#mail').val());
\$('#inputPassword').focus();
}
});
}
else if(\$response == 'erorpasswordconfirm')
{
\$('#Passworduser2').css('border-color', 'red');
Swal.fire({
icon: 'error',
title: 'Oups..!',
text: 'Les mots de passe ne se correspondent pas.',
footer: '',
position: 'center'
})
}
else {
\$(\"#showOkInscription\").trigger('click');
// Réinitialiser tous les champs du formulaire
resetForm();
// S'assurer que le modal est bien centré
\$('#exampleModal').on('shown.bs.modal', function () {
\$(this).find('.modal-dialog').css({
'margin-top': function () {
return (\$(window).height() - \$(this).height()) / 2;
}
});
});
var windowWidth = document.documentElement.clientWidth;
if (windowWidth <= 560) {
setTimeout(function(){
location.reload();
},500);
}
}
},
error: function() {
// Masquer le loader en cas d'erreur
\$('#registerLoader').css('display', 'none');
// Annuler le timeout puisque la requête est terminée
clearTimeout(loaderTimeout);
// Afficher un message d'erreur
Swal.fire({
icon: 'error',
title: 'Erreur de connexion',
text: 'Un problème est survenu lors de l\\'inscription. Veuillez réessayer.',
confirmButtonColor: '#f09e7a',
position: 'center'
});
}
})
} else {
// Masquer le loader si la validation échoue
\$('#registerLoader').css('display', 'none');
// Annuler le timeout puisque la validation a échoué
clearTimeout(loaderTimeout);
}
}
function AffichDivConnexion() {
\$(\"#inscriptionDiv\").css(\"display\", \"none\");
\$(\"#connexionDiv\").css(\"display\", \"block\");
}
function AffichDivInscri() {
\$(\"#inscriptionDiv\").css(\"display\", \"block\");
\$(\"#connexionDiv\").css(\"display\", \"none\");
}
// Function to handle responsive behavior based on window width
function handleResponsiveFormDisplay() {
var windowWidth = \$(window).width();
if (windowWidth <= 1024) {
// Apply mobile-like behavior for tablets/smaller screens
// Show only one form at a time with toggle buttons
\$(\"#connexionDiv\").css(\"display\", \"none\");
\$(\"#inscriptionDiv\").css(\"display\", \"block\");
\$(\".circleCree\").css(\"display\", \"block\");
} else {
// For desktop, show both forms side by side
\$(\"#connexionDiv\").css(\"display\", \"block\");
\$(\"#inscriptionDiv\").css(\"display\", \"block\");
\$(\".circleCree\").css(\"display\", \"none\");
}
}
// Run on page load
\$(document).ready(function() {
handleResponsiveFormDisplay();
// Also run when window is resized
\$(window).resize(function() {
handleResponsiveFormDisplay();
});
// Configuration pour le passage automatique au champ suivant
setupAutoNextField();
// Ajouter la validation en temps réel pour tous les champs
setupRealtimeValidation();
});
// Fonction pour configurer le passage automatique au champ suivant
function setupAutoNextField() {
// Ordre des champs dans le formulaire d'inscription
const formFields = [
'nomparent',
'prenomparent',
'mail',
'Passworduser',
'Passworduser2',
'num'
];
// Pour chaque champ, ajouter des événements pour la navigation
formFields.forEach((field, index) => {
if (index < formFields.length - 1) {
const \$currentField = \$('#' + field);
let typingTimer; // Timer pour détecter quand l'utilisateur arrête de taper
const doneTypingInterval = 1500; // Temps en ms après lequel on considère que l'utilisateur a fini de taper
// Événement lorsque l'utilisateur tape
\$currentField.on('input', function() {
clearTimeout(typingTimer);
// Si l'utilisateur appuie sur espace et que le champ est valide
if (event && event.data === ' ' && isFieldValid(field, \$(this).val().trim())) {
event.preventDefault(); // Empêcher l'espace d'être ajouté
\$('#' + formFields[index + 1]).focus();
return;
}
// Démarrer un nouveau timer
if (\$(this).val()) {
typingTimer = setTimeout(function() {
// Vérifier si le champ est valide
if (isFieldValid(field, \$currentField.val().trim())) {
\$('#' + formFields[index + 1]).focus();
}
}, doneTypingInterval);
}
});
// Réinitialiser le timer si l'utilisateur continue de taper
\$currentField.on('keydown', function(e) {
clearTimeout(typingTimer);
// Si l'utilisateur appuie sur espace et que le champ est valide
if (e.key === ' ' && isFieldValid(field, \$(this).val().trim())) {
e.preventDefault(); // Empêcher l'espace d'être ajouté
\$('#' + formFields[index + 1]).focus();
return;
}
// Si l'utilisateur appuie sur Tab ou Entrée
if (e.key === 'Tab' && !e.shiftKey) {
// Laisser le comportement par défaut de Tab
return true;
}
if (e.key === 'Enter') {
e.preventDefault(); // Empêcher la soumission du formulaire
\$('#' + formFields[index + 1]).focus();
}
});
// Événement lorsque le champ perd le focus
\$currentField.on('blur', function() {
clearTimeout(typingTimer);
});
}
});
// Pour le dernier champ, la touche Enter déclenche l'inscription
\$('#' + formFields[formFields.length - 1]).on('keydown', function(e) {
if (e.key === 'Enter') {
e.preventDefault();
cp(); // Fonction d'inscription
}
});
}
// Fonction pour vérifier si un champ est valide selon son type
function isFieldValid(fieldId, value) {
switch(fieldId) {
case 'mail':
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\$/;
return emailRegex.test(value);
case 'Passworduser':
// Minimum 6 caractères pour un mot de passe
return value.length >= 6;
case 'Passworduser2':
// Doit correspondre au mot de passe et avoir au moins 6 caractères
return value === \$('#Passworduser').val() && value.length >= 6;
case 'num':
// Numéro de téléphone: doit contenir uniquement des chiffres et avoir au moins 8 caractères
const phoneRegex = /^[0-9]{8,}\$/;
return phoneRegex.test(value.replace(/\\s+/g, '')); // Enlever les espaces avant de tester
case 'nomparent':
case 'prenomparent':
// Nom et prénom: au moins 2 caractères, pas de chiffres
const nameRegex = /^[A-Za-zÀ-ÖØ-öø-ÿ\\s'-]{2,}\$/;
return nameRegex.test(value);
default:
return value.length >= 2;
}
}
</script>
<script>
function hideshow() {
document.getElementById(\"btnn\").disabled = true;
\$(\"#btnn\").css(\"background-color\", \"#ecf0f1\");
\$(\"#mdpobli\").css(\"display\", \"none\");
\$(\"#mdpoblier\").css(\"display\", \"block\");
}
</script>
<script>
function closeModale(){
\$(\"#monModalInscription\").modal('hide');
}
// \$(\".masktelph\").inputmask({\"mask\": \"9999999999\"});
</script>
<script>
/**
* this code is used to toggle the password
*/
\$(\".toggle-password\").click(function() {
\$(this).toggleClass(\"fa-eye fa-eye-slash\");
var input = \$(\$(this).attr(\"toggle\"));
if (input.attr(\"type\") == \"password\") {
input.attr(\"type\", \"text\");
} else {
input.attr(\"type\", \"password\");
}
});
\$(document).ready(function(){
\$('[data-toggle=\"tooltip\"]').tooltip({
trigger: 'manual',
html: true,
template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>'
});
function validateEmail(email) {
const re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\$/;
return re.test(String(email).toLowerCase());
}
\$('#mail').on('input', function() {
var emailInput = \$(this);
if (validateEmail(emailInput.val())) {
emailInput.removeClass('is-invalid');
emailInput.addClass('is-valid');
emailInput.tooltip('dispose');
\$('#notification').hide();
\$('#submitBtn').prop('disabled', false);
// Ne pas passer automatiquement au champ suivant ici,
// car c'est déjà géré par setupAutoNextField()
} else {
emailInput.removeClass('is-valid');
emailInput.addClass('is-invalid');
// Afficher le tooltip seulement si l'utilisateur a commencé à saisir
if (emailInput.val().length > 3) {
emailInput.attr('data-original-title', 'Votre adresse mail est incorrecte. Exemple: nom@domaine.com').tooltip('show');
if (emailInput.val().length > 0) {
\$('#notification').show();
}
} else {
\$('#notification').hide();
}
\$('#submitBtn').prop('disabled', false);
}
});
});
</script>
// Fonction pour configurer la validation en temps réel
function setupRealtimeValidation() {
const formFields = [
'nomparent',
'prenomparent',
'mail',
'Passworduser',
'Passworduser2',
'num'
];
formFields.forEach(field => {
\$('#' + field).on('input', function() {
const value = \$(this).val();
// Ne pas afficher d'erreur tant que l'utilisateur n'a pas commencé à saisir
if (value.length === 0) {
\$(this).removeClass('is-valid is-invalid');
\$(this).css('border', '1px solid #ced4da'); // Couleur de bordure par défaut
return;
}
// Vérifier la validité du champ
if (isFieldValid(field, value)) {
\$(this).removeClass('is-invalid').addClass('is-valid');
\$(this).css('border', '1px solid #28a745'); // Vert pour valide
} else {
\$(this).removeClass('is-valid').addClass('is-invalid');
\$(this).css('border', '1px solid #dc3545'); // Rouge pour invalide
}
});
});
}
// Fonction pour réinitialiser le formulaire
function resetForm() {
\$('#nomparent').css('border','1px solid #41a2aa');
\$('#nomparent').removeClass('is-valid');
\$('#nomparent').removeClass('is-invalid');
\$('#nomparent').val('');
\$('#prenomparent').css('border','1px solid #41a2aa');
\$('#prenomparent').removeClass('is-valid');
\$('#prenomparent').removeClass('is-invalid');
\$('#prenomparent').val('');
\$('#mail').css('border','1px solid #41a2aa');
\$('#mail').removeClass('is-valid');
\$('#mail').removeClass('is-invalid');
\$('#mail').val('');
\$('#eroor').css('display','none');
\$('#num').css('border','1px solid #41a2aa');
\$('#num').removeClass('is-valid');
\$('#num').removeClass('is-invalid');
\$('#num').val('');
\$('#Passworduser').css('border','1px solid #41a2aa');
\$('#Passworduser').removeClass('is-valid');
\$('#Passworduser').removeClass('is-invalid');
\$('#Passworduser').val('');
\$('#Passworduser2').css('border','1px solid #41a2aa');
\$('#Passworduser2').removeClass('is-valid');
\$('#Passworduser2').removeClass('is-invalid');
\$('#Passworduser2').val('');
\$(\"#smsInput\").prop(\"checked\",false);
\$(\"#mailInput\").prop(\"checked\",false);
}
{% endblock %}
", "Parent/LoginParent.html.twig", "/var/www/5sur5sejour/templates/Parent/LoginParent.html.twig");
}
}