diff --git a/src/Jonty.Blog.BlazorApp/Commons/Common.cs b/src/Jonty.Blog.BlazorApp/Commons/Common.cs index e1b924d..494b516 100644 --- a/src/Jonty.Blog.BlazorApp/Commons/Common.cs +++ b/src/Jonty.Blog.BlazorApp/Commons/Common.cs @@ -102,5 +102,18 @@ public async Task CurrentUri() return await Task.FromResult(uri); } + /// + /// 切换编辑器主题 + /// + /// + /// + public async Task SwitchEditorTheme(string currentTheme) + { + var editorTheme = currentTheme == "Light" ? "default" : "dark"; + + await SetStorageAsync("editorTheme", editorTheme); + + await InvokeAsync("window.func.switchEditorTheme"); + } } } diff --git a/src/Jonty.Blog.BlazorApp/Pages/Admin/Categories.razor b/src/Jonty.Blog.BlazorApp/Pages/Admin/Categories.razor index 0a2976f..5b301ef 100644 --- a/src/Jonty.Blog.BlazorApp/Pages/Admin/Categories.razor +++ b/src/Jonty.Blog.BlazorApp/Pages/Admin/Categories.razor @@ -1,4 +1,5 @@ @page "/admin/categories" +@using Jonty.Blog.BlazorApp.Response.Blog.Params @if (categories == null) diff --git a/src/Jonty.Blog.BlazorApp/Pages/Admin/Friendlinks.razor b/src/Jonty.Blog.BlazorApp/Pages/Admin/Friendlinks.razor new file mode 100644 index 0000000..a9c1484 --- /dev/null +++ b/src/Jonty.Blog.BlazorApp/Pages/Admin/Friendlinks.razor @@ -0,0 +1,166 @@ +@page "/admin/friendlinks" +@using Jonty.Blog.BlazorApp.Response.Blog.Params + + + @if (friendlinks == null) + { + } + else + { +
+

- FriendLinks -

