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