feat: ajouter_prestation validée w3c validator et normalisee

This commit is contained in:
2025-12-12 16:45:35 +01:00
parent 55a31a507c
commit aef7d63451
5 changed files with 302 additions and 126 deletions

15
package-lock.json generated
View File

@@ -19,7 +19,6 @@
"version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"license": "MIT",
"peer": true,
"funding": {
"type": "opencollective",
@@ -40,7 +39,6 @@
"url": "https://opencollective.com/bootstrap"
}
],
"license": "MIT",
"peerDependencies": {
"@popperjs/core": "^2.11.8"
}
@@ -58,7 +56,6 @@
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz",
"integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.10.0"
@@ -68,7 +65,6 @@
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz",
"integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==",
"license": "MIT",
"peer": true,
"dependencies": {
"scheduler": "^0.27.0"
@@ -81,20 +77,17 @@
"version": "0.27.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
"integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
"license": "MIT",
"peer": true
},
"node_modules/tinymce": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/tinymce/-/tinymce-8.3.0.tgz",
"integrity": "sha512-9IjrEo8HD5mg9QP6/rKcPSIcyRNVSf5eiYTqapb/q1zAIoISRJgI2DJUs4CJgZvio0hmEH394xSHUJuoGf4Msw==",
"license": "SEE LICENSE IN license.md"
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/tinymce/-/tinymce-8.2.2.tgz",
"integrity": "sha512-CFDSZwciMvFGW2czK/Xig1HcOGpXI0qcQMIqaIcG2F4RuuTdf+LQTreyEZunAJoFTQ9L0KAugOqL7OA5TJkoAA=="
},
"node_modules/tinymce-i18n": {
"version": "25.11.17",
"resolved": "https://registry.npmjs.org/tinymce-i18n/-/tinymce-i18n-25.11.17.tgz",
"integrity": "sha512-Fi5hGRDL9o42VsdahgNgHRHO/4ClAAqIew45QMu8sa5LQT2wTaVPf/tAXnVDHxR7c6NWZQmZp/E18LosxLq42A==",
"license": "MIT"
"integrity": "sha512-Fi5hGRDL9o42VsdahgNgHRHO/4ClAAqIew45QMu8sa5LQT2wTaVPf/tAXnVDHxR7c6NWZQmZp/E18LosxLq42A=="
}
}
}

View File

