From 16f9e1853498dc868ff3b949a664d332d313ff8f Mon Sep 17 00:00:00 2001 From: Diego <2248356998@qq.com> Date: Wed, 16 Oct 2024 09:08:44 +0800 Subject: [PATCH 01/12] =?UTF-8?q?fix(tab):=20=E5=AF=BC=E8=88=AATab=20?= =?UTF-8?q?=E5=BD=93=E5=85=B3=E9=97=AD=E6=9C=80=E5=90=8E=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=97=B6=EF=BC=8C=E8=B7=B3=E8=BD=AC=E9=BB=98?= =?UTF-8?q?=E8=AE=A4url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Tab/Tab.razor | 9 ++++++++- src/BootstrapBlazor/Components/Tab/Tab.razor.cs | 14 ++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor b/src/BootstrapBlazor/Components/Tab/Tab.razor index 267bd4524a0..0ae2f08fbd3 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor @@ -20,7 +20,14 @@ else @if (!Items.Any() && !string.IsNullOrEmpty(DefaultUrl)) { - AddTabItem(DefaultUrl); + if (ClickTabToNavigation) + { + Navigator.NavigateTo(DefaultUrl); + } + else + { + AddTabItem(DefaultUrl); + } } @if (FirstRender) { diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs index 8c4a07b64e0..373b51764d6 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs @@ -3,6 +3,7 @@ // Website: https://www.blazor.zone or https://argozhang.github.io/ using Microsoft.Extensions.Localization; + using System.Collections.Concurrent; using System.Reflection; @@ -594,18 +595,19 @@ private void AddTabItem(string url) // TabItemOptionAttribute SetTabItemParameters(option.Text, option.Icon, option.Closable, true); } - else if (Options.Valid()) - { - // TabItemTextOptions - SetTabItemParameters(Options.Text, Options.Icon, Options.Closable, Options.IsActive); - Options.Reset(); - } + else if (Layout != null) { // CascadeParameter Menus var menu = GetMenuItem(url); SetTabItemParameters(menu?.Text, menu?.Icon, true, true); } + else if (Options.Valid()) + { + // TabItemTextOptions + SetTabItemParameters(Options.Text, Options.Icon, Options.Closable, Options.IsActive); + Options.Reset(); + } else { parameters.Add(nameof(TabItem.Text), url.Split("/").FirstOrDefault()); From 347b54e2289710da306b32a51e02988c3aa40359 Mon Sep 17 00:00:00 2001 From: Diego <2248356998@qq.com> Date: Wed, 16 Oct 2024 09:08:51 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E6=B7=BB=E5=8A=A0demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BootstrapBlazor.sln | 9 +- src/BlazorApp2/BlazorApp2.csproj | 14 +++ src/BlazorApp2/BlazorApp2.sln | 24 ++++ src/BlazorApp2/Components/App.razor | 44 ++++++++ .../Components/Layout/BaseLayout.razor | 12 ++ .../Components/Layout/BaseLayout.razor.css | 0 .../Components/Layout/DefaultMenuService.cs | 38 +++++++ .../Components/Layout/MainLayout.razor | 27 +++++ .../Components/Layout/MainLayout.razor.css | 0 .../Components/Layout/NavMenu.razor | 30 +++++ .../Components/Layout/NavMenu.razor.css | 105 ++++++++++++++++++ src/BlazorApp2/Components/Pages/Counter.razor | 18 +++ src/BlazorApp2/Components/Pages/Error.razor | 36 ++++++ src/BlazorApp2/Components/Pages/Home.razor | 7 ++ src/BlazorApp2/Components/Pages/Weather.razor | 63 +++++++++++ src/BlazorApp2/Components/Routes.razor | 6 + src/BlazorApp2/Components/_Imports.razor | 10 ++ src/BlazorApp2/Program.cs | 60 ++++++++++ src/BlazorApp2/Properties/launchSettings.json | 38 +++++++ src/BlazorApp2/appsettings.Development.json | 8 ++ src/BlazorApp2/appsettings.json | 9 ++ src/BlazorApp2/wwwroot/favicon.ico | Bin 0 -> 4286 bytes src/BlazorApp2/wwwroot/favicon.png | Bin 0 -> 10516 bytes src/BlazorApp2/wwwroot/manifest.json | 21 ++++ src/BlazorApp2/wwwroot/service-worker.js | 4 + .../wwwroot/service-worker.published.js | 48 ++++++++ 26 files changed, 630 insertions(+), 1 deletion(-) create mode 100644 src/BlazorApp2/BlazorApp2.csproj create mode 100644 src/BlazorApp2/BlazorApp2.sln create mode 100644 src/BlazorApp2/Components/App.razor create mode 100644 src/BlazorApp2/Components/Layout/BaseLayout.razor create mode 100644 src/BlazorApp2/Components/Layout/BaseLayout.razor.css create mode 100644 src/BlazorApp2/Components/Layout/DefaultMenuService.cs create mode 100644 src/BlazorApp2/Components/Layout/MainLayout.razor create mode 100644 src/BlazorApp2/Components/Layout/MainLayout.razor.css create mode 100644 src/BlazorApp2/Components/Layout/NavMenu.razor create mode 100644 src/BlazorApp2/Components/Layout/NavMenu.razor.css create mode 100644 src/BlazorApp2/Components/Pages/Counter.razor create mode 100644 src/BlazorApp2/Components/Pages/Error.razor create mode 100644 src/BlazorApp2/Components/Pages/Home.razor create mode 100644 src/BlazorApp2/Components/Pages/Weather.razor create mode 100644 src/BlazorApp2/Components/Routes.razor create mode 100644 src/BlazorApp2/Components/_Imports.razor create mode 100644 src/BlazorApp2/Program.cs create mode 100644 src/BlazorApp2/Properties/launchSettings.json create mode 100644 src/BlazorApp2/appsettings.Development.json create mode 100644 src/BlazorApp2/appsettings.json create mode 100644 src/BlazorApp2/wwwroot/favicon.ico create mode 100644 src/BlazorApp2/wwwroot/favicon.png create mode 100644 src/BlazorApp2/wwwroot/manifest.json create mode 100644 src/BlazorApp2/wwwroot/service-worker.js create mode 100644 src/BlazorApp2/wwwroot/service-worker.published.js diff --git a/BootstrapBlazor.sln b/BootstrapBlazor.sln index d2364ee6318..094a6371622 100644 --- a/BootstrapBlazor.sln +++ b/BootstrapBlazor.sln @@ -1,6 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 +# 17 VisualStudioVersion = 17.0.31912.275 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapBlazor", "src\BootstrapBlazor\BootstrapBlazor.csproj", "{D0AE3016-4878-4807-A04C-C33CBEC7B092}" @@ -60,6 +60,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "configuration", "configurat EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniTestSvgIcon", "test\UniTestSvgIcon\UniTestSvgIcon.csproj", "{01DA4687-0973-4CA6-97F5-04E0B8DD1B13}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorApp2", "src\BlazorApp2\BlazorApp2.csproj", "{1CD48339-62C1-4187-860C-9C4B91ED85D2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -94,6 +96,10 @@ Global {01DA4687-0973-4CA6-97F5-04E0B8DD1B13}.Debug|Any CPU.Build.0 = Debug|Any CPU {01DA4687-0973-4CA6-97F5-04E0B8DD1B13}.Release|Any CPU.ActiveCfg = Release|Any CPU {01DA4687-0973-4CA6-97F5-04E0B8DD1B13}.Release|Any CPU.Build.0 = Release|Any CPU + {1CD48339-62C1-4187-860C-9C4B91ED85D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1CD48339-62C1-4187-860C-9C4B91ED85D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1CD48339-62C1-4187-860C-9C4B91ED85D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1CD48339-62C1-4187-860C-9C4B91ED85D2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -109,6 +115,7 @@ Global {6D73FED6-0086-460B-84FA-1FA78176BF59} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD} {D8AEAFE7-10AF-4A5B-BC67-FE740A2CA1DF} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD} {01DA4687-0973-4CA6-97F5-04E0B8DD1B13} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD} + {1CD48339-62C1-4187-860C-9C4B91ED85D2} = {A2182155-43ED-44C1-BF6F-1B70EBD2DFFE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0DCB0756-34FA-4FD0-AE1D-D3F08B5B3A6B} diff --git a/src/BlazorApp2/BlazorApp2.csproj b/src/BlazorApp2/BlazorApp2.csproj new file mode 100644 index 00000000000..559351298ab --- /dev/null +++ b/src/BlazorApp2/BlazorApp2.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + + + + + + + + diff --git a/src/BlazorApp2/BlazorApp2.sln b/src/BlazorApp2/BlazorApp2.sln new file mode 100644 index 00000000000..7850b9c7cbd --- /dev/null +++ b/src/BlazorApp2/BlazorApp2.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# 17 +VisualStudioVersion = 17.11.35327.3 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorApp2", "BlazorApp2\BlazorApp2.csproj", "{3145BDB6-7801-4480-A930-21A9B137621F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3145BDB6-7801-4480-A930-21A9B137621F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3145BDB6-7801-4480-A930-21A9B137621F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3145BDB6-7801-4480-A930-21A9B137621F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3145BDB6-7801-4480-A930-21A9B137621F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {7C3BA4BF-6B7D-4098-973A-CA79826B29DB} + EndGlobalSection +EndGlobal diff --git a/src/BlazorApp2/Components/App.razor b/src/BlazorApp2/Components/App.razor new file mode 100644 index 00000000000..246d0777ea3 --- /dev/null +++ b/src/BlazorApp2/Components/App.razor @@ -0,0 +1,44 @@ +@using BootstrapBlazor.Components +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.Extensions.Localization +@using ThingsGateway.Razor +@inject IHostEnvironment Env +@inject IStringLocalizer Localizer +@namespace ThingsGateway + + + + + + + + + + + + + + + + ThingsGateway + + + + + @* *@ + + + + + + + + + + + + + + + + diff --git a/src/BlazorApp2/Components/Layout/BaseLayout.razor b/src/BlazorApp2/Components/Layout/BaseLayout.razor new file mode 100644 index 00000000000..5576f264d4d --- /dev/null +++ b/src/BlazorApp2/Components/Layout/BaseLayout.razor @@ -0,0 +1,12 @@ +@inherits LayoutComponentBase +@using BootstrapBlazor.Components +@namespace ThingsGateway.Razor + +@* BB根组件 *@ + + @Body + + + + + diff --git a/src/BlazorApp2/Components/Layout/BaseLayout.razor.css b/src/BlazorApp2/Components/Layout/BaseLayout.razor.css new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/BlazorApp2/Components/Layout/DefaultMenuService.cs b/src/BlazorApp2/Components/Layout/DefaultMenuService.cs new file mode 100644 index 00000000000..455f9fd5eaa --- /dev/null +++ b/src/BlazorApp2/Components/Layout/DefaultMenuService.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 +// 此代码版权(除特别声明外的代码)归作者本人Diego所有 +// 源代码使用协议遵循本仓库的开源协议及附加协议 +// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway +// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway +// 使用文档:https://thingsgateway.cn/ +// QQ群:605534569 +//------------------------------------------------------------------------------ + +using BootstrapBlazor.Components; + +namespace ThingsGateway.Razor; + +/// +public interface IMenuService +{ + /// + public IEnumerable? MenuItems { get; } + +} + +public class DefaultMenuService : IMenuService +{ + + public IEnumerable? MenuItems => new List() { + + new MenuItem("home","/"), + new MenuItem("counter","/counter"), + new MenuItem("error","/error"), + new MenuItem("weather","/weather"), + + + + }; + + +} diff --git a/src/BlazorApp2/Components/Layout/MainLayout.razor b/src/BlazorApp2/Components/Layout/MainLayout.razor new file mode 100644 index 00000000000..c2a49c232f8 --- /dev/null +++ b/src/BlazorApp2/Components/Layout/MainLayout.razor @@ -0,0 +1,27 @@ +@using BootstrapBlazor.Components +@using System.Diagnostics.CodeAnalysis +@using ThingsGateway.Razor +@inherits BaseLayout + + + + +
+ + + +
+
+ + + + +@code{ + [Inject] + [NotNull] + private IMenuService? MenuService { get; set; } +} \ No newline at end of file diff --git a/src/BlazorApp2/Components/Layout/MainLayout.razor.css b/src/BlazorApp2/Components/Layout/MainLayout.razor.css new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/BlazorApp2/Components/Layout/NavMenu.razor b/src/BlazorApp2/Components/Layout/NavMenu.razor new file mode 100644 index 00000000000..1adcc76a106 --- /dev/null +++ b/src/BlazorApp2/Components/Layout/NavMenu.razor @@ -0,0 +1,30 @@ + + + + + + diff --git a/src/BlazorApp2/Components/Layout/NavMenu.razor.css b/src/BlazorApp2/Components/Layout/NavMenu.razor.css new file mode 100644 index 00000000000..4e15395e091 --- /dev/null +++ b/src/BlazorApp2/Components/Layout/NavMenu.razor.css @@ -0,0 +1,105 @@ +.navbar-toggler { + appearance: none; + cursor: pointer; + width: 3.5rem; + height: 2.5rem; + color: white; + position: absolute; + top: 0.5rem; + right: 1rem; + border: 1px solid rgba(255, 255, 255, 0.1); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); +} + +.navbar-toggler:checked { + background-color: rgba(255, 255, 255, 0.5); +} + +.top-row { + height: 3.5rem; + background-color: rgba(0,0,0,0.4); +} + +.navbar-brand { + font-size: 1.1rem; +} + +.bi { + display: inline-block; + position: relative; + width: 1.25rem; + height: 1.25rem; + margin-right: 0.75rem; + top: -1px; + background-size: cover; +} + +.bi-house-door-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); +} + +.bi-plus-square-fill-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); +} + +.bi-list-nested-nav-menu { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); +} + +.nav-item { + font-size: 0.9rem; + padding-bottom: 0.5rem; +} + + .nav-item:first-of-type { + padding-top: 1rem; + } + + .nav-item:last-of-type { + padding-bottom: 1rem; + } + + .nav-item ::deep .nav-link { + color: #d7d7d7; + background: none; + border: none; + border-radius: 4px; + height: 3rem; + display: flex; + align-items: center; + line-height: 3rem; + width: 100%; + } + +.nav-item ::deep a.active { + background-color: rgba(255,255,255,0.37); + color: white; +} + +.nav-item ::deep .nav-link:hover { + background-color: rgba(255,255,255,0.1); + color: white; +} + +.nav-scrollable { + display: none; +} + +.navbar-toggler:checked ~ .nav-scrollable { + display: block; +} + +@media (min-width: 641px) { + .navbar-toggler { + display: none; + } + + .nav-scrollable { + /* Never collapse the sidebar for wide screens */ + display: block; + + /* Allow sidebar to scroll for tall menus */ + height: calc(100vh - 3.5rem); + overflow-y: auto; + } +} diff --git a/src/BlazorApp2/Components/Pages/Counter.razor b/src/BlazorApp2/Components/Pages/Counter.razor new file mode 100644 index 00000000000..ef23cb31607 --- /dev/null +++ b/src/BlazorApp2/Components/Pages/Counter.razor @@ -0,0 +1,18 @@ +@page "/counter" + +Counter + +

Counter

+ +

Current count: @currentCount

+ + + +@code { + private int currentCount = 0; + + private void IncrementCount() + { + currentCount++; + } +} diff --git a/src/BlazorApp2/Components/Pages/Error.razor b/src/BlazorApp2/Components/Pages/Error.razor new file mode 100644 index 00000000000..576cc2d2f4d --- /dev/null +++ b/src/BlazorApp2/Components/Pages/Error.razor @@ -0,0 +1,36 @@ +@page "/Error" +@using System.Diagnostics + +Error + +

Error.

+

An error occurred while processing your request.

+ +@if (ShowRequestId) +{ +

+ Request ID: @RequestId +

+} + +

Development Mode

+

+ Swapping to Development environment will display more detailed information about the error that occurred. +

+

+ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +

+ +@code{ + [CascadingParameter] + private HttpContext? HttpContext { get; set; } + + private string? RequestId { get; set; } + private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + protected override void OnInitialized() => + RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; +} diff --git a/src/BlazorApp2/Components/Pages/Home.razor b/src/BlazorApp2/Components/Pages/Home.razor new file mode 100644 index 00000000000..9001e0bd272 --- /dev/null +++ b/src/BlazorApp2/Components/Pages/Home.razor @@ -0,0 +1,7 @@ +@page "/" + +Home + +

Hello, world!

+ +Welcome to your new app. diff --git a/src/BlazorApp2/Components/Pages/Weather.razor b/src/BlazorApp2/Components/Pages/Weather.razor new file mode 100644 index 00000000000..8eca4cc443f --- /dev/null +++ b/src/BlazorApp2/Components/Pages/Weather.razor @@ -0,0 +1,63 @@ +@page "/weather" + +Weather + +

Weather

+ +

This component demonstrates showing data.

+ +@if (forecasts == null) +{ +

Loading...

+} +else +{ + + + + + + + + + + + @foreach (var forecast in forecasts) + { + + + + + + + } + +
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
+} + +@code { + private WeatherForecast[]? forecasts; + + protected override async Task OnInitializedAsync() + { + // Simulate asynchronous loading to demonstrate a loading indicator + await Task.Delay(500); + + var startDate = DateOnly.FromDateTime(DateTime.Now); + var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; + forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = startDate.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = summaries[Random.Shared.Next(summaries.Length)] + }).ToArray(); + } + + private class WeatherForecast + { + public DateOnly Date { get; set; } + public int TemperatureC { get; set; } + public string? Summary { get; set; } + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + } +} diff --git a/src/BlazorApp2/Components/Routes.razor b/src/BlazorApp2/Components/Routes.razor new file mode 100644 index 00000000000..f756e19dfbc --- /dev/null +++ b/src/BlazorApp2/Components/Routes.razor @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/BlazorApp2/Components/_Imports.razor b/src/BlazorApp2/Components/_Imports.razor new file mode 100644 index 00000000000..391bcbf17d0 --- /dev/null +++ b/src/BlazorApp2/Components/_Imports.razor @@ -0,0 +1,10 @@ +@using System.Net.Http +@using System.Net.Http.Json +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using static Microsoft.AspNetCore.Components.Web.RenderMode +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using BlazorApp2 +@using BlazorApp2.Components diff --git a/src/BlazorApp2/Program.cs b/src/BlazorApp2/Program.cs new file mode 100644 index 00000000000..19460a79d67 --- /dev/null +++ b/src/BlazorApp2/Program.cs @@ -0,0 +1,60 @@ +using ThingsGateway; +using ThingsGateway.Razor; + +namespace BlazorApp2 +{ + public class Program + { + public static void Main(string[] args) + { + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; + + TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; + var builder = WebApplication.CreateBuilder(args); + + // Add services to the container. + builder.Services + .AddRazorComponents(options => + { + options.TemporaryRedirectionUrlValidityDuration = TimeSpan.FromMinutes(10); + }) + .AddInteractiveServerComponents(options => + { + options.RootComponents.MaxJSRootComponents = 500; + options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(2); + options.MaxBufferedUnacknowledgedRenderBatches = 20; + options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(10); + }); + builder.Services.AddBootstrapBlazor( + option => option.JSModuleVersion = Random.Shared.Next(10000).ToString() + ); + builder.Services.AddSingleton(); + var app = builder.Build(); + + // Configure the HTTP request pipeline. + if (!app.Environment.IsDevelopment()) + { + } + + app.UseHttpsRedirection(); + + app.UseStaticFiles(); + app.UseAntiforgery(); + + app.MapRazorComponents() + .AddInteractiveServerRenderMode(); + + app.Run(); + } + + private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + throw new NotImplementedException(); + } + + private static void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e) + { + Console.WriteLine(e.Exception.ToString()); + } + } +} diff --git a/src/BlazorApp2/Properties/launchSettings.json b/src/BlazorApp2/Properties/launchSettings.json new file mode 100644 index 00000000000..584049f3c2f --- /dev/null +++ b/src/BlazorApp2/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:12757", + "sslPort": 44360 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "http://localhost:5083", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "applicationUrl": "https://localhost:7275;http://localhost:5083", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } + } diff --git a/src/BlazorApp2/appsettings.Development.json b/src/BlazorApp2/appsettings.Development.json new file mode 100644 index 00000000000..0c208ae9181 --- /dev/null +++ b/src/BlazorApp2/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/src/BlazorApp2/appsettings.json b/src/BlazorApp2/appsettings.json new file mode 100644 index 00000000000..10f68b8c8b4 --- /dev/null +++ b/src/BlazorApp2/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/src/BlazorApp2/wwwroot/favicon.ico b/src/BlazorApp2/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d5a4939b2856a1e50185862447921c074d959e6b GIT binary patch literal 4286 zcmeIzTZm0j9LMo}+>Xm|%(xSKLP$PLjO3G|UxfRVYxzsVo_qVNmENAvUb0&$0z4h^5d+q;P|FhPHuS6l1o zf2Vb{`G;UXp5cv&FNn9%gvGFjMYffP6jtB?3OEX_ z?YH%Fu3XuJFUVp!CSwWOq4B2>S+n$laxoNlpz(WAnika7eR_&6XwQRw#S_r@)9SDE zP%czo`xjc@LI(eqF2nu|KST%Z%Trx$VQ$a)}-I zj!mXdzd`Rp5@(?GUx2?iM0=XhwsN5T@2h?tIlAwku^RsRi8F8o@1go1(TXt$t!Z~E z2daM)8XvX(2CnJ3|Acx3_4WR2#V+hX6SP0NUv{a`wsN5T3+`=HeXUt*@5V}m&ez{g z&4Wtn>$~_CUy(+CONHiZ9;m+FsdD>2j_VIi&K6?me0_Cl9Q19|^D)SrtNt|<>zn>6 zqW>HbHRc?Ya|D{lFBi0l8?g<_4gD$V#{^u3zMneRH(lqY^$*Z@76YNY4bcAIMK$dD zBRS9Fy!wM{r9Z-4(=&SyC!zOuFfPNcKbG_RP>w$zQSbFdWez8 ze636G>`u%_@cwIW=ixBEVK?k`F5vtLUP15ORII^c=-adzQRVGksX~wYQ*KhKB{wmX@~Shg QmuPc46COI0O&jaHUIzs literal 0 HcmV?d00001 diff --git a/src/BlazorApp2/wwwroot/favicon.png b/src/BlazorApp2/wwwroot/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..e88c7d32ff6f1de228b8ee4ff2a3c75bd82626ab GIT binary patch literal 10516 zcmeHtz|iv! zzxOYAzC9nFv(~IN=j^)ob?*DR?!C`W&<3dx6Fwotz`!5|s=m_2z`%q*{O}*4pB&C! zeZ;_E#sI!jc;laUut4xV-!A0nWQiW^C7dqLj7dSEn5*+h0aJxnH6PmOJ55tPbD>+; z^tX6=5ALK>Yq2NKQv)+_uBb6km~c)f9O1)6V{uU64{P(d2EY^5=54cCgg}Ag|OOJWc@!zRo?MSLkMu4+ZZoDk< zrbF?jj~RB((~;Lp4B)}rC+9r3uMO4O3@7u!*}%4G)H8av?n5{M_}*-i0#)85ejoR@ zQU?V~SbWbq#^k{hICzIjrit<_8O!#woxf>zDjyqn5Th`0{qAyJHT`-(m4USLBsq;7 z6@+-{mgx!Qz&-XFUnoprvXQ)# zCrHiYCz78LYd1 zF^u7?uywa-}ufXkhNb9FF72UtiW$v3|QA z29(m9q_n6BZH1W5&*dFipR7GIqt!Sy**~(j$&ALhaS7pdS4<-D4Tt3r8MJ*p{0bXU z>hmG4^*s6>5Xu5C;N00*RFT`=x(Ls(9Nk~`x_J9cp%ouG?wbn%=t^_5?~vgcWpc@s zEVAr0clfvk#?Ayz)O|TWz2l?ByqE=9Szz&f8Z-;3038cDZug8;odgViFQjx$^Qpwa zf!j+LF!KI`4)^((wm8JhF3f2zuC^Lv+SeO0%XN$LTU32Uc#&^frn=dFly(mf!sLE! z?mq4CA0deM0!DgS1YR!t}Gq6(*rWO9J@>SsVJQKY`nvx(M^Xr5IUZ_!#XM=HBlP^ z*Mc`ebuR_-Wg?fK%mfG4Z!qV|xF%9+q=`MwsBg{y$^4pj2KpCu{ejI;g?W+QH2$j~ z5ceA9GHZg~?#e;(;Z>cL*^p}y62OGkuD=32|oAhP%4oU4zTROGc z<})cb@m>lp57mX>I?m2|e#>uf$gB!!u=Wv@5-G|2I@FOnfv6TGyJUT^K?;wxXlJH= zYSi>Qye}1Nk$b%MUkT+-yOJcRXm`ylHX_Hz7Udg?nG2O9a#&D^LNy-MC`?hzxeubURqWGPG4ePQ{!iY4JbtR-?xn;|R=(Xx2xA0%Nt_S|Bo zJ~hg{@+#vqz=-Mt8lhPWg?U$ER8gFa3}vAF46tohlqJc``?x0_Qw(Q@G+?-fTQ6^Y z#a%qbVtuhs1aI5z;xFF3sde#i3b9n#u`~sKt?6yhO#wrJAMNdZaoZ$E=y|Jr4^wOZ z;wTRGfr~+JP852WRyR9eQ+x@_oHIUPb35%!usrQuQHt@KfD9%P<$s$ju$y_rwub=A zdQAunlF=?RFE`T@;zcXh@Z#E>>duv5v^7N%TA;7U=F4jBy<-Dh$~nUV9(k=qPNj`i z;8e4Q2F9Pn^M`Fd0UjYcj<{rAiS9Fnl|Y#8(w5|6lig&fY65BoZ<$S5c4UBEN2eCF zz9(i|EqKY6(?=b>Oqy0-orarl;=qfC%Tj;8lE-cOopH_t+$G~|NpG=>a9J>%Sry*@ z_InvLiVMCk40G9QyKFVRV@v&AZepn$o-ZQ zm!B>U%Q{O1hyL4?aZc~Gsc1YLlUhuHSaKh?<<#MWDn>PS}@8?l{_d3h)nJW*r=Ia zcoeSk>fYTYPB2`n(lXRh8m~M$Xidnbe9R`jbaow&R1LK2wZJd|tb{S0jN5~+UuVbjmis(rvo^3zs0xtEX@9mlmP5TzZl z7gkXw(mOTi%=*i_6Jdp&_Qp~hOgPx zkk5+lm)Ko44iYT|=IP7-zK=?N6!`F+B4nb3gj@R%^P(G!y-y?X8wE-z)WHQL;N-Wn zhg9}2o)saCx31fFJ<`v_l}%dyxC>`!wMc1AM-N`2vb}$UzNut6$_f=5wOWoUgFFng z89E{<9O2uK#?99zHE0|s`X-c*u4)pEL5pGjkTv4jFSqG%1FCEpifkm8k_lUZ=*jWs_?k{(qny8~Mg`qj0ftiQ!2`0RH=Y}rf2 z&P~(y+u10KV_-O+>Mu;+O4_fP({n9TJaNE$LyOZ7Kj5wP49*rlpitNm*Xu=DMqpd(ZK9-OhbSp$1jWbq}PCIMr<@ zz(S#&xgqXN?z=0Z@s)vN_63VlMc@PoQsx`n$wIHcTY+_P2{Su{YuPpZr89x$R4_hFqZmQ8!8)k zl0a25GiBd52Gu#M`yW-R)hl<5k=A}m(m)30N({6$Dl>R{M$08mgg-$%-M~{{49toY z2pXwy31OU8Z>+Z1Sbt&_1fbF#R1(~WwUR{2 z4=yqbREd{ee;fVVU8gt*yL1uGGK8W0^C{W?#0nE^A4A=^p{q-xWag*q$k=MqKuJ^D7(1 zOjQ}SVQCqE!pvrL!Ss9#jp8`t|J%-MkjPOFb#C@Q>`+x{!7*Bh#x?7Dwlm+kh0!jw zcH|B3yOS)7;Z-V}AzQa_tRZW~g$uq4bm$?Cs|l4~Qax(?rg#o^CSvrJ`L?VBrixw~ zmuA~|V)1}9r1 zFOFKi`ErR_rdj>7_nX4j&A~-)DVfHh2V2wd!5e+C&ATqS7xljT3iQ>{0_G{07e+@b zJiSs!CA_xfrJzb-@w@Q2#3WC7O$tynu7E(s*%$mIOR+Zpz{)Cw?X`56{ZDuKi18mT z8#Go(pKS1#XgdULKj5ocx!M(!8n~C=InawG*>$X|2hR=iR?97W-KPp(`xGAp?Y! zq|p6N4z^#r-f^f_JtCeCM>$^a0I%p+VK8svI~#k?z-7ku#5?7d z&d8wC%i`}_d${__ChG@M`jiF4TtF$lUXQrDe3WsIGtEyzT1@Uh@jgrrD&-$)Ak3!n zZzjZL(^V#8hMQKVGsiM6D_xEZfg`#8L$(1jQCOH}tG|JFpqSZ&dqNWOxPm=()*7j$ zyUuF`uQ~LuA_5%a0F^59JXMKzFlNEmJqJ+#<61)Vs;S44l0&grad2AgHn&r>mmwt` zFW>TbK5or3{xwj*RaKqHv~c`~M0g`QJq5uYQlhwZLsJ)g*d#O_Q1>C|ItyvkL%&IL z9RnPG-W~fv5VbyKb5M)H=rx`Ad6@U*bN%}Q;s6sX;UAlQp*!zsGpQ>X6blXwRdW5D z{rxjqXMVY!(lmVWmE6~h@-F?{?(84TlA2qIeB9^1$Bh`O^UVEfOw=SZQE;We1DSjXq;jHT^lvuf`deC3K zHFfB{+wXYq6>EBw1gl|%5J*oUbVvg(D_>-JaVokF{b2AA@O8k$oyrM%vu=?i&@m2} zdBGP?6mdRc3+!V_jW_xUhx?CJY&i(`Df zmE$mQQp-!0@B)DyI=qRvju#=x4J3dSxx(s+Jm)_mq@+jm*6Pzx6+F&sJ{!;10M_Gz zNKb;J4gC!lEf>97OkaDkn*pcSA808m!~S{c@^siEDn6MNPs9i7LB<&`cCBehY3xS{ zbQ$@%li+4Yapnah1O~X6G!A3XGU~(Xm2<*Yu;p$5+|BgJmE$ZWk=CG|$-GqyJE^1NGyJ~35=J-6G1d-UGm8n;`QSRB!e@M_{Ne>-afYtI`-pm@rANP5 zN;EF3KSL=T_p~WBF3#3rGw`)!!Hc3NnH_2GsgdO&qdi|3R439)C%R?LCgmX|rdt7u znOjfmD8g(%7rG~TIiR}xF4-|Z;$ZQ%MPPg`y(6m5kfG;+7wENV$KPQu+RzvzqBcon z-IKOl>dwo1Uu=nnR==M4vWGUMQ;{{xGRgZwOR^PbM0C@7_1(8Tb->m=;n70pkGl3e z_6-HXPgHRjMC*GK@y3A${&W-zUOARC{@X~PJ$K0~EA%4%s@&t5N4k~I- zj}%LkzE%8Tq@0&ZhxLu(4WxQ|3e>z_1JU5oJwq`R7MxZ>z0|>J;d?x*)T0D`$xJT zckh@xc(fz{Wto^@d)kGAOi&RNh%+O<5&qZ4`!S z7z^~*x`n;#M8dtT=(i^YVH|iu-+GnANzW`0VgjdrMJrGHt2tE+&|Seafy_Ox@S%I# zJ*?t5Mn#LI?RX4&_)x8hC}p>Y@-fvSJcjD8cuDBNA_CP}x`pwQc*(7F#J))kWQ~xW z2<-gVFw-@DAD|NhfO@epDd9sIt{9oo-DSG+kp3<2WrRznrxvd$?mZ@F<9Qh55d{I1 z!NGw=90x8VNcyP`Q@}gXl?`CD9*Z^}01}fIE0ZB+Kb0=SOWH@zQE(Xc%YYCzv&qW! zS~rcFu`M7Me1kg-AH@N|=&d5E(N*NfSuFohNFr8nQZTn)VDV~O>Y>LV25T^@pa<+M z4ZH_5X$B9avHe#BOO$9LFMa-SH!^rp#5s##Cye&EX)e=+*Z${| zKtVFi!k~H#R%Wz^1`n+Qt^GR{NNHMESMa80rf_28hh#J{-o{~k#@m!fObxw%8Xw1G zc^6~dYdpWlE9zi|d2&24hCS_lD#B4LGldiQUsXo8fKOogF9|}zk}QS~HtISW)oT(N zvvy;hH)>9158KaVsA`%NJ#ausGN<-H>Cia+Ukqkx93u=2^o|kQUxe^-8jnAG{CJ}* zUvS-e#I0lW_N7L6@;ly$7!ZJ7)}BUPsww%g0pLFWaq|g1n=94i_6bUE-!aM{)v*L+ z!P9p`EM7WPsHDYEXsC{!JKr9Y(c9;|p1SYm`a$3`Az)Cm5NhFZ_`zsSs^%%`{g%ad z>1z?Go+H5R9S?i{pTV1{N0?%yLQL+wZVC44tO4P8!dHwP8k0jDFo_6T;12?l?^~N< zpOnMLu)Pif{)Gt8UQEI1#2jya&|2?p^Ihb$5YU!IJdiViEiOHp9^ae&aBF&FO4a|4!3}wMvgm1 z&QMLs~C1xwggXRHS z(T*IUCdToela2__Cpv3Hq*JCZFnycz0{O%7q1#wAh67o>vPP2KryU9gm%Sw}b4G8e zr~keZLyp%vl4kR{AN(x+Jw}UdH>cXxU#>{%tF&%gjv({Ehw4#Cq`a^up^@i{u9i$y zmQ5$K+L{vSuJyu>jijk@y!>Prfk8B7I;?X0X8q;k@sBVk_#dL4RdOIx))@jPrHrsQ z{;!{xq%oEYV=nfXAswp)!_~eLsc)zzrEqk?9w`TUKN>*rRBNOl%{vyt<0Wa0<$^{> z|5;T4f+{wiDK&T#z`tZL(>jvIw`T(kd%lx`lftE3TozUeIpX@}Q_Z7#k`;&fL~oXm zv_XZfFn9sGT81hty|Cga+q<7+w^8iY^l{gZijN|}Ozxy8X@aNfhUDl_I}){I>8?!- zzJQTHeY8Z#v38r;Ytp^n5MhdST%?H@PRfEwvcHE#uell0Q3t?bla_6Ga&1wsgXt8z z-b`LO7V1hqFiVUiJc}T2MMFz}${b(B@Nzmu84OB4djTBcc;cWWa3=;dRByAGBpITvI`lfH$)H}1powb4uR5}e-g1oFjvpI>c(D5ghktET^@;)ox zl^|wj?%Q9Ygr?UrvC!O|)A&M5M|3y|J89(OCq`nc4f~ zjxya^x&|$N+Ghc5526Qv+bw>h{G*7L_6JGIl~Wtit6igi8M5(aybr5U1^rAlBRAWW z0zTIwn1S9e|4+18hdDP=a44Du&TP2;(|q&-By61(G*pAuOUDSvoo5$0wVuVLccV@2Cq7qt*d@TpjC%ZHOt6a#(S@BXxclxRGJbWYRz%t z@lf#S>02Fz2LT$5KIvsG!($!qJLKC@JsjcJY~!Hw zmpP5L#CyTl_9|TS?*h2?gTH&oB2jy;y$-lZr@Z84 zaD|Ror|pgj-%jkX3hhO}eOq%0GvDWY6UvPKKGI=RI@VCuRcib>AB#hIqA5bOxu)9# z7BnY>(IN!`EZtvH@S*3lG|%^6i_z_OdjfM_bxH&Qr6My6D8GEsjCqJ-_kolTEp5O4 z#gm?r8CmYeGKWrk8}=#UK9mvBNh8W3KiO*Oh)a0uvPC|(pYiHBFdL#_kypJ(oyQZ` zlUb#D#yl$$!-rxtskRMr?Asg|lO*M(Ak(0 zVZ<3~QsSVW>v!YP&nL}dw@PF_!tbZ&4>F_`=O-O4DKa+h=+`;$V9+6U{S)pIujCyWDkzC z{q($o4% zj1j%;Zo zHT9L@0|f>K{`kXLfCdT)5)CYL%|FJ_aFXO!+Mu9*qANmR*;`*W(linAh_!BZGONA1 zk4d>f$sjbf3#gfp@2LGsJ1YZ&erCu!jPd)1 z6S8%0TJx?NyCvRUaci|SFQs|w^gBP@v`Wo5GjFm_md@xxW z_q2Zy9Qiyu2NnsYxJh|3Yp})0Ov2YiQm?{mx|Bl)p0JX@5(8Sz&on~hC&N_#QCyuN zGta`zx$kiqm4Q0tnGJ=I2KEs4`sG9{^b4#S>H~$5)g%AyN!Dk;SiyhYVXj_9EmG+N zLg;L5Fm7RZUvpg=K1zE3%O7Bsh`42m437ixj z6wgwfHpb#|b@A=^1H01DAIzsgx`Mx16Jz7(n^SJy7pFrfNe^>>5JSCIZUXb;9F&Rx zA`yF{3jnxWrgtU8lq1A&(hgj(J1O*Zb1H=^$ju*feCc}aQ5n~$?Og&bXR>%(659bV z_?1m8Q`5@1F5ZtC=~*`EwgpLK>o)Q$_?|T)Kz84#r7q{PpzvThJ90Mk+2MdT%d+hH zlV(4)wk6^&kfs+IpgTd3#H*=7X&&P>Cq8rs{|9X8AS;@Zrw-z6JA>s+|N2sZ0u*j31l;h_B{$WvYa~>hCVFzPX81; zSGn>HPT)8OO*7NwL33lGkH><00dDZKApf8doGqrn?NqhvZxAmTnG_N-t2O5quD@1= z+mKNNG;sg1BD}E*Kuyu)3d`QpZy~Qs>l`K?$II{Ztn#DdJzK3cl=eehGBZS;;<|m8 z)ky5OA+yr)5mBowS;0fi-5rP7AJRhPQv z$5R0^qYl~%Xx3U&hNqOcpE17pBg}~S>ppCzkdQ$zrA|D-Tmd%); zS-diZ(M2@ot`xOgBlI48X4-0*1|(ECCjy6xBw(}-3ZRc7BvmrlsaAb!^6xx$L-sDp z?{;U$@QEy)97fquOKzf9s%v`{#uN!|bH-xaZ~6ege))WEuFh8-EXgOF*-_jwc;{h> zP9aW`uT{WKz?vyn>%(#}e)rI2KcG~fSA#xJo<%8?>-<(XU?;W&Q)qI zh(||`$Lw;Iol6#;c>=f>pGg74{r=>{g05(?nJWDQC4Pn3_;%FG*V5CMd1^ej4CLl@ z8bvELy?XlL(8r&#W0E*ox|~@bFxpef=3;tTP7BCSzZrlhXfA4_lp~#KJ`qn0EmXmJ zD`+fPb~0b>KBL|7IMRfT+MO|$k5_DZdTub+B(b4zq&OH3TQ*HVA37_N!V+!`=^ z4_P#_URKc&9NAUb+x_O~W^55ib!%*FzuRy>Xd+&MYepJV_WEj(#%&s}(qt4{_ zrm|=s-Q_)dQg>G6SQ)ji%hdq?16T;S_sT9zZg{F~@81%Tq>|GV7=y?SDs_GaXY$ei qoJCU2^F#RItls}!|6>H~(#|ZeDRjBGwo9KpGzKbzUezjEMgBkAwP~;b literal 0 HcmV?d00001 diff --git a/src/BlazorApp2/wwwroot/manifest.json b/src/BlazorApp2/wwwroot/manifest.json new file mode 100644 index 00000000000..17a3f00a497 --- /dev/null +++ b/src/BlazorApp2/wwwroot/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "ThingsGateway", + "short_name": "ThingsGateway", + "start_url": "./", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#03173d", + "prefer_related_applications": false, + "icons": [ + { + "src": "favicon.png", + "type": "image/png", + "sizes": "256x256" + }, + { + "src": "favicon.ico", + "type": "image/ico", + "sizes": "128x128" + } + ] +} \ No newline at end of file diff --git a/src/BlazorApp2/wwwroot/service-worker.js b/src/BlazorApp2/wwwroot/service-worker.js new file mode 100644 index 00000000000..1ed99c22532 --- /dev/null +++ b/src/BlazorApp2/wwwroot/service-worker.js @@ -0,0 +1,4 @@ +// In development, always fetch from the network and do not enable offline support. +// This is because caching would make development more difficult (changes would not +// be reflected on the first load after each change). +self.addEventListener('fetch', () => { }); \ No newline at end of file diff --git a/src/BlazorApp2/wwwroot/service-worker.published.js b/src/BlazorApp2/wwwroot/service-worker.published.js new file mode 100644 index 00000000000..db062b306fc --- /dev/null +++ b/src/BlazorApp2/wwwroot/service-worker.published.js @@ -0,0 +1,48 @@ +// Caution! Be sure you understand the caveats before publishing an application with +// offline support. See https://aka.ms/blazor-offline-considerations + +self.importScripts('./service-worker-assets.js'); +self.addEventListener('install', event => event.waitUntil(onInstall(event))); +self.addEventListener('activate', event => event.waitUntil(onActivate(event))); +self.addEventListener('fetch', event => event.respondWith(onFetch(event))); + +const cacheNamePrefix = 'offline-cache-'; +const cacheName = `${cacheNamePrefix}${self.assetsManifest.version}`; +const offlineAssetsInclude = [/\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/]; +const offlineAssetsExclude = [/^service-worker\.js$/]; + +async function onInstall(event) { + console.info('Service worker: Install'); + + // Fetch and cache all matching items from the assets manifest + const assetsRequests = self.assetsManifest.assets + .filter(asset => offlineAssetsInclude.some(pattern => pattern.test(asset.url))) + .filter(asset => !offlineAssetsExclude.some(pattern => pattern.test(asset.url))) + .map(asset => new Request(asset.url, { integrity: asset.hash, cache: 'no-cache' })); + await caches.open(cacheName).then(cache => cache.addAll(assetsRequests)); +} + +async function onActivate(event) { + console.info('Service worker: Activate'); + + // Delete unused caches + const cacheKeys = await caches.keys(); + await Promise.all(cacheKeys + .filter(key => key.startsWith(cacheNamePrefix) && key !== cacheName) + .map(key => caches.delete(key))); +} + +async function onFetch(event) { + let cachedResponse = null; + if (event.request.method === 'GET') { + // For all navigation requests, try to serve index.html from cache + // If you need some URLs to be server-rendered, edit the following check to exclude those URLs + const shouldServeIndexHtml = event.request.mode === 'navigate'; + + const request = shouldServeIndexHtml ? 'index.html' : event.request; + const cache = await caches.open(cacheName); + cachedResponse = await cache.match(request); + } + + return cachedResponse || fetch(event.request); +} \ No newline at end of file From c8f724b5373b6b9b3b0de3afe76d945195bf6e48 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 16 Oct 2024 12:07:47 +0800 Subject: [PATCH 03/12] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Layout/Layout.razor.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Layout/Layout.razor.cs b/src/BootstrapBlazor/Components/Layout/Layout.razor.cs index c38bbb4bbdf..4388d81e7f5 100644 --- a/src/BootstrapBlazor/Components/Layout/Layout.razor.cs +++ b/src/BootstrapBlazor/Components/Layout/Layout.razor.cs @@ -104,8 +104,9 @@ public partial class Layout : IHandlerException public bool IsFullSide { get; set; } /// - /// 获得/设置 是否为正页面布局 默认为 false + /// 获得/设置 是否为整页面布局 默认为 false /// + /// 为真时增加 is-page 样式 [Parameter] public bool IsPage { get; set; } From 97fc831146aaeb4c526dcf8814b72cacab439516 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 16 Oct 2024 12:18:52 +0800 Subject: [PATCH 04/12] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Tab/Tab.razor.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs index 373b51764d6..ff198ddadc9 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs @@ -1,9 +1,8 @@ -// Copyright (c) Argo Zhang (argo@163.com). All rights reserved. +// Copyright (c) Argo Zhang (argo@live.ca). All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Website: https://www.blazor.zone or https://argozhang.github.io/ using Microsoft.Extensions.Localization; - using System.Collections.Concurrent; using System.Reflection; From fd58e4a900b124c7a20c074e153a5090bd97d995 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 16 Oct 2024 12:19:00 +0800 Subject: [PATCH 05/12] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Tab/Tab.razor.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs index ff198ddadc9..feaf18779ea 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs @@ -594,13 +594,6 @@ private void AddTabItem(string url) // TabItemOptionAttribute SetTabItemParameters(option.Text, option.Icon, option.Closable, true); } - - else if (Layout != null) - { - // CascadeParameter Menus - var menu = GetMenuItem(url); - SetTabItemParameters(menu?.Text, menu?.Icon, true, true); - } else if (Options.Valid()) { // TabItemTextOptions @@ -609,6 +602,11 @@ private void AddTabItem(string url) } else { + var menu = GetMenuItem(url); + if (menu != null) + { + SetTabItemParameters(menu.Text, menu.Icon, true, true); + } parameters.Add(nameof(TabItem.Text), url.Split("/").FirstOrDefault()); } parameters.Add(nameof(TabItem.Url), url); From feabe50d12b69029f28d99a2dab43b73aa0a4ea4 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 16 Oct 2024 12:21:07 +0800 Subject: [PATCH 06/12] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Tab/Tab.razor.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs index feaf18779ea..7e869c523e1 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs @@ -607,7 +607,10 @@ private void AddTabItem(string url) { SetTabItemParameters(menu.Text, menu.Icon, true, true); } - parameters.Add(nameof(TabItem.Text), url.Split("/").FirstOrDefault()); + else + { + parameters.Add(nameof(TabItem.Text), url.Split("/").FirstOrDefault()); + } } parameters.Add(nameof(TabItem.Url), url); From 4a71e64573819f3c8ab77e6722e7a7fd612e5aab Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 16 Oct 2024 12:32:50 +0800 Subject: [PATCH 07/12] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Tab/Tab.razor.cs | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs index 7e869c523e1..ab7baf093f6 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs @@ -602,15 +602,8 @@ private void AddTabItem(string url) } else { - var menu = GetMenuItem(url); - if (menu != null) - { - SetTabItemParameters(menu.Text, menu.Icon, true, true); - } - else - { - parameters.Add(nameof(TabItem.Text), url.Split("/").FirstOrDefault()); - } + var menu = GetMenuItem(url) ?? new MenuItem() { Text = url.Split("/").FirstOrDefault() }; + SetTabItemParameters(menu.Text, menu.Icon, true, true); } parameters.Add(nameof(TabItem.Url), url); From 085985c6114511865207435bd802fb938f310db0 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 16 Oct 2024 12:51:35 +0800 Subject: [PATCH 08/12] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E9=A1=B5=E6=97=B6=E6=B8=85=E7=A9=BA=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Tab/Tab.razor.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs index ab7baf093f6..5c4d179c703 100644 --- a/src/BootstrapBlazor/Components/Tab/Tab.razor.cs +++ b/src/BootstrapBlazor/Components/Tab/Tab.razor.cs @@ -674,6 +674,8 @@ private void AddTabItem(Dictionary parameters, int? index = nul /// public async Task RemoveTab(TabItem item) { + Options.Reset(); + if (OnCloseTabItemAsync != null && !await OnCloseTabItemAsync(item)) { return; From c72d510ae41ebf4997765f0670b9214cc8d3c041 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 16 Oct 2024 12:51:45 +0800 Subject: [PATCH 09/12] =?UTF-8?q?test:=20=E6=9B=B4=E6=96=B0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TabTest.cs | 34 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/test/UnitTest/Components/TabTest.cs b/test/UnitTest/Components/TabTest.cs index d444cf44c92..c8633182e3a 100644 --- a/test/UnitTest/Components/TabTest.cs +++ b/test/UnitTest/Components/TabTest.cs @@ -261,7 +261,7 @@ await cut.InvokeAsync(() => tab.AddTab(new Dictionary } [Fact] - public void AddTabByUrl_Ok() + public async Task AddTabByUrl_Ok() { var navMan = Context.Services.GetRequiredService(); navMan.NavigateTo("/"); @@ -290,7 +290,7 @@ public void AddTabByUrl_Ok() }); navMan.NavigateTo("/"); - cut.InvokeAsync(() => cut.Instance.AddTab(new Dictionary + await cut.InvokeAsync(() => cut.Instance.AddTab(new Dictionary { ["Text"] = "Cat", ["Url"] = "Cat" @@ -299,10 +299,10 @@ public void AddTabByUrl_Ok() { pb.Add(a => a.ExcludeUrls, ["/Test"]); }); - cut.InvokeAsync(() => cut.Instance.CloseCurrentTab()); + await cut.InvokeAsync(() => cut.Instance.CloseCurrentTab()); // AddTab - cut.InvokeAsync(() => cut.Instance.AddTab(new Dictionary + await cut.InvokeAsync(() => cut.Instance.AddTab(new Dictionary { ["Text"] = "Cat", ["Url"] = null, @@ -314,14 +314,16 @@ public void AddTabByUrl_Ok() Assert.NotNull(item); Assert.Equal("", item.Url); - cut.InvokeAsync(() => cut.Instance.RemoveTab(item!)); + await cut.InvokeAsync(() => cut.Instance.RemoveTab(item!)); item = cut.Instance.GetActiveTab(); Assert.NotNull(item); Assert.Equal("Cat", item.Url); - cut.InvokeAsync(() => cut.Instance.RemoveTab(item!)); + await cut.InvokeAsync(() => cut.Instance.RemoveTab(item!)); item = cut.Instance.GetActiveTab(); Assert.Null(item); + + await cut.InvokeAsync(() => cut.Instance.CloseCurrentTab()); } [Fact] @@ -534,26 +536,24 @@ public void AlwaysLoad_Ok() } [Fact] - public void ActiveTab_Ok() + public async Task ActiveTab_Ok() { var cut = Context.RenderComponent(pb => { pb.Add(a => a.AdditionalAssemblies, new Assembly[] { GetType().Assembly }); pb.Add(a => a.DefaultUrl, "/"); }); - cut.InvokeAsync(() => cut.Instance.ActiveTab(0)); + await cut.InvokeAsync(() => cut.Instance.ActiveTab(0)); + var item = cut.Instance.GetActiveTab(); Assert.NotNull(item); - cut.InvokeAsync(() => - { - if (item != null) - { - cut.Instance.ActiveTab(item); - } - }); - cut.InvokeAsync(() => cut.Instance.RemoveTab(item!)); + + await cut.InvokeAsync(() => cut.Instance.ActiveTab(item)); + + // 移除标签导航到默认标签 + await cut.InvokeAsync(() => cut.Instance.RemoveTab(item!)); item = cut.Instance.GetActiveTab(); - Assert.Null(item); + Assert.NotNull(item); } [Fact] From 77aead2290f77c531a582197815ac76d6e286ee5 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Wed, 16 Oct 2024 13:31:36 +0800 Subject: [PATCH 10/12] =?UTF-8?q?test:=20=E6=9B=B4=E6=96=B0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTestDocs/MenuTest.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/test/UnitTestDocs/MenuTest.cs b/test/UnitTestDocs/MenuTest.cs index 65c591840cd..1238dbffef4 100644 --- a/test/UnitTestDocs/MenuTest.cs +++ b/test/UnitTestDocs/MenuTest.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Website: https://www.blazor.zone or https://argozhang.github.io/ -using BootstrapBlazor.Localization.Json; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -13,9 +12,9 @@ namespace UnitTestDocs; public partial class MenuTest { - private ITestOutputHelper _logger; - private IServiceProvider _serviceProvider; - private IEnumerable _routerTable; + private readonly ITestOutputHelper _logger; + private readonly IServiceProvider _serviceProvider; + private readonly IEnumerable _routerTable; public MenuTest(ITestOutputHelper logger) { @@ -149,7 +148,7 @@ static string ReplacePayload(string payload, LocalizedString l) => payload static string RemoveBlockStatement(string payload, string removeString) { - var index = payload.IndexOf(removeString); + var index = payload.IndexOf(removeString, StringComparison.Ordinal); if (index > -1) { var end = payload.IndexOf("\n", index, StringComparison.OrdinalIgnoreCase); From 0b47364b6aa33c83befec887a69ce496508fe1f6 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Thu, 17 Oct 2024 19:46:44 +0800 Subject: [PATCH 11/12] =?UTF-8?q?chore:=20=E7=A7=BB=E9=99=A4=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BootstrapBlazor.sln | 9 +- src/BlazorApp2/BlazorApp2.csproj | 14 --- src/BlazorApp2/BlazorApp2.sln | 24 ---- src/BlazorApp2/Components/App.razor | 44 -------- .../Components/Layout/BaseLayout.razor | 12 -- .../Components/Layout/BaseLayout.razor.css | 0 .../Components/Layout/DefaultMenuService.cs | 38 ------- .../Components/Layout/MainLayout.razor | 27 ----- .../Components/Layout/MainLayout.razor.css | 0 .../Components/Layout/NavMenu.razor | 30 ----- .../Components/Layout/NavMenu.razor.css | 105 ------------------ src/BlazorApp2/Components/Pages/Counter.razor | 18 --- src/BlazorApp2/Components/Pages/Error.razor | 36 ------ src/BlazorApp2/Components/Pages/Home.razor | 7 -- src/BlazorApp2/Components/Pages/Weather.razor | 63 ----------- src/BlazorApp2/Components/Routes.razor | 6 - src/BlazorApp2/Components/_Imports.razor | 10 -- src/BlazorApp2/Program.cs | 60 ---------- src/BlazorApp2/Properties/launchSettings.json | 38 ------- src/BlazorApp2/appsettings.Development.json | 8 -- src/BlazorApp2/appsettings.json | 9 -- src/BlazorApp2/wwwroot/favicon.ico | Bin 4286 -> 0 bytes src/BlazorApp2/wwwroot/favicon.png | Bin 10516 -> 0 bytes src/BlazorApp2/wwwroot/manifest.json | 21 ---- src/BlazorApp2/wwwroot/service-worker.js | 4 - .../wwwroot/service-worker.published.js | 48 -------- 26 files changed, 1 insertion(+), 630 deletions(-) delete mode 100644 src/BlazorApp2/BlazorApp2.csproj delete mode 100644 src/BlazorApp2/BlazorApp2.sln delete mode 100644 src/BlazorApp2/Components/App.razor delete mode 100644 src/BlazorApp2/Components/Layout/BaseLayout.razor delete mode 100644 src/BlazorApp2/Components/Layout/BaseLayout.razor.css delete mode 100644 src/BlazorApp2/Components/Layout/DefaultMenuService.cs delete mode 100644 src/BlazorApp2/Components/Layout/MainLayout.razor delete mode 100644 src/BlazorApp2/Components/Layout/MainLayout.razor.css delete mode 100644 src/BlazorApp2/Components/Layout/NavMenu.razor delete mode 100644 src/BlazorApp2/Components/Layout/NavMenu.razor.css delete mode 100644 src/BlazorApp2/Components/Pages/Counter.razor delete mode 100644 src/BlazorApp2/Components/Pages/Error.razor delete mode 100644 src/BlazorApp2/Components/Pages/Home.razor delete mode 100644 src/BlazorApp2/Components/Pages/Weather.razor delete mode 100644 src/BlazorApp2/Components/Routes.razor delete mode 100644 src/BlazorApp2/Components/_Imports.razor delete mode 100644 src/BlazorApp2/Program.cs delete mode 100644 src/BlazorApp2/Properties/launchSettings.json delete mode 100644 src/BlazorApp2/appsettings.Development.json delete mode 100644 src/BlazorApp2/appsettings.json delete mode 100644 src/BlazorApp2/wwwroot/favicon.ico delete mode 100644 src/BlazorApp2/wwwroot/favicon.png delete mode 100644 src/BlazorApp2/wwwroot/manifest.json delete mode 100644 src/BlazorApp2/wwwroot/service-worker.js delete mode 100644 src/BlazorApp2/wwwroot/service-worker.published.js diff --git a/BootstrapBlazor.sln b/BootstrapBlazor.sln index 094a6371622..d2364ee6318 100644 --- a/BootstrapBlazor.sln +++ b/BootstrapBlazor.sln @@ -1,6 +1,6 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# 17 +# Visual Studio Version 17 VisualStudioVersion = 17.0.31912.275 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BootstrapBlazor", "src\BootstrapBlazor\BootstrapBlazor.csproj", "{D0AE3016-4878-4807-A04C-C33CBEC7B092}" @@ -60,8 +60,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "configuration", "configurat EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniTestSvgIcon", "test\UniTestSvgIcon\UniTestSvgIcon.csproj", "{01DA4687-0973-4CA6-97F5-04E0B8DD1B13}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorApp2", "src\BlazorApp2\BlazorApp2.csproj", "{1CD48339-62C1-4187-860C-9C4B91ED85D2}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -96,10 +94,6 @@ Global {01DA4687-0973-4CA6-97F5-04E0B8DD1B13}.Debug|Any CPU.Build.0 = Debug|Any CPU {01DA4687-0973-4CA6-97F5-04E0B8DD1B13}.Release|Any CPU.ActiveCfg = Release|Any CPU {01DA4687-0973-4CA6-97F5-04E0B8DD1B13}.Release|Any CPU.Build.0 = Release|Any CPU - {1CD48339-62C1-4187-860C-9C4B91ED85D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1CD48339-62C1-4187-860C-9C4B91ED85D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1CD48339-62C1-4187-860C-9C4B91ED85D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1CD48339-62C1-4187-860C-9C4B91ED85D2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -115,7 +109,6 @@ Global {6D73FED6-0086-460B-84FA-1FA78176BF59} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD} {D8AEAFE7-10AF-4A5B-BC67-FE740A2CA1DF} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD} {01DA4687-0973-4CA6-97F5-04E0B8DD1B13} = {7C1D79F1-87BC-42C1-BD5A-CDE4044AC1BD} - {1CD48339-62C1-4187-860C-9C4B91ED85D2} = {A2182155-43ED-44C1-BF6F-1B70EBD2DFFE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0DCB0756-34FA-4FD0-AE1D-D3F08B5B3A6B} diff --git a/src/BlazorApp2/BlazorApp2.csproj b/src/BlazorApp2/BlazorApp2.csproj deleted file mode 100644 index 559351298ab..00000000000 --- a/src/BlazorApp2/BlazorApp2.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - net8.0 - enable - enable - - - - - - - - diff --git a/src/BlazorApp2/BlazorApp2.sln b/src/BlazorApp2/BlazorApp2.sln deleted file mode 100644 index 7850b9c7cbd..00000000000 --- a/src/BlazorApp2/BlazorApp2.sln +++ /dev/null @@ -1,24 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# 17 -VisualStudioVersion = 17.11.35327.3 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlazorApp2", "BlazorApp2\BlazorApp2.csproj", "{3145BDB6-7801-4480-A930-21A9B137621F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3145BDB6-7801-4480-A930-21A9B137621F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3145BDB6-7801-4480-A930-21A9B137621F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3145BDB6-7801-4480-A930-21A9B137621F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3145BDB6-7801-4480-A930-21A9B137621F}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {7C3BA4BF-6B7D-4098-973A-CA79826B29DB} - EndGlobalSection -EndGlobal diff --git a/src/BlazorApp2/Components/App.razor b/src/BlazorApp2/Components/App.razor deleted file mode 100644 index 246d0777ea3..00000000000 --- a/src/BlazorApp2/Components/App.razor +++ /dev/null @@ -1,44 +0,0 @@ -@using BootstrapBlazor.Components -@using Microsoft.AspNetCore.Components.Web -@using Microsoft.Extensions.Localization -@using ThingsGateway.Razor -@inject IHostEnvironment Env -@inject IStringLocalizer Localizer -@namespace ThingsGateway - - - - - - - - - - - - - - - - ThingsGateway - - - - - @* *@ - - - - - - - - - - - - - - - - diff --git a/src/BlazorApp2/Components/Layout/BaseLayout.razor b/src/BlazorApp2/Components/Layout/BaseLayout.razor deleted file mode 100644 index 5576f264d4d..00000000000 --- a/src/BlazorApp2/Components/Layout/BaseLayout.razor +++ /dev/null @@ -1,12 +0,0 @@ -@inherits LayoutComponentBase -@using BootstrapBlazor.Components -@namespace ThingsGateway.Razor - -@* BB根组件 *@ - - @Body - - - - - diff --git a/src/BlazorApp2/Components/Layout/BaseLayout.razor.css b/src/BlazorApp2/Components/Layout/BaseLayout.razor.css deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/BlazorApp2/Components/Layout/DefaultMenuService.cs b/src/BlazorApp2/Components/Layout/DefaultMenuService.cs deleted file mode 100644 index 455f9fd5eaa..00000000000 --- a/src/BlazorApp2/Components/Layout/DefaultMenuService.cs +++ /dev/null @@ -1,38 +0,0 @@ -//------------------------------------------------------------------------------ -// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -//------------------------------------------------------------------------------ - -using BootstrapBlazor.Components; - -namespace ThingsGateway.Razor; - -/// -public interface IMenuService -{ - /// - public IEnumerable? MenuItems { get; } - -} - -public class DefaultMenuService : IMenuService -{ - - public IEnumerable? MenuItems => new List() { - - new MenuItem("home","/"), - new MenuItem("counter","/counter"), - new MenuItem("error","/error"), - new MenuItem("weather","/weather"), - - - - }; - - -} diff --git a/src/BlazorApp2/Components/Layout/MainLayout.razor b/src/BlazorApp2/Components/Layout/MainLayout.razor deleted file mode 100644 index c2a49c232f8..00000000000 --- a/src/BlazorApp2/Components/Layout/MainLayout.razor +++ /dev/null @@ -1,27 +0,0 @@ -@using BootstrapBlazor.Components -@using System.Diagnostics.CodeAnalysis -@using ThingsGateway.Razor -@inherits BaseLayout - - - - -
- - - -
-
- - - - -@code{ - [Inject] - [NotNull] - private IMenuService? MenuService { get; set; } -} \ No newline at end of file diff --git a/src/BlazorApp2/Components/Layout/MainLayout.razor.css b/src/BlazorApp2/Components/Layout/MainLayout.razor.css deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/BlazorApp2/Components/Layout/NavMenu.razor b/src/BlazorApp2/Components/Layout/NavMenu.razor deleted file mode 100644 index 1adcc76a106..00000000000 --- a/src/BlazorApp2/Components/Layout/NavMenu.razor +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - diff --git a/src/BlazorApp2/Components/Layout/NavMenu.razor.css b/src/BlazorApp2/Components/Layout/NavMenu.razor.css deleted file mode 100644 index 4e15395e091..00000000000 --- a/src/BlazorApp2/Components/Layout/NavMenu.razor.css +++ /dev/null @@ -1,105 +0,0 @@ -.navbar-toggler { - appearance: none; - cursor: pointer; - width: 3.5rem; - height: 2.5rem; - color: white; - position: absolute; - top: 0.5rem; - right: 1rem; - border: 1px solid rgba(255, 255, 255, 0.1); - background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1); -} - -.navbar-toggler:checked { - background-color: rgba(255, 255, 255, 0.5); -} - -.top-row { - height: 3.5rem; - background-color: rgba(0,0,0,0.4); -} - -.navbar-brand { - font-size: 1.1rem; -} - -.bi { - display: inline-block; - position: relative; - width: 1.25rem; - height: 1.25rem; - margin-right: 0.75rem; - top: -1px; - background-size: cover; -} - -.bi-house-door-fill-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); -} - -.bi-plus-square-fill-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); -} - -.bi-list-nested-nav-menu { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); -} - -.nav-item { - font-size: 0.9rem; - padding-bottom: 0.5rem; -} - - .nav-item:first-of-type { - padding-top: 1rem; - } - - .nav-item:last-of-type { - padding-bottom: 1rem; - } - - .nav-item ::deep .nav-link { - color: #d7d7d7; - background: none; - border: none; - border-radius: 4px; - height: 3rem; - display: flex; - align-items: center; - line-height: 3rem; - width: 100%; - } - -.nav-item ::deep a.active { - background-color: rgba(255,255,255,0.37); - color: white; -} - -.nav-item ::deep .nav-link:hover { - background-color: rgba(255,255,255,0.1); - color: white; -} - -.nav-scrollable { - display: none; -} - -.navbar-toggler:checked ~ .nav-scrollable { - display: block; -} - -@media (min-width: 641px) { - .navbar-toggler { - display: none; - } - - .nav-scrollable { - /* Never collapse the sidebar for wide screens */ - display: block; - - /* Allow sidebar to scroll for tall menus */ - height: calc(100vh - 3.5rem); - overflow-y: auto; - } -} diff --git a/src/BlazorApp2/Components/Pages/Counter.razor b/src/BlazorApp2/Components/Pages/Counter.razor deleted file mode 100644 index ef23cb31607..00000000000 --- a/src/BlazorApp2/Components/Pages/Counter.razor +++ /dev/null @@ -1,18 +0,0 @@ -@page "/counter" - -Counter - -

Counter

- -

Current count: @currentCount

- - - -@code { - private int currentCount = 0; - - private void IncrementCount() - { - currentCount++; - } -} diff --git a/src/BlazorApp2/Components/Pages/Error.razor b/src/BlazorApp2/Components/Pages/Error.razor deleted file mode 100644 index 576cc2d2f4d..00000000000 --- a/src/BlazorApp2/Components/Pages/Error.razor +++ /dev/null @@ -1,36 +0,0 @@ -@page "/Error" -@using System.Diagnostics - -Error - -

Error.

-

An error occurred while processing your request.

- -@if (ShowRequestId) -{ -

- Request ID: @RequestId -

-} - -

Development Mode

-

- Swapping to Development environment will display more detailed information about the error that occurred. -

-

- The Development environment shouldn't be enabled for deployed applications. - It can result in displaying sensitive information from exceptions to end users. - For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development - and restarting the app. -

- -@code{ - [CascadingParameter] - private HttpContext? HttpContext { get; set; } - - private string? RequestId { get; set; } - private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); - - protected override void OnInitialized() => - RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; -} diff --git a/src/BlazorApp2/Components/Pages/Home.razor b/src/BlazorApp2/Components/Pages/Home.razor deleted file mode 100644 index 9001e0bd272..00000000000 --- a/src/BlazorApp2/Components/Pages/Home.razor +++ /dev/null @@ -1,7 +0,0 @@ -@page "/" - -Home - -

