Merge branch 'master' of https://codefirst.iut.uca.fr/git/WhatTheFantasy/WF-WebAdmin
commit
0e564f580b
@ -0,0 +1,14 @@
|
|||||||
|
@page "/graph"
|
||||||
|
@using Syncfusion.Blazor.Charts
|
||||||
|
|
||||||
|
|
||||||
|
<script src=https://cdn.syncfusion.com/blazor/22.1.38/syncfusion-blazor.min.js type="text/javascript"></script>
|
||||||
|
|
||||||
|
<SfChart>
|
||||||
|
<ChartPrimaryXAxis ValueType="Syncfusion.Blazor.Charts.ValueType.Category"></ChartPrimaryXAxis>
|
||||||
|
<ChartSeriesCollection>
|
||||||
|
<ChartSeries DataSource="@Sales" Opacity="1" Fill="blue" XName="Month" YName="SalesValue" Type="ChartSeriesType.Column" ColumnSpacing="0.2" ColumnWidth="0.8">
|
||||||
|
</ChartSeries>
|
||||||
|
</ChartSeriesCollection>
|
||||||
|
</SfChart>
|
||||||
|
|
@ -1,42 +1,42 @@
|
|||||||
@page
|
@page
|
||||||
@model WF_WebAdmin.Pages.ErrorModel
|
@model WF_WebAdmin.Pages.ErrorModel
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
<title>Error</title>
|
<title>error</title>
|
||||||
<link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
|
<link href="~/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
|
||||||
<link href="~/css/site.css" rel="stylesheet" asp-append-version="true" />
|
<link href="~/css/site.css" rel="stylesheet" asp-append-version="true" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="main">
|
<div class="main">
|
||||||
<div class="content px-4">
|
<div class="content px-4">
|
||||||
<h1 class="text-danger">Error.</h1>
|
<h1 class="text-danger">Error.</h1>
|
||||||
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||||
|
|
||||||
@if (Model.ShowRequestId)
|
@if (Model.ShowRequestId)
|
||||||
{
|
{
|
||||||
<p>
|
<p>
|
||||||
<strong>Request ID:</strong> <code>@Model.RequestId</code>
|
<strong>Request ID:</strong> <code>@Model.RequestId</code>
|
||||||
</p>
|
</p>
|
||||||
}
|
}
|
||||||
|
|
||||||
<h3>Development Mode</h3>
|
<h3>Development Mode</h3>
|
||||||
<p>
|
<p>
|
||||||
Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
|
Swapping to the <strong>development</strong> environment displays detailed information about the error that occurred.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||||
It can result in displaying sensitive information from exceptions to end users.
|
It can result in displaying sensitive information from exceptions to end users.
|
||||||
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
For local debugging, enable the <strong>development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||||
and restarting the app.
|
and restarting the app.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,162 +1,162 @@
|
|||||||
using Blazorise.DataGrid;
|
using Blazorise.DataGrid;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using WF_WebAdmin.Model;
|
using WF_WebAdmin.Model;
|
||||||
using WF_WebAdmin.Service;
|
using WF_WebAdmin.Service;
|
||||||
|
|
||||||
namespace WF_WebAdmin.Pages
|
namespace WF_WebAdmin.Pages
|
||||||
{
|
{
|
||||||
public partial class ModifQuiz
|
public partial class ModifQuiz
|
||||||
{
|
{
|
||||||
private Quiz[] quiz;
|
private Quiz[] quiz;
|
||||||
|
|
||||||
private int MaxValue = 5;
|
private int MaxValue = 5;
|
||||||
|
|
||||||
private int totalItem;
|
private int totalItem;
|
||||||
|
|
||||||
private bool showEditQuiz = false;
|
private bool showEditQuiz = false;
|
||||||
|
|
||||||
private Quiz? selectedQuiz;
|
private Quiz? selectedQuiz;
|
||||||
|
|
||||||
private bool showPopupDelete = false;
|
private bool showPopupDelete = false;
|
||||||
|
|
||||||
private int page = 1;
|
private int page = 1;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
public ILogger<ModifQuiz> Logger { get; set; }
|
public ILogger<ModifQuiz> Logger { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
public IStringLocalizer<ModifQuiz> Localizer { get; set; }
|
public IStringLocalizer<ModifQuiz> Localizer { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
public IQuizService QuizService { get; set; }
|
public IQuizService QuizService { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the data reading event for a data grid, fetching quiz data based on the specified page and page size.
|
/// Handles the data reading event for a data grid, fetching quiz data based on the specified page and page size.
|
||||||
/// This method makes an asynchronous call to retrieve a specific page of quizzes and updates the `quiz` list and pagination details.
|
/// This method makes an asynchronous call to retrieve a specific page of quizzes and updates the `quiz` list and pagination details.
|
||||||
/// If the cancellation token is requested, it exits early without making further calls or updates.
|
/// If the cancellation token is requested, it exits early without making further calls or updates.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="e">The event arguments containing pagination details such as page size and page number.</param>
|
/// <param name="e">The event arguments containing pagination details such as page size and page number.</param>
|
||||||
private async Task OnReadData(DataGridReadDataEventArgs<Quiz> e)
|
private async Task OnReadData(DataGridReadDataEventArgs<Quiz> e)
|
||||||
{
|
{
|
||||||
// Check if the cancellation token has been requested
|
// Check if the cancellation token has been requested
|
||||||
if (e.CancellationToken.IsCancellationRequested)
|
if (e.CancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch the quiz data for the specified page and page size
|
// Fetch the quiz data for the specified page and page size
|
||||||
var response = await QuizService.getSommeQuiz(e.PageSize, e.Page);
|
var response = await QuizService.getSommeQuiz(e.PageSize, e.Page);
|
||||||
|
|
||||||
// If cancellation hasn't been requested, process the data
|
// If cancellation hasn't been requested, process the data
|
||||||
if (!e.CancellationToken.IsCancellationRequested)
|
if (!e.CancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
// Get the total number of quizzes for pagination purposes
|
// Get the total number of quizzes for pagination purposes
|
||||||
totalItem = await QuizService.getNbQuiz();
|
totalItem = await QuizService.getNbQuiz();
|
||||||
|
|
||||||
// Update the quiz data for the current page
|
// Update the quiz data for the current page
|
||||||
quiz = response.ToArray();
|
quiz = response.ToArray();
|
||||||
|
|
||||||
// Update the current page number
|
// Update the current page number
|
||||||
page = e.Page;
|
page = e.Page;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the event when the "Edit" button is clicked for a quiz.
|
/// Handles the event when the "Edit" button is clicked for a quiz.
|
||||||
/// This method checks if a valid quiz is passed. If so, it sets the `selectedQuiz` to the clicked quiz and shows the quiz edit modal.
|
/// This method checks if a valid quiz is passed. If so, it sets the `selectedQuiz` to the clicked quiz and shows the quiz edit modal.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="quiz">The quiz object that was clicked for editing.</param>
|
/// <param name="quiz">The quiz object that was clicked for editing.</param>
|
||||||
private void OnEditButtonClicked(Quiz quiz)
|
private void OnEditButtonClicked(Quiz quiz)
|
||||||
{
|
{
|
||||||
// If the quiz is null, return early
|
// If the quiz is null, return early
|
||||||
if (quiz == null) return;
|
if (quiz == null) return;
|
||||||
|
|
||||||
// Set the selected quiz to the one clicked by the user
|
// Set the selected quiz to the one clicked by the user
|
||||||
selectedQuiz = quiz;
|
selectedQuiz = quiz;
|
||||||
|
|
||||||
// Show the modal or UI for editing the quiz
|
// Show the modal or UI for editing the quiz
|
||||||
showEditQuiz = true;
|
showEditQuiz = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Closes the open popups and resets any related states.
|
/// Closes the open popups and resets any related states.
|
||||||
/// This method hides the quiz edit popup, the delete confirmation popup, and resets the selected quiz to `null`.
|
/// This method hides the quiz edit popup, the delete confirmation popup, and resets the selected quiz to `null`.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void ClosePopup()
|
private void ClosePopup()
|
||||||
{
|
{
|
||||||
// Hide the edit quiz popup
|
// Hide the edit quiz popup
|
||||||
showEditQuiz = false;
|
showEditQuiz = false;
|
||||||
|
|
||||||
// Hide the delete confirmation popup
|
// Hide the delete confirmation popup
|
||||||
showPopupDelete = false;
|
showPopupDelete = false;
|
||||||
|
|
||||||
// Reset the selected quiz to null
|
// Reset the selected quiz to null
|
||||||
selectedQuiz = null;
|
selectedQuiz = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Edits the selected quiz by updating it in the quiz service.
|
/// Edits the selected quiz by updating it in the quiz service.
|
||||||
/// This method asynchronously sends the updated quiz data to the service for persistence.
|
/// This method asynchronously sends the updated quiz data to the service for persistence.
|
||||||
/// After updating the quiz, it clears the selected quiz and closes any open popups.
|
/// After updating the quiz, it clears the selected quiz and closes any open popups.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private async Task EditQuiz()
|
private async Task EditQuiz()
|
||||||
{
|
{
|
||||||
// Update the quiz in the service
|
// Update the quiz in the service
|
||||||
LoggerSaveStub.Log(Logger, LogLevel.Information, $"Editing the question {selectedQuiz.Question}");
|
LoggerSaveStub.Log(Logger, LogLevel.Information, $"Editing the question {selectedQuiz.Question}");
|
||||||
await QuizService.updateQuiz(selectedQuiz);
|
await QuizService.updateQuiz(selectedQuiz);
|
||||||
|
|
||||||
// Clear the selected quiz after successful update
|
// Clear the selected quiz after successful update
|
||||||
selectedQuiz = null;
|
selectedQuiz = null;
|
||||||
|
|
||||||
// Close the popups after the edit operation
|
// Close the popups after the edit operation
|
||||||
ClosePopup();
|
ClosePopup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the event when the delete action is triggered for a quiz.
|
/// Handles the event when the delete action is triggered for a quiz.
|
||||||
/// This method sets the selected quiz to the one passed as a parameter and shows the delete confirmation popup.
|
/// This method sets the selected quiz to the one passed as a parameter and shows the delete confirmation popup.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="q">The quiz to be deleted.</param>
|
/// <param name="q">The quiz to be deleted.</param>
|
||||||
private void OnDelete(Quiz q)
|
private void OnDelete(Quiz q)
|
||||||
{
|
{
|
||||||
// Set the selected quiz to the one passed in
|
// Set the selected quiz to the one passed in
|
||||||
selectedQuiz = q;
|
selectedQuiz = q;
|
||||||
|
|
||||||
// Show the delete confirmation popup
|
// Show the delete confirmation popup
|
||||||
showPopupDelete = true;
|
showPopupDelete = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Removes the selected quiz from the quiz service and updates the quiz list.
|
/// Removes the selected quiz from the quiz service and updates the quiz list.
|
||||||
/// This method first checks if a quiz is selected, and if so, it deletes the quiz by calling the service.
|
/// This method first checks if a quiz is selected, and if so, it deletes the quiz by calling the service.
|
||||||
/// After removal, it clears the `selectedQuiz`, updates the quiz list, and closes the delete confirmation popup.
|
/// After removal, it clears the `selectedQuiz`, updates the quiz list, and closes the delete confirmation popup.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private async void RemoveQuote()
|
private async Task RemoveQuote()
|
||||||
{
|
{
|
||||||
// Check if a quiz is selected for deletion
|
// Check if a quiz is selected for deletion
|
||||||
if (selectedQuiz != null)
|
if (selectedQuiz != null)
|
||||||
{
|
{
|
||||||
// Remove the selected quiz from the service by its ID
|
// Remove the selected quiz from the service by its ID
|
||||||
LoggerSaveStub.Log(Logger, LogLevel.Information, $"Delete the question {selectedQuiz.Question}");
|
LoggerSaveStub.Log(Logger, LogLevel.Information, $"Delete the question {selectedQuiz.Question}");
|
||||||
await QuizService.removeQuiz(selectedQuiz.Id);
|
await QuizService.removeQuiz(selectedQuiz.Id);
|
||||||
|
|
||||||
// Clear the selected quiz after successful removal
|
// Clear the selected quiz after successful removal
|
||||||
selectedQuiz = null;
|
selectedQuiz = null;
|
||||||
|
|
||||||
// Update the quiz list by fetching the latest data
|
// Update the quiz list by fetching the latest data
|
||||||
var response = await QuizService.getSommeQuiz(MaxValue, page);
|
var response = await QuizService.getSommeQuiz(MaxValue, page);
|
||||||
quiz = response.ToArray();
|
quiz = response.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the delete confirmation popup
|
// Close the delete confirmation popup
|
||||||
showPopupDelete = false;
|
showPopupDelete = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,135 +1,135 @@
|
|||||||
using Blazorise.DataGrid;
|
using Blazorise.DataGrid;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System.Security.Claims;
|
using System.Security.Claims;
|
||||||
using WF_WebAdmin.Model;
|
using WF_WebAdmin.Model;
|
||||||
using WF_WebAdmin.Service;
|
using WF_WebAdmin.Service;
|
||||||
|
|
||||||
namespace WF_WebAdmin.Pages
|
namespace WF_WebAdmin.Pages
|
||||||
{
|
{
|
||||||
public partial class ModifQuote
|
public partial class ModifQuote
|
||||||
{
|
{
|
||||||
private Quote[] quotes;
|
private Quote[] quotes;
|
||||||
|
|
||||||
private int MaxValue = 5;
|
private int MaxValue = 5;
|
||||||
|
|
||||||
private int totalItem;
|
private int totalItem;
|
||||||
|
|
||||||
/*private bool showEditQuote = false;*/
|
/*private bool showEditQuote = false;*/
|
||||||
|
|
||||||
private Quote? selectedQuote;
|
private Quote? selectedQuote;
|
||||||
|
|
||||||
private bool showPopupDelete = false;
|
private bool showPopupDelete = false;
|
||||||
|
|
||||||
private int page = 1;
|
private int page = 1;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
public ILogger<ModifQuote> Logger { get; set; }
|
public ILogger<ModifQuote> Logger { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
public IStringLocalizer<ModifQuote> Localizer { get; set; }
|
public IStringLocalizer<ModifQuote> Localizer { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
public IQuoteService QuoteService { get; set; }
|
public IQuoteService QuoteService { get; set; }
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the data reading event for a data grid, fetching quote data based on the specified page and page size.
|
/// Handles the data reading event for a data grid, fetching quote data based on the specified page and page size.
|
||||||
/// This method makes an asynchronous call to retrieve a specific page of quotes and updates the `quotes` list and pagination details.
|
/// This method makes an asynchronous call to retrieve a specific page of quotes and updates the `quotes` list and pagination details.
|
||||||
/// If the cancellation token is requested, it exits early without making further calls or updates.
|
/// If the cancellation token is requested, it exits early without making further calls or updates.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="e">The event arguments containing pagination details such as page size and page number.</param>
|
/// <param name="e">The event arguments containing pagination details such as page size and page number.</param>
|
||||||
private async Task OnReadData(DataGridReadDataEventArgs<Quote> e)
|
private async Task OnReadData(DataGridReadDataEventArgs<Quote> e)
|
||||||
{
|
{
|
||||||
// Check if the cancellation token has been requested
|
// Check if the cancellation token has been requested
|
||||||
if (e.CancellationToken.IsCancellationRequested)
|
if (e.CancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch the quote data for the specified page and page size
|
// Fetch the quote data for the specified page and page size
|
||||||
var response = await QuoteService.getSomeQuote(e.PageSize, e.Page);
|
var response = await QuoteService.getSomeQuote(e.PageSize, e.Page);
|
||||||
|
|
||||||
// If cancellation hasn't been requested, process the data
|
// If cancellation hasn't been requested, process the data
|
||||||
if (!e.CancellationToken.IsCancellationRequested)
|
if (!e.CancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
// Get the total number of quotes for pagination purposes
|
// Get the total number of quotes for pagination purposes
|
||||||
totalItem = await QuoteService.getNbQuote();
|
totalItem = await QuoteService.getNbQuote();
|
||||||
|
|
||||||
// Update the quotes data for the current page
|
// Update the quotes data for the current page
|
||||||
quotes = response.ToArray();
|
quotes = response.ToArray();
|
||||||
|
|
||||||
// Update the current page number
|
// Update the current page number
|
||||||
page = e.Page;
|
page = e.Page;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*private void OnEditButtonClicked(Quote quote)
|
/*private void OnEditButtonClicked(Quote quote)
|
||||||
{
|
{
|
||||||
if (selectedQuote == null) return;
|
if (selectedQuote == null) return;
|
||||||
selectedQuote = quote;
|
selectedQuote = quote;
|
||||||
showEditQuote = true;
|
showEditQuote = true;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Closes the open popups and resets any related states.
|
/// Closes the open popups and resets any related states.
|
||||||
/// This method hides the delete confirmation popup and clears the selected quote.
|
/// This method hides the delete confirmation popup and clears the selected quote.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void ClosePopup()
|
private void ClosePopup()
|
||||||
{
|
{
|
||||||
// Hide the delete confirmation popup
|
// Hide the delete confirmation popup
|
||||||
showPopupDelete = false;
|
showPopupDelete = false;
|
||||||
|
|
||||||
// Reset the selected quote to null
|
// Reset the selected quote to null
|
||||||
selectedQuote = null;
|
selectedQuote = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*private async Task EditQuote()
|
/*private async Task EditQuote()
|
||||||
{
|
{
|
||||||
await QuoteService.updateQuote(selectedQuote);
|
await QuoteService.updateQuote(selectedQuote);
|
||||||
selectedQuote = null;
|
selectedQuote = null;
|
||||||
ClosePopup();
|
ClosePopup();
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles the event when the delete action is triggered for a quote.
|
/// Handles the event when the delete action is triggered for a quote.
|
||||||
/// This method sets the selected quote to the one passed as a parameter and displays the delete confirmation popup.
|
/// This method sets the selected quote to the one passed as a parameter and displays the delete confirmation popup.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="q">The quote that is being deleted.</param>
|
/// <param name="q">The quote that is being deleted.</param>
|
||||||
private void OnDelete(Quote q)
|
private void OnDelete(Quote q)
|
||||||
{
|
{
|
||||||
// Set the selected quote to the one passed in
|
// Set the selected quote to the one passed in
|
||||||
selectedQuote = q;
|
selectedQuote = q;
|
||||||
|
|
||||||
// Display the delete confirmation popup
|
// Display the delete confirmation popup
|
||||||
showPopupDelete = true;
|
showPopupDelete = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Removes the selected quote by calling the remove service and updates the quote list.
|
/// Removes the selected quote by calling the remove service and updates the quote list.
|
||||||
/// This method checks if a quote is selected. If so, it removes the quote using the `QuoteService`, clears the selected quote,
|
/// This method checks if a quote is selected. If so, it removes the quote using the `QuoteService`, clears the selected quote,
|
||||||
/// and fetches the updated list of quotes. It also closes the delete confirmation popup after the operation.
|
/// and fetches the updated list of quotes. It also closes the delete confirmation popup after the operation.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private async void RemoveQuote()
|
private async Task RemoveQuote()
|
||||||
{
|
{
|
||||||
// Check if a quote is selected for removal
|
// Check if a quote is selected for removal
|
||||||
if (selectedQuote != null)
|
if (selectedQuote != null)
|
||||||
{
|
{
|
||||||
// Remove the selected quote using the QuoteService
|
// Remove the selected quote using the QuoteService
|
||||||
LoggerSaveStub.Log(Logger, LogLevel.Information, $"The quote {selectedQuote.Content} has been deleted");
|
LoggerSaveStub.Log(Logger, LogLevel.Information, $"The quote {selectedQuote.Content} has been deleted");
|
||||||
await QuoteService.removeQuote(selectedQuote);
|
await QuoteService.removeQuote(selectedQuote);
|
||||||
|
|
||||||
// Clear the selected quote after removal
|
// Clear the selected quote after removal
|
||||||
selectedQuote = null;
|
selectedQuote = null;
|
||||||
|
|
||||||
// Update the quotes list by fetching the latest quotes data
|
// Update the quotes list by fetching the latest quotes data
|
||||||
var response = await QuoteService.getSomeQuote(MaxValue, page);
|
var response = await QuoteService.getSomeQuote(MaxValue, page);
|
||||||
quotes = response.ToArray();
|
quotes = response.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the delete confirmation popup
|
// Close the delete confirmation popup
|
||||||
showPopupDelete = false;
|
showPopupDelete = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,40 @@
|
|||||||
@using Microsoft.AspNetCore.Components.Web
|
@using Microsoft.AspNetCore.Components.Web
|
||||||
@namespace WF_WebAdmin.Pages
|
@namespace WF_WebAdmin.Pages
|
||||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<title>layout</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta charset="utf-8" />
|
||||||
<base href="~/" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
|
<base href="~/" />
|
||||||
<link href="css/site.css" rel="stylesheet" />
|
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
|
||||||
<link href="WF-WebAdmin.styles.css" rel="stylesheet" />
|
<link href="css/site.css" rel="stylesheet" />
|
||||||
<component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
|
<link href="WF-WebAdmin.styles.css" rel="stylesheet" />
|
||||||
<link rel="icon" type="image/svg" href="../Shared/iconwf.svg" />
|
<component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
|
||||||
</head>
|
<link rel="icon" type="image/svg" href="../Shared/iconwf.svg" />
|
||||||
<body>
|
</head>
|
||||||
@RenderBody()
|
<body>
|
||||||
|
@RenderBody()
|
||||||
<div id="blazor-error-ui">
|
|
||||||
<environment include="Staging,Production">
|
<div id="blazor-error-ui">
|
||||||
An error has occurred. This application may no longer respond until reloaded.
|
<environment include="Staging,Production">
|
||||||
</environment>
|
An error has occurred. This application may no longer respond until reloaded.
|
||||||
<environment include="Development">
|
</environment>
|
||||||
An unhandled exception has occurred. See browser dev tools for details.
|
<environment include="Development">
|
||||||
</environment>
|
An unhandled exception has occurred. See browser dev tools for details.
|
||||||
<a href="" class="reload">Reload</a>
|
</environment>
|
||||||
<a class="dismiss">🗙</a>
|
<a href="" class="reload">reload</a>
|
||||||
</div>
|
<a class="dismiss">🗙</a>
|
||||||
|
</div>
|
||||||
<script src="_framework/blazor.server.js"></script>
|
|
||||||
|
<script src="_framework/blazor.server.js"></script>
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">
|
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">
|
||||||
<link href="_content/Blazorise/blazorise.css" rel="stylesheet" />
|
|
||||||
<link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" />
|
<link href="_content/Blazorise/blazorise.css" rel="stylesheet" />
|
||||||
|
<link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" />
|
||||||
</body>
|
|
||||||
</html>
|
</body>
|
||||||
|
</html>
|
||||||
|
@ -1,262 +1,268 @@
|
|||||||
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
|
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap');
|
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap');
|
||||||
|
|
||||||
html, body {
|
html, body {
|
||||||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
background: white;
|
background: white;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1:focus {
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
h1 {
|
||||||
a, .btn-link {
|
text-align: center;
|
||||||
color: #ffffff;
|
font-size: 32px;
|
||||||
text-decoration: none;
|
margin-top: 10%;
|
||||||
}
|
font-family: "Roboto", serif;
|
||||||
|
}
|
||||||
.btn-primary {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #1b6ec2;
|
h1:focus {
|
||||||
border-color: #1861ac;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
a, .btn-link {
|
||||||
padding-top: 1.1rem;
|
color: #ffffff;
|
||||||
}
|
text-decoration: none;
|
||||||
|
}
|
||||||
.valid.modified:not([type=checkbox]) {
|
|
||||||
outline: 1px solid #26b050;
|
.btn-primary {
|
||||||
}
|
color: #fff;
|
||||||
|
background-color: #1b6ec2;
|
||||||
.invalid {
|
border-color: #1861ac;
|
||||||
outline: 1px solid red;
|
}
|
||||||
}
|
|
||||||
|
.content {
|
||||||
.validation-message {
|
padding-top: 1.1rem;
|
||||||
color: red;
|
}
|
||||||
}
|
|
||||||
|
.valid.modified:not([type=checkbox]) {
|
||||||
#blazor-error-ui {
|
outline: 1px solid #26b050;
|
||||||
background: lightyellow;
|
}
|
||||||
bottom: 0;
|
|
||||||
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
|
.invalid {
|
||||||
display: none;
|
outline: 1px solid red;
|
||||||
left: 0;
|
}
|
||||||
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
|
|
||||||
position: fixed;
|
.validation-message {
|
||||||
width: 100%;
|
color: red;
|
||||||
z-index: 1000;
|
}
|
||||||
}
|
|
||||||
|
#blazor-error-ui {
|
||||||
#blazor-error-ui .dismiss {
|
background: lightyellow;
|
||||||
cursor: pointer;
|
bottom: 0;
|
||||||
position: absolute;
|
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
|
||||||
right: 0.75rem;
|
display: none;
|
||||||
top: 0.5rem;
|
left: 0;
|
||||||
}
|
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
|
||||||
|
position: fixed;
|
||||||
.blazor-error-boundary {
|
width: 100%;
|
||||||
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
|
z-index: 1000;
|
||||||
padding: 1rem 1rem 1rem 3.7rem;
|
}
|
||||||
color: white;
|
|
||||||
}
|
#blazor-error-ui .dismiss {
|
||||||
|
cursor: pointer;
|
||||||
.blazor-error-boundary::after {
|
position: absolute;
|
||||||
content: "An error has occurred."
|
right: 0.75rem;
|
||||||
}
|
top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
button {
|
.blazor-error-boundary {
|
||||||
border: none;
|
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
|
||||||
border-radius: 25px;
|
padding: 1rem 1rem 1rem 3.7rem;
|
||||||
background-color: lightgrey;
|
color: white;
|
||||||
padding: 1vh;
|
}
|
||||||
}
|
|
||||||
|
.blazor-error-boundary::after {
|
||||||
/*Page DeleteUser*/
|
content: "An error has occurred."
|
||||||
.userDiv, .QuoteDiv {
|
}
|
||||||
margin-right: 20px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
border-radius: 25px;
|
button {
|
||||||
background-color: #C3C4C5;
|
border: none;
|
||||||
}
|
border-radius: 25px;
|
||||||
|
background-color: lightgrey;
|
||||||
.imgProfil {
|
padding: 1vh;
|
||||||
border-radius: 25px;
|
}
|
||||||
width: 150px; /* Taille standard */
|
|
||||||
height: 150px; /* Taille standard */
|
/*Page DeleteUser*/
|
||||||
object-fit: cover;
|
.userDiv, .QuoteDiv {
|
||||||
}
|
margin-right: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
.imgQuote {
|
border-radius: 25px;
|
||||||
border-radius: 20px;
|
background-color: #C3C4C5;
|
||||||
width: 300px; /* Taille standard */
|
}
|
||||||
height: 300px; /* Taille standard */
|
|
||||||
object-fit: cover;
|
.imgProfil {
|
||||||
}
|
border-radius: 25px;
|
||||||
|
width: 150px; /* Taille standard */
|
||||||
.pseudo, .mail, .idUser, .dateCrea, .idQuote, .contentQuote, .CaracterQuote, .SourceQuote, .langueQuote, .UserPropositionQuote {
|
height: 150px; /* Taille standard */
|
||||||
margin-left: 10px;
|
object-fit: cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*ModifQuote*/
|
.imgQuote {
|
||||||
|
border-radius: 20px;
|
||||||
.imgTab{
|
width: 300px; /* Taille standard */
|
||||||
width: 5vw;
|
height: 300px; /* Taille standard */
|
||||||
height: 5vw;
|
object-fit: cover;
|
||||||
object-fit: contain;
|
}
|
||||||
}
|
|
||||||
|
.pseudo, .mail, .idUser, .dateCrea, .idQuote, .contentQuote, .CaracterQuote, .SourceQuote, .langueQuote, .UserPropositionQuote {
|
||||||
/*Popup DeleteUser*/
|
margin-left: 10px;
|
||||||
.divPopup {
|
}
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
/*ModifQuote*/
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
.imgTab{
|
||||||
height: 100%;
|
width: 5vw;
|
||||||
border-radius:20px;
|
height: 5vw;
|
||||||
display: flex;
|
object-fit: contain;
|
||||||
justify-content: center;
|
}
|
||||||
align-items: center;
|
|
||||||
z-index: 2;
|
/*Popup DeleteUser*/
|
||||||
}
|
.divPopup {
|
||||||
|
position: fixed;
|
||||||
.contentPopup {
|
top: 0;
|
||||||
padding: 20px;
|
left: 0;
|
||||||
border-radius: 20px;
|
width: 100%;
|
||||||
border: 3px solid black;
|
height: 100%;
|
||||||
display: flex;
|
border-radius:20px;
|
||||||
background-color: white;
|
display: flex;
|
||||||
flex-direction: column;
|
justify-content: center;
|
||||||
gap: 10px;
|
align-items: center;
|
||||||
width: 300px;
|
z-index: 2;
|
||||||
text-align: center;
|
}
|
||||||
}
|
|
||||||
|
.contentPopup {
|
||||||
table {
|
padding: 20px;
|
||||||
border-collapse: collapse;
|
border-radius: 20px;
|
||||||
width: 100%;
|
border: 3px solid black;
|
||||||
}
|
display: flex;
|
||||||
|
background-color: white;
|
||||||
td {
|
flex-direction: column;
|
||||||
padding: 10px 20px;
|
gap: 10px;
|
||||||
border: none;
|
width: 300px;
|
||||||
}
|
text-align: center;
|
||||||
|
}
|
||||||
.boutons {
|
|
||||||
display: flex;
|
table {
|
||||||
justify-content: space-between;
|
border-collapse: collapse;
|
||||||
gap: 10px;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.boutons button {
|
td {
|
||||||
border: none;
|
padding: 10px 20px;
|
||||||
background-color: transparent;
|
border: none;
|
||||||
padding: 5px;
|
}
|
||||||
cursor: pointer;
|
|
||||||
}
|
.boutons {
|
||||||
|
display: flex;
|
||||||
.boutons button img {
|
justify-content: space-between;
|
||||||
width: 24px;
|
gap: 10px;
|
||||||
height: 24px;
|
}
|
||||||
object-fit: contain;
|
|
||||||
}
|
.boutons button {
|
||||||
|
border: none;
|
||||||
|
background-color: transparent;
|
||||||
.buttonSubmitDiv {
|
padding: 5px;
|
||||||
text-align: center;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
.boutons button img {
|
||||||
text-align: center;
|
width: 24px;
|
||||||
font-size: 32px;
|
height: 24px;
|
||||||
margin-top: 10%;
|
object-fit: contain;
|
||||||
font-family: "Roboto", serif;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
.buttonSubmitDiv {
|
||||||
margin-bottom: 2%;
|
text-align: center;
|
||||||
font-size: 20px;
|
}
|
||||||
font-family: "Roboto", serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login {
|
p {
|
||||||
width: 35vw;
|
margin-bottom: 2%;
|
||||||
margin-left: 30.5vw;
|
font-size: 20px;
|
||||||
margin-top: 3vh;
|
font-family: "Roboto", serif;
|
||||||
border-radius: 25px;
|
}
|
||||||
padding: 2vw;
|
|
||||||
background-color: #cfcfcf;
|
.login {
|
||||||
}
|
width: 35vw;
|
||||||
|
margin-left: 30.5vw;
|
||||||
|
margin-top: 3vh;
|
||||||
/*Page login*/
|
border-radius: 25px;
|
||||||
.buttonSudmite {
|
padding: 2vw;
|
||||||
border: none;
|
background-color: #cfcfcf;
|
||||||
padding: 2%;
|
}
|
||||||
margin-top: 5%;
|
|
||||||
border-radius: 25px;
|
|
||||||
width: 50%;
|
/*Page login*/
|
||||||
font-size: 1.25em;
|
.buttonSudmite {
|
||||||
background-color: white;
|
border: none;
|
||||||
font-family: "Roboto", serif;
|
padding: 2%;
|
||||||
}
|
margin-top: 5%;
|
||||||
|
border-radius: 25px;
|
||||||
.connexion {
|
width: 50%;
|
||||||
width: 94%;
|
font-size: 1.25em;
|
||||||
height: 40px;
|
background-color: white;
|
||||||
padding-left: 3%;
|
font-family: "Roboto", serif;
|
||||||
margin-left: 1%;
|
}
|
||||||
margin-top: -1%;
|
|
||||||
border-radius: 25px;
|
.connexion {
|
||||||
border: none;
|
width: 94%;
|
||||||
font-size: 15px;
|
height: 40px;
|
||||||
}
|
padding-left: 3%;
|
||||||
|
margin-left: 1%;
|
||||||
|
margin-top: -1%;
|
||||||
|
border-radius: 25px;
|
||||||
.ErrorMsg {
|
border: none;
|
||||||
color: red;
|
font-size: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
width: 100%;
|
.ErrorMsg {
|
||||||
}
|
color: red;
|
||||||
|
}
|
||||||
td {
|
|
||||||
padding: 10px 20px;
|
table {
|
||||||
border: none;
|
border-collapse: collapse;
|
||||||
}
|
width: 100%;
|
||||||
|
}
|
||||||
.boutons {
|
|
||||||
display: flex;
|
td {
|
||||||
justify-content: space-between;
|
padding: 10px 20px;
|
||||||
gap: 10px;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.boutons button {
|
.boutons {
|
||||||
border: none;
|
display: flex;
|
||||||
background-color: transparent;
|
justify-content: space-between;
|
||||||
padding: 5px;
|
gap: 10px;
|
||||||
cursor: pointer;
|
}
|
||||||
}
|
|
||||||
|
.boutons button {
|
||||||
.boutons button img {
|
border: none;
|
||||||
width: 24px;
|
background-color: transparent;
|
||||||
height: 24px;
|
padding: 5px;
|
||||||
object-fit: contain;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.boutons button img {
|
||||||
.imageProfil {
|
width: 24px;
|
||||||
height: auto;
|
height: 24px;
|
||||||
width: 30px;
|
object-fit: contain;
|
||||||
border-radius: 45%;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.buttonProfil{
|
.imageProfil {
|
||||||
background-color:transparent;
|
height: auto;
|
||||||
|
width: 30px;
|
||||||
|
border-radius: 45%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buttonProfil{
|
||||||
|
background-color:transparent;
|
||||||
}
|
}
|
Loading…
Reference in new issue