+
-
-
- @if(Tags?.Any() == true)
- {
- @foreach(var tag in Tags)
+
+ @if (!string.IsNullOrWhiteSpace(Category) || (Config.FeaturesOrDefault.EnableMultilanguage && !string.IsNullOrWhiteSpace(Language)) || Tags?.Length > 0)
+ {
+
+ @if (!string.IsNullOrWhiteSpace(Category) || (Config.FeaturesOrDefault.EnableMultilanguage && !string.IsNullOrWhiteSpace(Language)))
+ {
+
+ @if (!string.IsNullOrWhiteSpace(Category))
+ {
+
+ }
+ @if (Config.FeaturesOrDefault.EnableMultilanguage)
+ {
+
+ }
+
+ }
+ @if (Tags?.Length > 0)
{
-
+
+ @foreach (var tag in Tags)
+ {
+
+ }
+
}
- }
-
-
- @PublishDate.ToString("MMM dd, yyyy")
-
+
+ }
+ @if (PublishDate is not null)
+ {
+
+ @PublishDate.Value.ToString("MMM dd, yyyy")
+
+ }
@@ -50,14 +61,18 @@
@code {
[Parameter] public string Title { get; set; } = string.Empty;
[Parameter] public string Description { get; set; } = string.Empty;
- [Parameter] public string Url { get; set; } = "#";
+ [Parameter] public string Path { get; set; } = "#";
[Parameter] public string? ThumbnailUrl { get; set; }
- [Parameter] public List
? Tags { get; set; }
- [Parameter] public DateTime PublishDate { get; set; } = DateTime.UtcNow;
+ [Parameter] public string? Category { get; set; }
+ [Parameter] public string[]? Tags { get; set; }
+ [Parameter] public string? Language { get; set; }
+ [Parameter] public DateTime? PublishDate { get; set; }
[Parameter] public bool ImageOnRight { get; set; } = true;
private bool ShowImage = true;
+ private string PostHref => $"post/{Path.TrimStart('/')}";
+
private void OnImageError()
{
ShowImage = false;
diff --git a/src/BoneLog.Blazor/Components/SearchQueryLink.razor b/src/BoneLog.Blazor/Components/SearchQueryLink.razor
new file mode 100644
index 0000000..96bf1c5
--- /dev/null
+++ b/src/BoneLog.Blazor/Components/SearchQueryLink.razor
@@ -0,0 +1,23 @@
+@inject NavigationManager Nav
+
+
+ @ChildContent
+
+
+@code {
+ [Parameter, EditorRequired]
+ public string Query { get; set; } = "";
+
+ [Parameter]
+ public string? Class { get; set; }
+
+ [Parameter]
+ public RenderFragment? ChildContent { get; set; }
+
+ private string Href => $"{Nav.BaseUri}?q={Uri.EscapeDataString(Query)}";
+
+ private void Navigate() => Nav.NavigateTo(Href);
+}
diff --git a/src/BoneLog.Blazor/Components/Tag.razor b/src/BoneLog.Blazor/Components/Tag.razor
deleted file mode 100644
index 50a04e1..0000000
--- a/src/BoneLog.Blazor/Components/Tag.razor
+++ /dev/null
@@ -1,13 +0,0 @@
-@if(!string.IsNullOrEmpty(TagName))
-{
-
-
- @TagName
-
-
-}
-
-@code {
- [Parameter]
- public string? TagName { get; set; }
-}
\ No newline at end of file
diff --git a/src/BoneLog.Blazor/Components/Tag/Tag.razor b/src/BoneLog.Blazor/Components/Tag/Tag.razor
new file mode 100644
index 0000000..af70aab
--- /dev/null
+++ b/src/BoneLog.Blazor/Components/Tag/Tag.razor
@@ -0,0 +1,13 @@
+@if (!string.IsNullOrEmpty(TagName))
+{
+
+
+ @TagName
+
+
+}
+
+@code {
+ [Parameter]
+ public string? TagName { get; set; }
+}
diff --git a/src/BoneLog.Blazor/Components/Tag/TagBox.razor b/src/BoneLog.Blazor/Components/Tag/TagBox.razor
new file mode 100644
index 0000000..3f1e065
--- /dev/null
+++ b/src/BoneLog.Blazor/Components/Tag/TagBox.razor
@@ -0,0 +1,41 @@
+
+
+@code {
+ [Parameter]
+ public string? SelectedTag { get; set; }
+
+ [Parameter]
+ public IReadOnlyList Posts { get; set; } = [];
+
+ private PostIndexTagEntry[] tags = [];
+
+ protected override void OnParametersSet() =>
+ tags = Posts.GetTags();
+
+ private bool IsTagSelected(string tag) =>
+ !string.IsNullOrEmpty(SelectedTag)
+ && SelectedTag.Equals(tag, StringComparison.OrdinalIgnoreCase);
+}
diff --git a/src/BoneLog.Blazor/Components/ToggleThemeButton.razor b/src/BoneLog.Blazor/Components/ToggleThemeButton.razor
index 9bdd816..0f6136f 100644
--- a/src/BoneLog.Blazor/Components/ToggleThemeButton.razor
+++ b/src/BoneLog.Blazor/Components/ToggleThemeButton.razor
@@ -1,17 +1,13 @@
@inject ThemeService ThemeService
-