Hello, world!

- -Welcome to your new app. diff --git a/src/BlazorApp2/Components/Pages/Weather.razor b/src/BlazorApp2/Components/Pages/Weather.razor deleted file mode 100644 index 8eca4cc443f..00000000000 --- a/src/BlazorApp2/Components/Pages/Weather.razor +++ /dev/null @@ -1,63 +0,0 @@ -@page "/weather" - -Weather - -

Weather

- -

This component demonstrates showing data.

- -@if (forecasts == null) -{ -

Loading...

-} -else -{ - - - - - - - - - - - @foreach (var forecast in forecasts) - { - - - - - - - } - -
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
-} - -@code { - private WeatherForecast[]? forecasts; - - protected override async Task OnInitializedAsync() - { - // Simulate asynchronous loading to demonstrate a loading indicator - await Task.Delay(500); - - var startDate = DateOnly.FromDateTime(DateTime.Now); - var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; - forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = startDate.AddDays(index), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = summaries[Random.Shared.Next(summaries.Length)] - }).ToArray(); - } - - private class WeatherForecast - { - public DateOnly Date { get; set; } - public int TemperatureC { get; set; } - public string? Summary { get; set; } - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - } -} diff --git a/src/BlazorApp2/Components/Routes.razor b/src/BlazorApp2/Components/Routes.razor deleted file mode 100644 index f756e19dfbc..00000000000 --- a/src/BlazorApp2/Components/Routes.razor +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/src/BlazorApp2/Components/_Imports.razor b/src/BlazorApp2/Components/_Imports.razor deleted file mode 100644 index 391bcbf17d0..00000000000 --- a/src/BlazorApp2/Components/_Imports.razor +++ /dev/null @@ -1,10 +0,0 @@ -@using System.Net.Http -@using System.Net.Http.Json -@using Microsoft.AspNetCore.Components.Forms -@using Microsoft.AspNetCore.Components.Routing -@using Microsoft.AspNetCore.Components.Web -@using static Microsoft.AspNetCore.Components.Web.RenderMode -@using Microsoft.AspNetCore.Components.Web.Virtualization -@using Microsoft.JSInterop -@using BlazorApp2 -@using BlazorApp2.Components diff --git a/src/BlazorApp2/Program.cs b/src/BlazorApp2/Program.cs deleted file mode 100644 index 19460a79d67..00000000000 --- a/src/BlazorApp2/Program.cs +++ /dev/null @@ -1,60 +0,0 @@ -using ThingsGateway; -using ThingsGateway.Razor; - -namespace BlazorApp2 -{ - public class Program - { - public static void Main(string[] args) - { - AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - - TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; - var builder = WebApplication.CreateBuilder(args); - - // Add services to the container. - builder.Services - .AddRazorComponents(options => - { - options.TemporaryRedirectionUrlValidityDuration = TimeSpan.FromMinutes(10); - }) - .AddInteractiveServerComponents(options => - { - options.RootComponents.MaxJSRootComponents = 500; - options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(2); - options.MaxBufferedUnacknowledgedRenderBatches = 20; - options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(10); - }); - builder.Services.AddBootstrapBlazor( - option => option.JSModuleVersion = Random.Shared.Next(10000).ToString() - ); - builder.Services.AddSingleton(); - var app = builder.Build(); - - // Configure the HTTP request pipeline. - if (!app.Environment.IsDevelopment()) - { - } - - app.UseHttpsRedirection(); - - app.UseStaticFiles(); - app.UseAntiforgery(); - - app.MapRazorComponents() - .AddInteractiveServerRenderMode(); - - app.Run(); - } - - private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - throw new NotImplementedException(); - } - - private static void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e) - { - Console.WriteLine(e.Exception.ToString()); - } - } -} diff --git a/src/BlazorApp2/Properties/launchSettings.json b/src/BlazorApp2/Properties/launchSettings.json deleted file mode 100644 index 584049f3c2f..00000000000 --- a/src/BlazorApp2/Properties/launchSettings.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:12757", - "sslPort": 44360 - } - }, - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "http://localhost:5083", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "https://localhost:7275;http://localhost:5083", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } - } diff --git a/src/BlazorApp2/appsettings.Development.json b/src/BlazorApp2/appsettings.Development.json deleted file mode 100644 index 0c208ae9181..00000000000 --- a/src/BlazorApp2/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/src/BlazorApp2/appsettings.json b/src/BlazorApp2/appsettings.json deleted file mode 100644 index 10f68b8c8b4..00000000000 --- a/src/BlazorApp2/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/src/BlazorApp2/wwwroot/favicon.ico b/src/BlazorApp2/wwwroot/favicon.ico deleted file mode 100644 index d5a4939b2856a1e50185862447921c074d959e6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeIzTZm0j9LMo}+>Xm|%(xSKLP$PLjO3G|UxfRVYxzsVo_qVNmENAvUb0&$0z4h^5d+q;P|FhPHuS6l1o zf2Vb{`G;UXp5cv&FNn9%gvGFjMYffP6jtB?3OEX_ z?YH%Fu3XuJFUVp!CSwWOq4B2>S+n$laxoNlpz(WAnika7eR_&6XwQRw#S_r@)9SDE zP%czo`xjc@LI(eqF2nu|KST%Z%Trx$VQ$a)}-I zj!mXdzd`Rp5@(?GUx2?iM0=XhwsN5T@2h?tIlAwku^RsRi8F8o@1go1(TXt$t!Z~E z2daM)8XvX(2CnJ3|Acx3_4WR2#V+hX6SP0NUv{a`wsN5T3+`=HeXUt*@5V}m&ez{g z&4Wtn>$~_CUy(+CONHiZ9;m+FsdD>2j_VIi&K6?me0_Cl9Q19|^D)SrtNt|<>zn>6 zqW>HbHRc?Ya|D{lFBi0l8?g<_4gD$V#{^u3zMneRH(lqY^$*Z@76YNY4bcAIMK$dD zBRS9Fy!wM{r9Z-4(=&SyC!zOuFfPNcKbG_RP>w$zQSbFdWez8 ze636G>`u%_@cwIW=ixBEVK?k`F5vtLUP15ORII^c=-adzQRVGksX~wYQ*KhKB{wmX@~Shg QmuPc46COI0O&jaHUIzs diff --git a/src/BlazorApp2/wwwroot/favicon.png b/src/BlazorApp2/wwwroot/favicon.png deleted file mode 100644 index e88c7d32ff6f1de228b8ee4ff2a3c75bd82626ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10516 zcmeHtz|iv! zzxOYAzC9nFv(~IN=j^)ob?*DR?!C`W&<3dx6Fwotz`!5|s=m_2z`%q*{O}*4pB&C! zeZ;_E#sI!jc;laUut4xV-!A0nWQiW^C7dqLj7dSEn5*+h0aJxnH6PmOJ55tPbD>+; z^tX6=5ALK>Yq2NKQv)+_uBb6km~c)f9O1)6V{uU64{P(d2EY^5=54cCgg}Ag|OOJWc@!zRo?MSLkMu4+ZZoDk< zrbF?jj~RB((~;Lp4B)}rC+9r3uMO4O3@7u!*}%4G)H8av?n5{M_}*-i0#)85ejoR@ zQU?V~SbWbq#^k{hICzIjrit<_8O!#woxf>zDjyqn5Th`0{qAyJHT`-(m4USLBsq;7 z6@+-{mgx!Qz&-XFUnoprvXQ)# zCrHiYCz78LYd1 zF^u7?uywa-}ufXkhNb9FF72UtiW$v3|QA z29(m9q_n6BZH1W5&*dFipR7GIqt!Sy**~(j$&ALhaS7pdS4<-D4Tt3r8MJ*p{0bXU z>hmG4^*s6>5Xu5C;N00*RFT`=x(Ls(9Nk~`x_J9cp%ouG?wbn%=t^_5?~vgcWpc@s zEVAr0clfvk#?Ayz)O|TWz2l?ByqE=9Szz&f8Z-;3038cDZug8;odgViFQjx$^Qpwa zf!j+LF!KI`4)^((wm8JhF3f2zuC^Lv+SeO0%XN$LTU32Uc#&^frn=dFly(mf!sLE! z?mq4CA0deM0!DgS1YR!t}Gq6(*rWO9J@>SsVJQKY`nvx(M^Xr5IUZ_!#XM=HBlP^ z*Mc`ebuR_-Wg?fK%mfG4Z!qV|xF%9+q=`MwsBg{y$^4pj2KpCu{ejI;g?W+QH2$j~ z5ceA9GHZg~?#e;(;Z>cL*^p}y62OGkuD=32|oAhP%4oU4zTROGc z<})cb@m>lp57mX>I?m2|e#>uf$gB!!u=Wv@5-G|2I@FOnfv6TGyJUT^K?;wxXlJH= zYSi>Qye}1Nk$b%MUkT+-yOJcRXm`ylHX_Hz7Udg?nG2O9a#&D^LNy-MC`?hzxeubURqWGPG4ePQ{!iY4JbtR-?xn;|R=(Xx2xA0%Nt_S|Bo zJ~hg{@+#vqz=-Mt8lhPWg?U$ER8gFa3}vAF46tohlqJc``?x0_Qw(Q@G+?-fTQ6^Y z#a%qbVtuhs1aI5z;xFF3sde#i3b9n#u`~sKt?6yhO#wrJAMNdZaoZ$E=y|Jr4^wOZ z;wTRGfr~+JP852WRyR9eQ+x@_oHIUPb35%!usrQuQHt@KfD9%P<$s$ju$y_rwub=A zdQAunlF=?RFE`T@;zcXh@Z#E>>duv5v^7N%TA;7U=F4jBy<-Dh$~nUV9(k=qPNj`i z;8e4Q2F9Pn^M`Fd0UjYcj<{rAiS9Fnl|Y#8(w5|6lig&fY65BoZ<$S5c4UBEN2eCF zz9(i|EqKY6(?=b>Oqy0-orarl;=qfC%Tj;8lE-cOopH_t+$G~|NpG=>a9J>%Sry*@ z_InvLiVMCk40G9QyKFVRV@v&AZepn$o-ZQ zm!B>U%Q{O1hyL4?aZc~Gsc1YLlUhuHSaKh?<<#MWDn>PS}@8?l{_d3h)nJW*r=Ia zcoeSk>fYTYPB2`n(lXRh8m~M$Xidnbe9R`jbaow&R1LK2wZJd|tb{S0jN5~+UuVbjmis(rvo^3zs0xtEX@9mlmP5TzZl z7gkXw(mOTi%=*i_6Jdp&_Qp~hOgPx zkk5+lm)Ko44iYT|=IP7-zK=?N6!`F+B4nb3gj@R%^P(G!y-y?X8wE-z)WHQL;N-Wn zhg9}2o)saCx31fFJ<`v_l}%dyxC>`!wMc1AM-N`2vb}$UzNut6$_f=5wOWoUgFFng z89E{<9O2uK#?99zHE0|s`X-c*u4)pEL5pGjkTv4jFSqG%1FCEpifkm8k_lUZ=*jWs_?k{(qny8~Mg`qj0ftiQ!2`0RH=Y}rf2 z&P~(y+u10KV_-O+>Mu;+O4_fP({n9TJaNE$LyOZ7Kj5wP49*rlpitNm*Xu=DMqpd(ZK9-OhbSp$1jWbq}PCIMr<@ zz(S#&xgqXN?z=0Z@s)vN_63VlMc@PoQsx`n$wIHcTY+_P2{Su{YuPpZr89x$R4_hFqZmQ8!8)k zl0a25GiBd52Gu#M`yW-R)hl<5k=A}m(m)30N({6$Dl>R{M$08mgg-$%-M~{{49toY z2pXwy31OU8Z>+Z1Sbt&_1fbF#R1(~WwUR{2 z4=yqbREd{ee;fVVU8gt*yL1uGGK8W0^C{W?#0nE^A4A=^p{q-xWag*q$k=MqKuJ^D7(1 zOjQ}SVQCqE!pvrL!Ss9#jp8`t|J%-MkjPOFb#C@Q>`+x{!7*Bh#x?7Dwlm+kh0!jw zcH|B3yOS)7;Z-V}AzQa_tRZW~g$uq4bm$?Cs|l4~Qax(?rg#o^CSvrJ`L?VBrixw~ zmuA~|V)1}9r1 zFOFKi`ErR_rdj>7_nX4j&A~-)DVfHh2V2wd!5e+C&ATqS7xljT3iQ>{0_G{07e+@b zJiSs!CA_xfrJzb-@w@Q2#3WC7O$tynu7E(s*%$mIOR+Zpz{)Cw?X`56{ZDuKi18mT z8#Go(pKS1#XgdULKj5ocx!M(!8n~C=InawG*>$X|2hR=iR?97W-KPp(`xGAp?Y! zq|p6N4z^#r-f^f_JtCeCM>$^a0I%p+VK8svI~#k?z-7ku#5?7d z&d8wC%i`}_d${__ChG@M`jiF4TtF$lUXQrDe3WsIGtEyzT1@Uh@jgrrD&-$)Ak3!n zZzjZL(^V#8hMQKVGsiM6D_xEZfg`#8L$(1jQCOH}tG|JFpqSZ&dqNWOxPm=()*7j$ zyUuF`uQ~LuA_5%a0F^59JXMKzFlNEmJqJ+#<61)Vs;S44l0&grad2AgHn&r>mmwt` zFW>TbK5or3{xwj*RaKqHv~c`~M0g`QJq5uYQlhwZLsJ)g*d#O_Q1>C|ItyvkL%&IL z9RnPG-W~fv5VbyKb5M)H=rx`Ad6@U*bN%}Q;s6sX;UAlQp*!zsGpQ>X6blXwRdW5D z{rxjqXMVY!(lmVWmE6~h@-F?{?(84TlA2qIeB9^1$Bh`O^UVEfOw=SZQE;We1DSjXq;jHT^lvuf`deC3K zHFfB{+wXYq6>EBw1gl|%5J*oUbVvg(D_>-JaVokF{b2AA@O8k$oyrM%vu=?i&@m2} zdBGP?6mdRc3+!V_jW_xUhx?CJY&i(`Df zmE$mQQp-!0@B)DyI=qRvju#=x4J3dSxx(s+Jm)_mq@+jm*6Pzx6+F&sJ{!;10M_Gz zNKb;J4gC!lEf>97OkaDkn*pcSA808m!~S{c@^siEDn6MNPs9i7LB<&`cCBehY3xS{ zbQ$@%li+4Yapnah1O~X6G!A3XGU~(Xm2<*Yu;p$5+|BgJmE$ZWk=CG|$-GqyJE^1NGyJ~35=J-6G1d-UGm8n;`QSRB!e@M_{Ne>-afYtI`-pm@rANP5 zN;EF3KSL=T_p~WBF3#3rGw`)!!Hc3NnH_2GsgdO&qdi|3R439)C%R?LCgmX|rdt7u znOjfmD8g(%7rG~TIiR}xF4-|Z;$ZQ%MPPg`y(6m5kfG;+7wENV$KPQu+RzvzqBcon z-IKOl>dwo1Uu=nnR==M4vWGUMQ;{{xGRgZwOR^PbM0C@7_1(8Tb->m=;n70pkGl3e z_6-HXPgHRjMC*GK@y3A${&W-zUOARC{@X~PJ$K0~EA%4%s@&t5N4k~I- zj}%LkzE%8Tq@0&ZhxLu(4WxQ|3e>z_1JU5oJwq`R7MxZ>z0|>J;d?x*)T0D`$xJT zckh@xc(fz{Wto^@d)kGAOi&RNh%+O<5&qZ4`!S z7z^~*x`n;#M8dtT=(i^YVH|iu-+GnANzW`0VgjdrMJrGHt2tE+&|Seafy_Ox@S%I# zJ*?t5Mn#LI?RX4&_)x8hC}p>Y@-fvSJcjD8cuDBNA_CP}x`pwQc*(7F#J))kWQ~xW z2<-gVFw-@DAD|NhfO@epDd9sIt{9oo-DSG+kp3<2WrRznrxvd$?mZ@F<9Qh55d{I1 z!NGw=90x8VNcyP`Q@}gXl?`CD9*Z^}01}fIE0ZB+Kb0=SOWH@zQE(Xc%YYCzv&qW! zS~rcFu`M7Me1kg-AH@N|=&d5E(N*NfSuFohNFr8nQZTn)VDV~O>Y>LV25T^@pa<+M z4ZH_5X$B9avHe#BOO$9LFMa-SH!^rp#5s##Cye&EX)e=+*Z${| zKtVFi!k~H#R%Wz^1`n+Qt^GR{NNHMESMa80rf_28hh#J{-o{~k#@m!fObxw%8Xw1G zc^6~dYdpWlE9zi|d2&24hCS_lD#B4LGldiQUsXo8fKOogF9|}zk}QS~HtISW)oT(N zvvy;hH)>9158KaVsA`%NJ#ausGN<-H>Cia+Ukqkx93u=2^o|kQUxe^-8jnAG{CJ}* zUvS-e#I0lW_N7L6@;ly$7!ZJ7)}BUPsww%g0pLFWaq|g1n=94i_6bUE-!aM{)v*L+ z!P9p`EM7WPsHDYEXsC{!JKr9Y(c9;|p1SYm`a$3`Az)Cm5NhFZ_`zsSs^%%`{g%ad z>1z?Go+H5R9S?i{pTV1{N0?%yLQL+wZVC44tO4P8!dHwP8k0jDFo_6T;12?l?^~N< zpOnMLu)Pif{)Gt8UQEI1#2jya&|2?p^Ihb$5YU!IJdiViEiOHp9^ae&aBF&FO4a|4!3}wMvgm1 z&QMLs~C1xwggXRHS z(T*IUCdToela2__Cpv3Hq*JCZFnycz0{O%7q1#wAh67o>vPP2KryU9gm%Sw}b4G8e zr~keZLyp%vl4kR{AN(x+Jw}UdH>cXxU#>{%tF&%gjv({Ehw4#Cq`a^up^@i{u9i$y zmQ5$K+L{vSuJyu>jijk@y!>Prfk8B7I;?X0X8q;k@sBVk_#dL4RdOIx))@jPrHrsQ z{;!{xq%oEYV=nfXAswp)!_~eLsc)zzrEqk?9w`TUKN>*rRBNOl%{vyt<0Wa0<$^{> z|5;T4f+{wiDK&T#z`tZL(>jvIw`T(kd%lx`lftE3TozUeIpX@}Q_Z7#k`;&fL~oXm zv_XZfFn9sGT81hty|Cga+q<7+w^8iY^l{gZijN|}Ozxy8X@aNfhUDl_I}){I>8?!- zzJQTHeY8Z#v38r;Ytp^n5MhdST%?H@PRfEwvcHE#uell0Q3t?bla_6Ga&1wsgXt8z z-b`LO7V1hqFiVUiJc}T2MMFz}${b(B@Nzmu84OB4djTBcc;cWWa3=;dRByAGBpITvI`lfH$)H}1powb4uR5}e-g1oFjvpI>c(D5ghktET^@;)ox zl^|wj?%Q9Ygr?UrvC!O|)A&M5M|3y|J89(OCq`nc4f~ zjxya^x&|$N+Ghc5526Qv+bw>h{G*7L_6JGIl~Wtit6igi8M5(aybr5U1^rAlBRAWW z0zTIwn1S9e|4+18hdDP=a44Du&TP2;(|q&-By61(G*pAuOUDSvoo5$0wVuVLccV@2Cq7qt*d@TpjC%ZHOt6a#(S@BXxclxRGJbWYRz%t z@lf#S>02Fz2LT$5KIvsG!($!qJLKC@JsjcJY~!Hw zmpP5L#CyTl_9|TS?*h2?gTH&oB2jy;y$-lZr@Z84 zaD|Ror|pgj-%jkX3hhO}eOq%0GvDWY6UvPKKGI=RI@VCuRcib>AB#hIqA5bOxu)9# z7BnY>(IN!`EZtvH@S*3lG|%^6i_z_OdjfM_bxH&Qr6My6D8GEsjCqJ-_kolTEp5O4 z#gm?r8CmYeGKWrk8}=#UK9mvBNh8W3KiO*Oh)a0uvPC|(pYiHBFdL#_kypJ(oyQZ` zlUb#D#yl$$!-rxtskRMr?Asg|lO*M(Ak(0 zVZ<3~QsSVW>v!YP&nL}dw@PF_!tbZ&4>F_`=O-O4DKa+h=+`;$V9+6U{S)pIujCyWDkzC z{q($o4% zj1j%;Zo zHT9L@0|f>K{`kXLfCdT)5)CYL%|FJ_aFXO!+Mu9*qANmR*;`*W(linAh_!BZGONA1 zk4d>f$sjbf3#gfp@2LGsJ1YZ&erCu!jPd)1 z6S8%0TJx?NyCvRUaci|SFQs|w^gBP@v`Wo5GjFm_md@xxW z_q2Zy9Qiyu2NnsYxJh|3Yp})0Ov2YiQm?{mx|Bl)p0JX@5(8Sz&on~hC&N_#QCyuN zGta`zx$kiqm4Q0tnGJ=I2KEs4`sG9{^b4#S>H~$5)g%AyN!Dk;SiyhYVXj_9EmG+N zLg;L5Fm7RZUvpg=K1zE3%O7Bsh`42m437ixj z6wgwfHpb#|b@A=^1H01DAIzsgx`Mx16Jz7(n^SJy7pFrfNe^>>5JSCIZUXb;9F&Rx zA`yF{3jnxWrgtU8lq1A&(hgj(J1O*Zb1H=^$ju*feCc}aQ5n~$?Og&bXR>%(659bV z_?1m8Q`5@1F5ZtC=~*`EwgpLK>o)Q$_?|T)Kz84#r7q{PpzvThJ90Mk+2MdT%d+hH zlV(4)wk6^&kfs+IpgTd3#H*=7X&&P>Cq8rs{|9X8AS;@Zrw-z6JA>s+|N2sZ0u*j31l;h_B{$WvYa~>hCVFzPX81; zSGn>HPT)8OO*7NwL33lGkH><00dDZKApf8doGqrn?NqhvZxAmTnG_N-t2O5quD@1= z+mKNNG;sg1BD}E*Kuyu)3d`QpZy~Qs>l`K?$II{Ztn#DdJzK3cl=eehGBZS;;<|m8 z)ky5OA+yr)5mBowS;0fi-5rP7AJRhPQv z$5R0^qYl~%Xx3U&hNqOcpE17pBg}~S>ppCzkdQ$zrA|D-Tmd%); zS-diZ(M2@ot`xOgBlI48X4-0*1|(ECCjy6xBw(}-3ZRc7BvmrlsaAb!^6xx$L-sDp z?{;U$@QEy)97fquOKzf9s%v`{#uN!|bH-xaZ~6ege))WEuFh8-EXgOF*-_jwc;{h> zP9aW`uT{WKz?vyn>%(#}e)rI2KcG~fSA#xJo<%8?>-<(XU?;W&Q)qI zh(||`$Lw;Iol6#;c>=f>pGg74{r=>{g05(?nJWDQC4Pn3_;%FG*V5CMd1^ej4CLl@ z8bvELy?XlL(8r&#W0E*ox|~@bFxpef=3;tTP7BCSzZrlhXfA4_lp~#KJ`qn0EmXmJ zD`+fPb~0b>KBL|7IMRfT+MO|$k5_DZdTub+B(b4zq&OH3TQ*HVA37_N!V+!`=^ z4_P#_URKc&9NAUb+x_O~W^55ib!%*FzuRy>Xd+&MYepJV_WEj(#%&s}(qt4{_ zrm|=s-Q_)dQg>G6SQ)ji%hdq?16T;S_sT9zZg{F~@81%Tq>|GV7=y?SDs_GaXY$ei qoJCU2^F#RItls}!|6>H~(#|ZeDRjBGwo9KpGzKbzUezjEMgBkAwP~;b diff --git a/src/BlazorApp2/wwwroot/manifest.json b/src/BlazorApp2/wwwroot/manifest.json deleted file mode 100644 index 17a3f00a497..00000000000 --- a/src/BlazorApp2/wwwroot/manifest.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "ThingsGateway", - "short_name": "ThingsGateway", - "start_url": "./", - "display": "standalone", - "background_color": "#ffffff", - "theme_color": "#03173d", - "prefer_related_applications": false, - "icons": [ - { - "src": "favicon.png", - "type": "image/png", - "sizes": "256x256" - }, - { - "src": "favicon.ico", - "type": "image/ico", - "sizes": "128x128" - } - ] -} \ No newline at end of file diff --git a/src/BlazorApp2/wwwroot/service-worker.js b/src/BlazorApp2/wwwroot/service-worker.js deleted file mode 100644 index 1ed99c22532..00000000000 --- a/src/BlazorApp2/wwwroot/service-worker.js +++ /dev/null @@ -1,4 +0,0 @@ -// In development, always fetch from the network and do not enable offline support. -// This is because caching would make development more difficult (changes would not -// be reflected on the first load after each change). -self.addEventListener('fetch', () => { }); \ No newline at end of file diff --git a/src/BlazorApp2/wwwroot/service-worker.published.js b/src/BlazorApp2/wwwroot/service-worker.published.js deleted file mode 100644 index db062b306fc..00000000000 --- a/src/BlazorApp2/wwwroot/service-worker.published.js +++ /dev/null @@ -1,48 +0,0 @@ -// Caution! Be sure you understand the caveats before publishing an application with -// offline support. See https://aka.ms/blazor-offline-considerations - -self.importScripts('./service-worker-assets.js'); -self.addEventListener('install', event => event.waitUntil(onInstall(event))); -self.addEventListener('activate', event => event.waitUntil(onActivate(event))); -self.addEventListener('fetch', event => event.respondWith(onFetch(event))); - -const cacheNamePrefix = 'offline-cache-'; -const cacheName = `${cacheNamePrefix}${self.assetsManifest.version}`; -const offlineAssetsInclude = [/\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/]; -const offlineAssetsExclude = [/^service-worker\.js$/]; - -async function onInstall(event) { - console.info('Service worker: Install'); - - // Fetch and cache all matching items from the assets manifest - const assetsRequests = self.assetsManifest.assets - .filter(asset => offlineAssetsInclude.some(pattern => pattern.test(asset.url))) - .filter(asset => !offlineAssetsExclude.some(pattern => pattern.test(asset.url))) - .map(asset => new Request(asset.url, { integrity: asset.hash, cache: 'no-cache' })); - await caches.open(cacheName).then(cache => cache.addAll(assetsRequests)); -} - -async function onActivate(event) { - console.info('Service worker: Activate'); - - // Delete unused caches - const cacheKeys = await caches.keys(); - await Promise.all(cacheKeys - .filter(key => key.startsWith(cacheNamePrefix) && key !== cacheName) - .map(key => caches.delete(key))); -} - -async function onFetch(event) { - let cachedResponse = null; - if (event.request.method === 'GET') { - // For all navigation requests, try to serve index.html from cache - // If you need some URLs to be server-rendered, edit the following check to exclude those URLs - const shouldServeIndexHtml = event.request.mode === 'navigate'; - - const request = shouldServeIndexHtml ? 'index.html' : event.request; - const cache = await caches.open(cacheName); - cachedResponse = await cache.match(request); - } - - return cachedResponse || fetch(event.request); -} \ No newline at end of file From f49b523b6fed8c41472f9df45df68989ced01f42 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Thu, 17 Oct 2024 19:47:40 +0800 Subject: [PATCH 12/12] chore: bump version 8.10.4-beta01 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 85c7bdfde20..5506305d4e0 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 8.10.3 + 8.10.4-beta01