+
@Localizer[SharedResource.sharpsite_sitenamelabel]
+
+
+
+
+
+
@Localizer[SharedResource.sharpsite_maxupload_label]
@@ -82,11 +89,12 @@
@code {
- private ViewModel Model = new();
+ private ViewModel Model = new() { SiteName = "Sharpsite" };
protected override void OnInitialized()
{
+ Model.SiteName = ApplicationState.SiteName;
Model.MaxSizeMB = ApplicationState.MaximumUploadSizeMB;
Model.DefaultCulture = ApplicationState.Localization?.DefaultCulture ?? "en";
Model.SupportedCultures = ApplicationState.Localization?.SupportedCultures;
@@ -103,6 +111,8 @@
.MaximumReceiveMessageSize = 1024 * 1024 * Model.MaxSizeMB;
ApplicationState.MaximumUploadSizeMB = Model.MaxSizeMB;
+ ApplicationState.SiteName = Model.SiteName;
+
await ApplicationState.Save();
}
@@ -145,6 +155,10 @@
public class ViewModel
{
+
+ [Required, MaxLength(50)]
+ public required string SiteName { get; set; }
+
[Range(1, 100), Required]
public long MaxSizeMB { get; set; }
diff --git a/src/SharpSite.Web/Components/Admin/ConfirmSaveButton.razor b/src/SharpSite.Web/Components/Admin/ConfirmSaveButton.razor
new file mode 100644
index 0000000..f850a2c
--- /dev/null
+++ b/src/SharpSite.Web/Components/Admin/ConfirmSaveButton.razor
@@ -0,0 +1,26 @@
+
+ @if (!ConfirmationRequired)
+ {
+
@SharedResource.sharpsite_save
+ }
+ else
+ {
+
@AlertMessage
+
@SharedResource.sharpsite_confirm
+
@SharedResource.sharpsite_cancel
+ }
+
+
+@code {
+ [Parameter, EditorRequired]
+ public required string AlertMessage { get; set; }
+
+ [Parameter, EditorRequired]
+ public required bool ConfirmationRequired { get; set; }
+
+ [Parameter, EditorRequired]
+ public required EventCallback SaveCallback { get; set; }
+
+ [Parameter, EditorRequired]
+ public required EventCallback CancelCallback { get; set; }
+}
diff --git a/src/SharpSite.Web/Components/Admin/EditPage.razor b/src/SharpSite.Web/Components/Admin/EditPage.razor
index 55ecc0d..408312f 100644
--- a/src/SharpSite.Web/Components/Admin/EditPage.razor
+++ b/src/SharpSite.Web/Components/Admin/EditPage.razor
@@ -17,10 +17,14 @@
@Localizer[SharedResource.sharpsite_editpost_content]
-
+
-
@Localizer[SharedResource.sharpsite_save]
+
}
@code {
@@ -31,6 +35,8 @@
private string ThisPageTitle = string.Empty;
+ private bool _ConfirmationRequired = false;
+
protected override async Task OnInitializedAsync()
{
if (Id != 0)
@@ -54,6 +60,12 @@
private async Task SavePage()
{
+ if (!_ConfirmationRequired && MarkdownHelper.ContainsScriptTag(Page!.Content))
+ {
+ _ConfirmationRequired = true;
+ return;
+ }
+
if (Id == 0)
{
// format and set the slug based on the title
@@ -67,5 +79,6 @@
await PageRepository.UpdatePage(Page!);
}
NavManager.NavigateTo("/admin/Pages");
+
}
}
diff --git a/src/SharpSite.Web/Components/Admin/EditPost.razor b/src/SharpSite.Web/Components/Admin/EditPost.razor
index 9b0afa9..8045f1d 100644
--- a/src/SharpSite.Web/Components/Admin/EditPost.razor
+++ b/src/SharpSite.Web/Components/Admin/EditPost.razor
@@ -35,14 +35,16 @@
@Localizer[SharedResource.sharpsite_editpost_content]
-
+
-
- @Localizer[SharedResource.sharpsite_save]
-
+
}
@code {
@@ -50,6 +52,7 @@
[Parameter] public int? UrlDate { get; set; }
private Post? Post { get; set; }
+ private bool _ConfirmationRequired = false;
protected override async Task OnInitializedAsync()
{
@@ -66,25 +69,23 @@
private async Task SavePost()
{
- Console.WriteLine("Save Post");
+ if (!_ConfirmationRequired && MarkdownHelper.ContainsScriptTag(Post!.Content))
+ {
+ _ConfirmationRequired = true;
+ return;
+ }
if (string.IsNullOrEmpty(Post!.Slug))
{
Post.Slug = Post.GetSlug(Post.Title);
- Console.WriteLine(Post.Slug);
await PostService.AddPost(Post);
-
- // flush the outputcache for the sitemap and rss
- await FlushCache();
-
- NavManager.NavigateTo("/");
}
else
{
await PostService.UpdatePost(Post);
- await FlushCache();
- NavManager.NavigateTo("/");
}
+ await FlushCache();
+ NavManager.NavigateTo("/admin/posts");
}
diff --git a/src/SharpSite.Web/Components/Admin/ManageNavMenu.razor b/src/SharpSite.Web/Components/Admin/ManageNavMenu.razor
index 73bc05c..4255692 100644
--- a/src/SharpSite.Web/Components/Admin/ManageNavMenu.razor
+++ b/src/SharpSite.Web/Components/Admin/ManageNavMenu.razor
@@ -1,4 +1,4 @@
-@inject ApplicationState AppState
+ @inject ApplicationState AppState
@@ -11,13 +11,13 @@
-
+
@Localizer[SharedResource.sharpsite_pageadmin]
-
+
@Localizer[SharedResource.sharpsite_postsadmin]
@@ -39,6 +39,11 @@
+ @* Add a separator bar before the plugins configuration *@
+
+
+
+
@foreach (var configSection in AppState.ConfigurationSections)
{
@@ -50,4 +55,14 @@
+ @* Add a separator bar before the return to site *@
+
+
+
+
+
+ @SharedResource.sharpsite_returntowebsite
+
+
+
diff --git a/src/SharpSite.Web/Components/Admin/PageList.razor b/src/SharpSite.Web/Components/Admin/PageList.razor
index 9718926..25933e3 100644
--- a/src/SharpSite.Web/Components/Admin/PageList.razor
+++ b/src/SharpSite.Web/Components/Admin/PageList.razor
@@ -1,4 +1,4 @@
-@page "/admin/Pages"
+@attribute [Route(RouteValues.AdminPageList)]
@attribute [Authorize(Roles = Constants.Roles.AdminUsers)]
@inject IPageRepository PageRepository
@inject NavigationManager NavManager
diff --git a/src/SharpSite.Web/Components/Admin/PluginCard.razor b/src/SharpSite.Web/Components/Admin/PluginCard.razor
index 033b8f0..eb55b51 100644
--- a/src/SharpSite.Web/Components/Admin/PluginCard.razor
+++ b/src/SharpSite.Web/Components/Admin/PluginCard.razor
@@ -19,7 +19,7 @@
@code {
- private const string DefaultPluginIcon = "plugin-icon.svg";
+ private const string DefaultPluginIcon = "/img/plugin-icon.svg";
[Parameter, EditorRequired] public required PluginManifest Plugin { get; set; }
}
diff --git a/src/SharpSite.Web/Components/Admin/PostList.razor b/src/SharpSite.Web/Components/Admin/PostList.razor
index 5ceef2a..bbaf7b0 100644
--- a/src/SharpSite.Web/Components/Admin/PostList.razor
+++ b/src/SharpSite.Web/Components/Admin/PostList.razor
@@ -1,6 +1,7 @@
@attribute [Route(RouteValues.AdminPostList)]
@attribute [Authorize()]
@using Microsoft.AspNetCore.Components.QuickGrid
+@rendermode InteractiveServer
@inject IPostRepository PostService
@@ -27,6 +28,11 @@ else
+
+ DeletePost(context))">@Localizer[SharedResource.sharpsite_delete]
+
}
@@ -39,4 +45,12 @@ else
{
Posts = await PostService.GetPosts();
}
+
+ async Task DeletePost(Post post)
+ {
+ await PostService.DeletePost(post.Slug);
+ Posts = await PostService.GetPosts();
+ }
+
+
}
\ No newline at end of file
diff --git a/src/SharpSite.Web/Components/Admin/_Imports.razor b/src/SharpSite.Web/Components/Admin/_Imports.razor
index f6c6b4b..33adb45 100644
--- a/src/SharpSite.Web/Components/Admin/_Imports.razor
+++ b/src/SharpSite.Web/Components/Admin/_Imports.razor
@@ -1 +1 @@
-@layout AdminLayout
\ No newline at end of file
+@layout Layout.AdminLayout
\ No newline at end of file
diff --git a/src/SharpSite.Web/Components/App.razor b/src/SharpSite.Web/Components/App.razor
index 9034471..969ea77 100644
--- a/src/SharpSite.Web/Components/App.razor
+++ b/src/SharpSite.Web/Components/App.razor
@@ -7,7 +7,7 @@
-
+
@@ -24,7 +24,7 @@
-
+