+ @if (friendlinks.Success && friendlinks.Result.Any()) + { +
+ @foreach (var item in friendlinks.Result) + { +
+
+ + 📝 + +

@item.Title

+
+
+
} +
+
+

📒~~~ 新增友链 ~~~📒

+
+
+
} + else + { +} +
+ + +
+ Title: +
+
+ LinkUrl: +
+
} +
+ +@code { /// + /// 默认隐藏Box + /// + private bool Open { get; set; } = false; + + /// + /// 新增或者更新时候的友链字段值 + /// + private string title, linkUrl; + + /// + /// 更新友链的Id值 + /// + private int id; + + /// + /// API返回的友链列表数据 + /// + private ServiceResult> friendlinks; + + /// + /// 初始化 + /// + /// + protected override async Task OnInitializedAsync() + { + var token = await Common.GetStorageAsync("token"); + Http.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}"); + + friendlinks = await FetchData(); + } + + /// + /// 获取数据 + /// + /// + private async Task>> FetchData() + { + return await Http.GetFromJsonAsync>>("/blog/admin/friendlinks"); + } + + /// + /// 删除分类 + /// + /// + /// + private async Task DeleteAsync(int id) + { + Open = false; + + // 弹窗确认 + bool confirmed = await Common.InvokeAsync("confirm", "\n💥💢真的要干掉这个该死的友链吗💢💥"); + + if (confirmed) + { + var response = await Http.DeleteAsync($"/blog/friendlink?id={id}"); + + var result = await response.Content.ReadFromJsonAsync(); + + if (result.Success) + { + friendlinks = await FetchData(); + } + } + } + + /// + /// 显示box,绑定字段 + /// + /// + private void ShowBox(QueryFriendLinkForAdminDto dto = null) + { + Open = true; + id = 0; + + // 新增 + if (dto == null) + { + title = null; + linkUrl = null; + } + else // 更新 + { + id = dto.Id; + title = dto.Title; + linkUrl = dto.LinkUrl; + } + } + + /// + /// 确认按钮点击事件 + /// + /// + private async Task SubmitAsync() + { + var input = new EditFriendLinkInput() + { + Title = title.Trim(), + LinkUrl = linkUrl.Trim() + }; + + if (string.IsNullOrEmpty(input.Title) || string.IsNullOrEmpty(input.LinkUrl)) + { + return; + } + + var responseMessage = new HttpResponseMessage(); + + if (id > 0) + responseMessage = await Http.PutAsJsonAsync($"/blog/friendlink?id={id}", input); + else + responseMessage = await Http.PostAsJsonAsync("/blog/friendlink", input); + + var result = await responseMessage.Content.ReadFromJsonAsync(); + if (result.Success) + { + friendlinks = await FetchData(); + Open = false; + } + } } \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Pages/Admin/Post.razor b/src/Jonty.Blog.BlazorApp/Pages/Admin/Post.razor new file mode 100644 index 0000000..be2f2dd --- /dev/null +++ b/src/Jonty.Blog.BlazorApp/Pages/Admin/Post.razor @@ -0,0 +1,199 @@ +@page "/admin/post" +@page "/admin/post/{id:int}" + + + + + @if (isLoading) + { + } + else + { +
+
+ + +
+
+ + +
+
+ +
+ + +
+ 分类: + @if (categories.Success && categories.Result.Any()) + { +@foreach (var item in categories.Result) +{ +}} +
+
+
+ 标签: + +
+
+
} +
+ +@code { /// + /// 定义一个委托方法,用于组件实例方法调用 + /// + private static Func action; + + /// + /// 默认隐藏Box + /// + private bool Open { get; set; } = false; + + /// + /// 修改时的文章Id + /// + [Parameter] + public int? Id { get; set; } + + /// + /// 格式化的标签 + /// + private string tags { get; set; } + + /// + /// 默认显示加载中 + /// + private bool isLoading = true; + + /// + /// 文章新增或者修改输入参数 + /// + private PostForAdminDto input; + + /// + /// API返回的分类列表数据 + /// + private ServiceResult> categories; + + /// + /// 初始化 + /// + /// + protected override async Task OnInitializedAsync() + { + action = ChangeOpenStatus; + + var token = await Common.GetStorageAsync("token"); + Http.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}"); + + if (Id.HasValue) + { + var post = await Http.GetFromJsonAsync>($"/blog/admin/post?id={Id}"); + + if (post.Success) + { + var _post = post.Result; + input = new PostForAdminDto + { + Title = _post.Title, + Author = _post.Author, + Url = _post.Url, + Html = _post.Html, + Markdown = _post.Markdown, + CategoryId = _post.CategoryId, + Tags = _post.Tags, + CreationTime = _post.CreationTime + }; + + tags = string.Join(",", input.Tags); + } + } + else + { + input = new PostForAdminDto() + { + Author = "Jonty", + CreationTime = DateTime.Now + }; + } + + categories = await Http.GetFromJsonAsync>>("/blog/admin/categories"); + + // 渲染编辑器 + await Common.InvokeAsync("window.func.renderEditor"); + + // 关闭加载 + isLoading = !isLoading; + } + + /// + /// 改变Open状态,通知组件渲染 + /// + private async Task ChangeOpenStatus() + { + Open = true; + + var markdown = await Common.InvokeAsync("editor.getMarkdown"); + var html = await Common.InvokeAsync("editor.getHTML"); + + if (string.IsNullOrEmpty(input.Title) || string.IsNullOrEmpty(input.Url) || + string.IsNullOrEmpty(input.Author) || string.IsNullOrEmpty(markdown) || + string.IsNullOrEmpty(html)) + { + await Alert(); + } + + input.Html = html; + input.Markdown = markdown; + + StateHasChanged(); + } + + /// + /// 暴漏给JS执行,弹窗确认框 + /// + [JSInvokable("showbox")] + public static void ShowBox() + { + action.Invoke(); + } + + /// + /// 确认按钮点击事件 + /// + /// + private async Task SubmitAsync() + { + if (string.IsNullOrEmpty(tags) || input.CategoryId == 0) + { + await Alert(); + } + + input.Tags = tags.Split(","); + + var responseMessage = new HttpResponseMessage(); + + if (Id.HasValue) + responseMessage = await Http.PutAsJsonAsync($"/blog/post?id={Id}", input); + else + responseMessage = await Http.PostAsJsonAsync("/blog/post", input); + + var result = await responseMessage.Content.ReadFromJsonAsync(); + if (result.Success) + { + await Common.NavigateTo("/admin/posts"); + } + } + + /// + /// alert提示 + /// + /// + private async Task Alert() + { + Open = false; + + await Common.InvokeAsync("alert", "\n💥💢好像漏了点什么吧💢💥"); + return; + } } \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Pages/Admin/Posts.razor b/src/Jonty.Blog.BlazorApp/Pages/Admin/Posts.razor new file mode 100644 index 0000000..68a67c7 --- /dev/null +++ b/src/Jonty.Blog.BlazorApp/Pages/Admin/Posts.razor @@ -0,0 +1,127 @@ +@page "/admin/posts" +@page "/admin/posts/{page:int}" + + + @if (posts == null) + { + + } + else + { +
+

📝~~~ 新增文章 ~~~📝

+ @if (posts.Success && posts.Result.Item.Any()) + { + @foreach (var item in posts.Result.Item) + { +

@item.Year

+ @foreach (var post in item.Posts) + { +
+ + 📝 + @post.Title + @post.CreationTime +
+ } + } + + } + else + { + + } +
+ } +
+ +@code { + /// + /// 当前页码 + /// + [Parameter] + public int? page { get; set; } + + /// + /// 限制条数 + /// + private int Limit = 15; + + /// + /// 总页码 + /// + private int TotalPage; + + /// + /// 文章列表数据 + /// + private ServiceResult> posts; + + /// + /// 初始化 + /// + protected override async Task OnInitializedAsync() + { + var token = await Common.GetStorageAsync("token"); + Http.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}"); + + // 设置默认值 + page = page.HasValue ? page : 1; + + await RenderPage(page); + } + + /// + /// 点击页码重新渲染数据 + /// + /// + /// + private async Task RenderPage(int? page) + { + // 获取数据 + posts = await Http.GetFromJsonAsync>>($"/blog/admin/posts?page={page}&limit={Limit}"); + + if (!posts.Success) + await Common.NavigateTo("/"); + + // 计算总页码 + TotalPage = (int)Math.Ceiling((posts.Result.Total / (double)Limit)); + } + + /// + /// 删除文章 + /// + /// + /// + private async Task DeleteAsync(int id) + { + // 弹窗确认 + bool confirmed = await Common.InvokeAsync("confirm", "\n💥💢真的要干掉这篇该死的文章吗💢💥"); + + if (confirmed) + { + var response = await Http.DeleteAsync($"/blog/post?id={id}"); + + var result = await response.Content.ReadFromJsonAsync(); + + if (result.Success) + { + await RenderPage(page); + } + } + } +} \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Pages/Admin/Tags.razor b/src/Jonty.Blog.BlazorApp/Pages/Admin/Tags.razor new file mode 100644 index 0000000..f68e574 --- /dev/null +++ b/src/Jonty.Blog.BlazorApp/Pages/Admin/Tags.razor @@ -0,0 +1,172 @@ +@page "/admin/tags" +@using Jonty.Blog.BlazorApp.Response.Blog.Params + + + @if (tags == null) + { + + } + else + { +
+

- Tags -

+ @if (tags.Success && tags.Result.Any()) + { +
+ @foreach (var item in tags.Result) + { +
+
+ + 📝 + +

@item.TagName

+ (@item.Count) +
+
+
+ } +
+
+

📘~~~ 新增标签 ~~~📘

+
+
+
+ } + else + { + + } +
+ + +
+ DisplayName: +
+
+ TagName: +
+
+ } +
+ +@code { /// + /// 默认隐藏Box + /// + private bool Open { get; set; } = false; + + /// + /// 新增或者更新时候的标签字段值 + /// + private string tagName, displayName; + + /// + /// 更新标签的Id值 + /// + private int id; + + /// + /// API返回的标签列表数据 + /// + private ServiceResult> tags; + + /// + /// 初始化 + /// + /// + protected override async Task OnInitializedAsync() + { + var token = await Common.GetStorageAsync("token"); + Http.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}"); + + tags = await FetchData(); + } + + /// + /// 获取数据 + /// + /// + private async Task>> FetchData() + { + return await Http.GetFromJsonAsync>>("/blog/admin/tags"); + } + + /// + /// 删除标签 + /// + /// + /// + private async Task DeleteAsync(int id) + { + Open = false; + + // 弹窗确认 + bool confirmed = await Common.InvokeAsync("confirm", "\n💥💢真的要干掉这个该死的标签吗💢💥"); + + if (confirmed) + { + var response = await Http.DeleteAsync($"/blog/tag?id={id}"); + + var result = await response.Content.ReadFromJsonAsync(); + + if (result.Success) + { + tags = await FetchData(); + } + } + } + + /// + /// 显示box,绑定字段 + /// + /// + private void ShowBox(QueryTagForAdminDto dto = null) + { + Open = true; + id = 0; + + // 新增 + if (dto == null) + { + displayName = null; + tagName = null; + } + else // 更新 + { + id = dto.Id; + displayName = dto.DisplayName; + tagName = dto.TagName; + } + } + + /// + /// 确认按钮点击事件 + /// + /// + private async Task SubmitAsync() + { + var input = new EditTagInput() + { + DisplayName = displayName.Trim(), + TagName = tagName.Trim() + }; + + if (string.IsNullOrEmpty(input.DisplayName) || string.IsNullOrEmpty(input.TagName)) + { + return; + } + + var responseMessage = new HttpResponseMessage(); + + if (id > 0) + responseMessage = await Http.PutAsJsonAsync($"/blog/tag?id={id}", input); + else + responseMessage = await Http.PostAsJsonAsync("/blog/tag", input); + + var result = await responseMessage.Content.ReadFromJsonAsync(); + if (result.Success) + { + tags = await FetchData(); + Open = false; + } + } } \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Pages/Apps/Apps.razor b/src/Jonty.Blog.BlazorApp/Pages/Apps/Apps.razor index e7ae5f0..253e810 100644 --- a/src/Jonty.Blog.BlazorApp/Pages/Apps/Apps.razor +++ b/src/Jonty.Blog.BlazorApp/Pages/Apps/Apps.razor @@ -1,15 +1,13 @@ @page "/apps" -
-
-

- Apps -

- -
+
+

- Apps -

+
\ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Pages/Categories/Categories.razor b/src/Jonty.Blog.BlazorApp/Pages/Categories/Categories.razor index 211125f..ff21874 100644 --- a/src/Jonty.Blog.BlazorApp/Pages/Categories/Categories.razor +++ b/src/Jonty.Blog.BlazorApp/Pages/Categories/Categories.razor @@ -1,39 +1,39 @@ @page "/categories" + @if (categories == null) { } else { -
-
-

- Categories -

-
- @if (categories.Success && categories.Result.Any()) +
+

- Categories -

+
+ @if (categories.Success && categories.Result.Any()) + { + @foreach (var item in categories.Result) { - @foreach (var item in categories.Result) - { - + } + else + { + + }
} + @code{ /// /// categories @@ -45,7 +45,7 @@ else /// protected override async Task OnInitializedAsync() { - // 获取数据 + // 获取数据 categories = await Http.GetFromJsonAsync>>($"/blog/categories"); } } \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Pages/FriendLinks/FriendLinks.razor b/src/Jonty.Blog.BlazorApp/Pages/FriendLinks/FriendLinks.razor index 03a5ef8..4dd39d6 100644 --- a/src/Jonty.Blog.BlazorApp/Pages/FriendLinks/FriendLinks.razor +++ b/src/Jonty.Blog.BlazorApp/Pages/FriendLinks/FriendLinks.razor @@ -41,7 +41,7 @@ else /// protected override async Task OnInitializedAsync() { - // 获取数据 + // 获取数据 friendlinks = await Http.GetFromJsonAsync>>($"/blog/friendlinks"); } } \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Pages/Posts/Posts.Category.razor b/src/Jonty.Blog.BlazorApp/Pages/Posts/Posts.Category.razor index bb482bc..457b31e 100644 --- a/src/Jonty.Blog.BlazorApp/Pages/Posts/Posts.Category.razor +++ b/src/Jonty.Blog.BlazorApp/Pages/Posts/Posts.Category.razor @@ -6,43 +6,41 @@ } else { -
-
- @if (categoryName != null) - { -

- Category · @categoryName -

- } -
-
- @if (posts.Success && posts.Result.Any()) +
+ @if (categoryName != null) + { +

- Category · @categoryName -

+ } +
+
+ @if (posts.Success && posts.Result.Any()) + { + @foreach (var item in posts.Result) { - @foreach (var item in posts.Result) +

@item.Year

+ @foreach (var post in item.Posts) { -

@item.Year

- @foreach (var post in item.Posts) - { -
- @post.Title - @post.CreationTime -
- } +
+ @post.Title + @post.CreationTime +
} } - else - { - - } -
+ } + else + { + + }
} - @code { /// /// 分类名称参数 /// [Parameter] public string name { get; set; } + /// /// 分类名称 /// @@ -52,6 +50,7 @@ else /// 文章列表数据 /// private ServiceResult> posts; + /// /// 初始化 /// diff --git a/src/Jonty.Blog.BlazorApp/Pages/Posts/Posts.Tag.razor b/src/Jonty.Blog.BlazorApp/Pages/Posts/Posts.Tag.razor index 6430cf7..8819228 100644 --- a/src/Jonty.Blog.BlazorApp/Pages/Posts/Posts.Tag.razor +++ b/src/Jonty.Blog.BlazorApp/Pages/Posts/Posts.Tag.razor @@ -6,33 +6,31 @@ } else { -
-
- @if (tagName != null) - { -

- Tag · @tagName -

- } -
-
- @if (posts.Success && posts.Result.Any()) +
+ @if (tagName != null) + { +

- Tag · @tagName -

+ } +
+
+ @if (posts.Success && posts.Result.Any()) + { + @foreach (var item in posts.Result) { - @foreach (var item in posts.Result) +

@item.Year

+ @foreach (var post in item.Posts) { -

@item.Year

- @foreach (var post in item.Posts) - { -
- @post.Title - @post.CreationTime -
- } +
+ @post.Title + @post.CreationTime +
} } - else - { - - } -
+ } + else + { + + }
} @@ -67,4 +65,4 @@ else tagName = tag.Result; } } -} +} \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Pages/Tags/Tags.razor b/src/Jonty.Blog.BlazorApp/Pages/Tags/Tags.razor index 3df33f4..e33ca58 100644 --- a/src/Jonty.Blog.BlazorApp/Pages/Tags/Tags.razor +++ b/src/Jonty.Blog.BlazorApp/Pages/Tags/Tags.razor @@ -1,29 +1,29 @@ @page "/tags" + @if (tags == null) { } else { -
-
-

- Tags -

-
- @if (tags.Success && tags.Result.Any()) - { - @foreach (var item in tags.Result) - { - @item.TagName(@item.Count) - } - } - else +
+

- Tags -

+
+ @if (tags.Success && tags.Result.Any()) + { + @foreach (var item in tags.Result) { - + @item.TagName(@item.Count) } -
+ } + else + { + + }
} + @code{ /// /// tags diff --git a/src/Jonty.Blog.BlazorApp/Response/Blog/QueryPostForAdminDto.cs b/src/Jonty.Blog.BlazorApp/Response/Blog/QueryPostForAdminDto.cs index fe2bde3..5e713e5 100644 --- a/src/Jonty.Blog.BlazorApp/Response/Blog/QueryPostForAdminDto.cs +++ b/src/Jonty.Blog.BlazorApp/Response/Blog/QueryPostForAdminDto.cs @@ -2,11 +2,16 @@ namespace Jonty.Blog.BlazorApp.Response.Blog { - public class QueryPostForAdminDto: QueryPostDto + public class QueryPostForAdminDto { + /// + /// 年份 + /// + public int Year { get; set; } + /// /// Posts /// - public new IEnumerable Posts { get; set; } + public IEnumerable Posts { get; set; } } } \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Shared/ErrorTip.razor b/src/Jonty.Blog.BlazorApp/Shared/ErrorTip.razor index 3f6550f..5abb87b 100644 --- a/src/Jonty.Blog.BlazorApp/Shared/ErrorTip.razor +++ b/src/Jonty.Blog.BlazorApp/Shared/ErrorTip.razor @@ -1,5 +1,15 @@ -
+@if (isApp) +{

Sorry, there's nothing at this address.😖😖😖

-
\ No newline at end of file +} +else +{ +

Sorry, there's nothing at this address.😖😖😖

+} + +@code{ + [Parameter] + public bool isApp { get; set; } = false; +} \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/Shared/Header.razor b/src/Jonty.Blog.BlazorApp/Shared/Header.razor index 5b500e4..bd23691 100644 --- a/src/Jonty.Blog.BlazorApp/Shared/Header.razor +++ b/src/Jonty.Blog.BlazorApp/Shared/Header.razor @@ -1,10 +1,9 @@ - -
+
-@code { - /// - /// 下拉菜单是否打开 - /// - private bool collapseNavMenu = false; - /// - /// 导航菜单CSS - /// - private string NavMenuCssClass => collapseNavMenu ? "active" : null; +@code { /// + /// 下拉菜单是否打开 + /// + private bool collapseNavMenu = false; - /// - /// 显示/隐藏 菜单 - /// - private void ToggleNavMenu() => collapseNavMenu = !collapseNavMenu; + /// + /// 导航菜单CSS + /// + private string NavMenuCssClass => collapseNavMenu ? "active" : null; - /// - /// 当前主题 - /// - private string currentTheme; + /// + /// 当前主题 + /// + private string currentTheme; - /// - /// 初始化 - /// - /// - protected override async Task OnInitializedAsync() - { - currentTheme = await Common.GetStorageAsync("theme") ?? "Light"; + /// + /// 显示/隐藏 菜单 + /// + private void ToggleNavMenu() + { + collapseNavMenu = !collapseNavMenu; + } - await Common.InvokeAsync("window.func.switchTheme"); - } + /// + /// 初始化 + /// + /// + protected override async Task OnInitializedAsync() + { + currentTheme = await Common.GetStorageAsync("theme") ?? "Light"; - /// - /// 切换主题 - /// - private async Task SwitchTheme() - { - currentTheme = currentTheme == "Light" ? "Dark" : "Light"; + await Common.InvokeAsync("window.func.switchTheme"); + } - await Common.SetStorageAsync("theme", currentTheme); + /// + /// 切换主题 + /// + private async Task SwitchTheme() + { + currentTheme = currentTheme == "Light" ? "Dark" : "Light"; - await Common.InvokeAsync("window.func.switchTheme"); - } -} \ No newline at end of file + await Common.SetStorageAsync("theme", currentTheme); + + await Common.InvokeAsync("window.func.switchTheme"); + + var uri = await Common.CurrentUri(); + if (uri.AbsolutePath.StartsWith("/admin/post")) + { + await Common.SwitchEditorTheme(currentTheme); + } + } } \ No newline at end of file diff --git a/src/Jonty.Blog.BlazorApp/_Imports.razor b/src/Jonty.Blog.BlazorApp/_Imports.razor index 8ae8693..f2652ce 100644 --- a/src/Jonty.Blog.BlazorApp/_Imports.razor +++ b/src/Jonty.Blog.BlazorApp/_Imports.razor @@ -1,14 +1,12 @@ @using System.Net.Http @using System.Net.Http.Json -@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.JSInterop @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web -@using Microsoft.AspNetCore.Components.WebAssembly.Http -@using Microsoft.JSInterop -@using Jonty.Blog.BlazorApp @using Jonty.Blog.BlazorApp.Shared -@inject HttpClient Http -@inject Commons.Common Common +@using Microsoft.AspNetCore.WebUtilities @using Response.Base @using Response.Blog -@using Response.Blog.Params \ No newline at end of file + +@inject HttpClient Http +@inject Commons.Common Common diff --git a/src/Jonty.Blog.BlazorApp/wwwroot/css/app.css b/src/Jonty.Blog.BlazorApp/wwwroot/css/app.css index e8c78ba..c797f6e 100644 --- a/src/Jonty.Blog.BlazorApp/wwwroot/css/app.css +++ b/src/Jonty.Blog.BlazorApp/wwwroot/css/app.css @@ -129,8 +129,8 @@ template { display: none; } @font-face { - font-family:'Fira Code Medium'; - src: url('https://static.meowv.com/fonts/FiraCode-Medium.woff2') format('woff2'), url("https://static.meowv.com/fonts/FiraCode-Medium.woff") format("woff"); + font-family: 'Fira Code Medium'; + src: url('fonts/FiraCode-Medium.woff2') format('woff2'), url('/fonts/FiraCode-Medium.woff') format("woff"); font-weight: 500; font-style: normal; } diff --git a/src/Jonty.Blog.BlazorApp/wwwroot/js/app.js b/src/Jonty.Blog.BlazorApp/wwwroot/js/app.js index cf79725..f052217 100644 --- a/src/Jonty.Blog.BlazorApp/wwwroot/js/app.js +++ b/src/Jonty.Blog.BlazorApp/wwwroot/js/app.js @@ -88,7 +88,7 @@ func = { }); }, _shoowBox: function () { - DotNet.invokeMethodAsync('Meowv.Blog.BlazorApp', 'showbox'); + DotNet.invokeMethodAsync('Jonty.Blog.BlazorApp', 'showbox'); }, _loadScript: async function (url) { let response = await fetch(url);