@@ -3,115 +3,156 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ajouter une prestation</title>
<link rel="stylesheet" href="/css/prestation.css">
<link rel="stylesheet" href="/node_modules/bootstrap/dist/css/bootstrap.min.css">
<title>Ajouter une préstation</title>
<link href="../../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="node_modules/bs-icon/icons.css">
<link rel="shortcut icon" href="favicon.png" type="image/png">
<link rel="stylesheet" href="../../css/style.css">
</head>
<body>
<header>
<nav class="navbar navbar-expand-xl bg-body-tertiary shadow-sm">
<div class="container-fluid align-items-center">
<a class="navbar-brand" href="#">L'Il'eau chiens - Admin</a>
<nav class="navbar navbar-expand-xxl bg-body-tertiary shadow-sm">
<div class="container-fluid align-items-center">
<a class="navbar-brand" href="#">L'Il'eau chiens - Admin</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active left-label" aria-current="page" href="#">Blog</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Boutique</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Prestations</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Fiche renseignements</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Partenaires</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Citations</a>
</li>
</ul>
<!-- MENU GAUCHE -->
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item"><a class="nav-link active" href="#">Blog</a></li>
<li class="nav-item"><a class="nav-link" href="#">Boutique</a></li>
<li class="nav-item"><a class="nav-link" href="#">Prestations</a></li>
<li class="nav-item"><a class="nav-link" href="#">FAQ</a></li>
<li class="nav-item"><a class="nav-link" href="#">Fiche de renseignements</a></li>
<li class="nav-item"><a class="nav-link" href="#">Partenaires</a></li>
</ul>
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-megaphone me-1"></i> Message d'actu</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-box-arrow-up-right me-1"></i> Voir le site</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-gear me-1"></i> Configuration</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="userMenu" role="button"
data-bs-toggle="dropdown" aria-expanded="false">
<i class="bi bi-person-circle me-1"></i> <span id="userFirstName">Prénom</span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userMenu">
<li><a class="dropdown-item" href="#">Profil</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Sortir</a></li>
</ul>
</li>
</ul>
<!-- MENU DROIT -->
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-megaphone me-1"></i> Message d'actu</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-box-arrow-up-right me-1"></i> Voir le site</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-gear me-1"></i> Configuration</a>
</li>
</div>
</div>
</nav>
</header>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="userMenu" data-bs-toggle="dropdown">
<i class="bi bi-person-circle me-1"></i> <span id="userFirstName">Prénom</span>
</a>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="#">Profil</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Sortir</a></li>
</ul>
</li>
</ul>
<main class="my-5 fs-6">
<div class="container">
<header>
<h1 class="title my-4 fs-2">Ajouter une prestation</h1>
<!-- Erreur champ vide -->
<div id="errorEmpty" class="alert alert-danger d-none">Le titre est obligatoire.</div>
<!-- Erreur nom déjà existant -->
<div id="errorExists" class="alert alert-danger d-none">
Cette prestation existe déjà. Veuillez en choisir une autre.
</div>
<!-- Succès ajout -->
<div id="successMessage" class="alert alert-success d-none">
Prestation ajoutée avec succès !
</div>
</header>
<div class="section">
<form id="addCategoryForm">
<div class="mb-4">
<label class="form-label fw-bold" for="categoryName">
Titre de la prestation (obligatoire)
</label>
<input type="text" id="categoryName" class="form-control" required>
</div>
<div class="mb-3">
<label class="form-label fw-bold" for="prestationType">
Type de prestation (obligatoire)
</label>
<select id="prestationType" class="form-select" required>
<option value="" selected disabled>-- Choisissez un type --</option>
<option value="chien">Chien</option>
<option value="chat">Chat</option>
</select>
</div>
<!-- Étapes -->
<div class="mb-3">
<label class="form-label fw-bold">Choisissez les étapes (obligatoire)</label>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="stepCiseaux" name="steps" value="coupe_ciseaux">
<label class="form-check-label" for="stepCiseaux">Coupe ciseaux</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="stepGriffes" name="steps" value="coupe_griffes">
<label class="form-check-label" for="stepGriffes">Coupe griffes</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="stepSechage" name="steps" value="sechage_doux">
<label class="form-check-label" for="stepSechage">Séchage doux</label>
</div>
</div>
<!-- Tarifs -->
<div class="mb-3">
<label class="form-label fw-bold">Tarif (fourchette) (obligatoire)</label>
<div class="d-flex gap-3">
<input type="number" id="priceMin" class="form-control" placeholder="Prix min (€)" value="35" required>
<input type="number" id="priceMax" class="form-control" placeholder="Prix max (€)" value="60" required>
</div>
</div>
<div class="d-flex gap-3 mt-4">
<a href="../html/prestation_accueil.html" class="btn btn-secondary w-50">Annuler</a>
<button type="submit" class="btn btn-primary w-50">Ajouter</button>
</div>
</form>
</div>
</div>
</nav>
</header>
</main>
<div class="container">
<h1 class="mb-5 text-center">Ajouter une prestation</h1>
<!-- Messages DOM -->
<div id="messages" class="mb-3"></div>
<form id="addCategoryForm">
<div class="mb-4">
<label class="form-label fw-bold">Titre de la prestation (obligatoire)</label>
<input type="text" id="categoryName" class="form-control">
</div>
<div class="mb-3">
<label class="form-label fw-bold">Type de prestation</label>
<select id="prestationType" class="form-select">
<option value="chien" selected>Chien</option>
<option value="chat">Chat</option>
</select>
</div>
<div class="mb-3">
<label class="form-label fw-bold">Description de la prestation</label>
<textarea id="prestationDescription" class="form-control" rows="5">
</textarea>
</div>
<div class="mb-3">
<label class="form-label fw-bold">Tarif (fourchette)</label>
<div class="d-flex gap-3">
<input type="number" id="priceMin" class="form-control" placeholder="Prix min (€)" value="35">
<input type="number" id="priceMax" class="form-control" placeholder="Prix max (€)" value="60">
</div>
</div>
<div class="d-flex gap-3 mt-4">
<a href="../liste_prestation/liste_prestation.html" class="btn btn-secondary w-50">Annuler</a>
<button type="submit" class="btn btn-primary w-50">Ajouter</button>
</div>
</form>
</div>
<script src="ajouter_prestation.js"></script>
<script src="/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
<script src="../js/ajouter_prestation.js"></script>
<script src="../..

View File

