added basic functionalities (login, create/del/rename pages)
This commit is contained in:
@@ -1,12 +1,8 @@
|
||||
@page "/"
|
||||
|
||||
<PageTitle>Index</PageTitle>
|
||||
<PageTitle>Tagger App</PageTitle>
|
||||
|
||||
<h1>Hello, world!</h1>
|
||||
|
||||
Welcome to your new appss.
|
||||
|
||||
<SurveyPrompt Title="How is Blazor working for you?" />
|
||||
<h1>Tagger App</h1>
|
||||
|
||||
@code{
|
||||
|
||||
|
||||
60
Tagger/Pages/Login.razor
Normal file
60
Tagger/Pages/Login.razor
Normal file
@@ -0,0 +1,60 @@
|
||||
@page "/login"
|
||||
@inject UserManager Users;
|
||||
@inject IHttpContextAccessor httpContextAccessor;
|
||||
@inject NavigationManager NavManager;
|
||||
@inject IHostEnvironmentAuthenticationStateProvider HostAuthentication;
|
||||
@inject AuthenticationStateProvider AuthenticationStateProvider;
|
||||
|
||||
<h3>login</h3>
|
||||
|
||||
@if(LoggedIn)
|
||||
{
|
||||
<Button @onclick=Logout>Déconnexion</Button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<InputText @bind-Value=Username placeholder="Identifiant" />
|
||||
<InputText @bind-Value=Password type="password" placeholder="Mot de passe"/>
|
||||
<Button @onclick=TryLogin>Connexion</Button>
|
||||
}
|
||||
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
public string Username { get; set; } = "";
|
||||
public string Password { get; set; } = "";
|
||||
|
||||
public bool LoggedIn { get; set; } = false;
|
||||
|
||||
protected async override Task OnInitializedAsync()
|
||||
{
|
||||
LoggedIn = await Users.IsLogged();
|
||||
await base.OnInitializedAsync();
|
||||
}
|
||||
|
||||
protected async override Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
//if(firstRender)
|
||||
|
||||
|
||||
await base.OnAfterRenderAsync(firstRender);
|
||||
}
|
||||
|
||||
public async Task TryLogin()
|
||||
{
|
||||
if (await Users.TryLogin(Username, Password))
|
||||
{
|
||||
LoggedIn = await Users.IsLogged();
|
||||
StateHasChanged();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task Logout()
|
||||
{
|
||||
await Users.Logout();
|
||||
LoggedIn = await Users.IsLogged();
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
@page "/page/{*Route}"
|
||||
@inject PageProvider Pages;
|
||||
@inject UserManager Users;
|
||||
@inject NavigationManager NavManager;
|
||||
@inject IJSRuntime JS
|
||||
|
||||
|
||||
@if (CurrentPage is null)
|
||||
{
|
||||
@@ -11,28 +14,29 @@ else
|
||||
@((MarkupString)markdownHtml)
|
||||
|
||||
<hr />
|
||||
|
||||
<div hidden=@(!Editing)>
|
||||
<div hidden=@(!LoggedIn || !Editing)>
|
||||
<MarkdownEditor @bind-Value="@markdownValue" ValueHTMLChanged="@OnMarkdownValueHTMLChanged" />
|
||||
<button @onclick="Save">Sauvegarder</button>
|
||||
<button @onclick="Delete">Supprimer</button>
|
||||
</div>
|
||||
|
||||
<div hidden=@Editing>
|
||||
<div hidden=@(!LoggedIn ||Editing)>
|
||||
<button @onclick="() => {Editing = true;}">Editer</button>
|
||||
<button>Renommer</button>
|
||||
<button @onclick=Rename>Renommer</button>
|
||||
</div>
|
||||
|
||||
}
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public string? Route { get; set; }
|
||||
|
||||
public bool LoggedIn { get; set; }
|
||||
|
||||
string markdownValue = "";
|
||||
string markdownHtml ="";
|
||||
bool Editing = false;
|
||||
|
||||
|
||||
ElementReference Editor;
|
||||
|
||||
public MarkdownPage? CurrentPage { get; set; }
|
||||
@@ -49,6 +53,7 @@ else
|
||||
return;
|
||||
|
||||
markdownValue = CurrentPage.Content;
|
||||
LoggedIn = await Users.IsLogged();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
@@ -67,6 +72,21 @@ else
|
||||
Pages.Save(CurrentPage);
|
||||
}
|
||||
|
||||
async Task Rename()
|
||||
{
|
||||
if (CurrentPage is null)
|
||||
return;
|
||||
|
||||
var val = await JS.InvokeAsync<string>("prompt", new[] { "Veuillez indiquer le nouveau chemin de la page" });
|
||||
if (val is null)
|
||||
return;
|
||||
|
||||
Pages.Delete(CurrentPage.Title);
|
||||
CurrentPage.Title = val;
|
||||
Pages.Save(CurrentPage);
|
||||
NavManager.NavigateTo("/page");
|
||||
}
|
||||
|
||||
void Delete()
|
||||
{
|
||||
if (CurrentPage is null)
|
||||
|
||||
@@ -1,31 +1,63 @@
|
||||
@page "/page"
|
||||
|
||||
@inject PageProvider Pages;
|
||||
@inject UserManager Users;
|
||||
@inject IJSRuntime JS
|
||||
|
||||
@if (Paths is null)
|
||||
@if(!IsLogged)
|
||||
{
|
||||
<p>Identification requise</p>
|
||||
}
|
||||
else if (Paths is null)
|
||||
{
|
||||
<p>Chargement...</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach(var p in Paths)
|
||||
@if(IsLogged)
|
||||
{
|
||||
<a href="/page/@p">@p</a>
|
||||
}
|
||||
<button @onclick=CreatePage >Ajouter une page</button>
|
||||
}
|
||||
|
||||
<button>Ajouter une page</button>
|
||||
<ul>
|
||||
@foreach (var p in Paths)
|
||||
{
|
||||
<li><a href="/page/@p">@p</a></li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
|
||||
|
||||
|
||||
@code {
|
||||
public string[]? Paths { get; set; } = null;
|
||||
|
||||
public bool IsLogged = false;
|
||||
|
||||
protected override void OnInitialized()
|
||||
|
||||
protected override async void OnInitialized()
|
||||
{
|
||||
Paths = Pages.List().ToArray();
|
||||
base.OnInitialized();
|
||||
await Flush();
|
||||
}
|
||||
|
||||
public async Task Flush()
|
||||
{
|
||||
Paths = Pages.List().ToArray();
|
||||
IsLogged = await Users.IsLogged();
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
public async Task CreatePage()
|
||||
{
|
||||
var val = await JS.InvokeAsync<string>("prompt", new[] { "Veuillez indiquer chemin de la page" });
|
||||
if (val is null)
|
||||
return;
|
||||
|
||||
Pages.Save(new MarkdownPage
|
||||
{
|
||||
Title = val,
|
||||
Content = ""
|
||||
});
|
||||
await Flush();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user