@@ -6,13 +6,78 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gérer les prestations</title>
<link href="../../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../node_modules/bs-icon/icons.css">
<link rel="stylesheet" href="node_modules/bs-icon/icons.css">
<link rel="shortcut icon" href="favicon.png" type="image/png">
<link rel="stylesheet" href="../../css/style.css">
</head>
<body>
<div id="header-placeholder"></div>
<header>
<nav class="navbar navbar-expand-xxl bg-body-tertiary">
<div class="container-fluid align-items-center">
<a class="navbar-brand" href="#">L'Il'eau chiens - Admin</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active left-label" aria-current="page" href="#">Blog</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Boutique</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Prestations</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Fiche renseignements</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Partenaires</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Citations</a>
</li>
</ul>
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-megaphone me-1"></i> Message d'actu</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-box-arrow-up-right me-1"></i> Voir le site</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-gear me-1"></i> Configuration</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="userMenu" role="button"
data-bs-toggle="dropdown" aria-expanded="false">
<i class="bi bi-person-circle me-1"></i> <span id="userFirstName">Prénom</span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userMenu">
<li><a class="dropdown-item" href="#">Profil</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li><a class="dropdown-item" href="#">Sortir</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main class="my-5 fs-6">
<div class="container">
@@ -39,7 +104,7 @@
<section class="presta my-3">
<h3 class="fs-4">Prestations</h3>
<div class="mb-4 mt-2">
<a href="../html/ajouter_avant_apres.html" class="btn btn-primary btn-sm">
<a href="../html/ajouter_prestation.html" class="btn btn-primary btn-sm">
Ajouter une prestation
</a>
</div>
@@ -58,7 +123,8 @@
<td>Toilettage complet</td>
<td class="text-end">
<a href="#" class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<a href="../html/modifier_prestation.html"
class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<button
class="btn btn-sm btn-outline-danger delete-btn">Supprimer</button>
@@ -69,7 +135,8 @@
<td>Toilettage express</td>
<td class="text-end">
<a href="#" class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<a href="../html/modifier_prestation.html"
class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<button
class="btn btn-sm btn-outline-danger delete-btn">Supprimer</button>
@@ -78,12 +145,12 @@
</tbody>
</table>
</section>
<section class="carte my-3">
<h3 class="fs-4 mt-4">Cartes</h3>
<h3 class="fs-4 mt-4">Étapes</h3>
<div class="mb-4 mt-2">
<a href="../html/ajouter_avant_apres.html" class="btn btn-primary btn-sm">
Ajouter une carte
<a href="#" class="btn btn-primary btn-sm">
Ajouter une étape
</a>
</div>
@@ -115,6 +182,17 @@
</td>
</tr>
<tr>
<td>Séchage doux</td>
<td class="text-end">
<a href="#" class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<button
class="btn btn-sm btn-outline-danger delete-btn">Supprimer</button>
</tr>
</tbody>
</table>
</section>
@@ -135,7 +213,7 @@
<div class="accordion-body">
<div class="mb-4 mt-2">
<a href="../html/ajouter_avant_apres.html" class="btn btn-primary btn-sm">
<a href="../html/ajouter_slider.html" class="btn btn-primary btn-sm">
Ajouter un slider
</a>
</div>
@@ -149,10 +227,11 @@
</thead>
<tbody>
<tr>
<td><img src="slide1.webp" alt="Chien toiletté" class="img-thumbnail"></td>
<td>Chien toiletté</td>
<td class="text-end">
<a href="#" class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<a href="../html/modifier_slider.html"
class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<button
class="btn btn-sm btn-outline-danger delete-btn">Supprimer</button>
@@ -164,7 +243,8 @@
<td class="text-end">
<a href="#" class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<a href="../html/modifier_slider.html"
class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<button
class="btn btn-sm btn-outline-danger delete-btn">Supprimer</button>
@@ -175,7 +255,8 @@
<td>Nouveauté</td>
<td class="text-end">
<a href="#" class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<a href="../html/modifier_slider.html"
class="btn btn-sm btn-outline-primary me-1">Modifier</a>
<button
class="btn btn-sm btn-outline-danger delete-btn">Supprimer</button>
@@ -250,8 +331,6 @@
</main>
<script src="../../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="../components/js/header-composant.js"></script>
<script src="../components/js/delete-composant.js"></script>
</body>
</html>

View File

@@ -52,6 +52,7 @@ form.addEventListener("submit", function (e) {
// Redirection
setTimeout(() => {
window.location.href = "../liste_prestation/liste_prestation.html";
}, 1500);
window.location.href = "../html/prestation_accueil.html";
}, 1500);
});

62
template-header.html Normal file
View File

@@ -0,0 +1,62 @@
<header>
<nav class="navbar navbar-expand-xxl bg-body-tertiary">
<div class="container-fluid align-items-center">
<a class="navbar-brand" href="#">L'Il'eau chiens - Admin</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active left-label" aria-current="page" href="#">Blog</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Boutique</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Prestations</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">FAQ</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Fiche renseignements</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Partenaires</a>
</li>
<li class="nav-item">
<a class="nav-link left-label" href="#">Citations</a>
</li>
</ul>
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-megaphone me-1"></i> Message d'actu</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-box-arrow-up-right me-1"></i> Voir le site</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#"><i class="bi bi-gear me-1"></i> Configuration</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="userMenu" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<i class="bi bi-person-circle me-1"></i> <span id="userFirstName">Prénom</span>
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userMenu">
<li><a class="dropdown-item" href="#">Profil</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Sortir</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
</header>