From edb44d16c473073025893841c733b735cc7a813e Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 20:12:30 +0800 Subject: [PATCH 01/20] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=20NetworkM?= =?UTF-8?q?onitor=20=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NetworkMonitor/NetworkMonitor.cs | 62 +++++++++++++++++++ .../NetworkMonitor/NetworkMonitorState.cs | 41 ++++++++++++ src/BootstrapBlazor/wwwroot/modules/net.js | 38 ++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitor.cs create mode 100644 src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorState.cs create mode 100644 src/BootstrapBlazor/wwwroot/modules/net.js diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitor.cs b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitor.cs new file mode 100644 index 00000000000..1aed6eaa4b7 --- /dev/null +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitor.cs @@ -0,0 +1,62 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the Apache 2.0 License +// See the LICENSE file in the project root for more information. +// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone + +namespace BootstrapBlazor.Components; + +/// +/// 客户端链接组件 +/// +[BootstrapModuleAutoLoader(ModuleName = "net", JSObjectReference = true)] +public class NetworkMonitor : BootstrapModuleComponentBase +{ + /// + /// Gets or sets the callback function that is invoked when the network state changes. + /// + [Parameter] + public Func? OnNetworkStateChanged { get; set; } + + private NetworkMonitorState _state = new(); + + /// + /// + /// + /// + protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, new + { + Invoke = Interop, + OnlineStateChangedCallback = nameof(TriggerOnlineStateChanged), + OnNetworkStateChangedCallback = nameof(TriggerNetworkStateChanged) + }); + + /// + /// JSInvoke 回调方法 + /// + /// + [JSInvokable] + public async Task TriggerOnlineStateChanged(bool online) + { + _state.IsOnline = online; + if (OnNetworkStateChanged != null) + { + await OnNetworkStateChanged(_state); + } + } + + /// + /// JSInvoke 回调方法 + /// + /// + [JSInvokable] + public async Task TriggerNetworkStateChanged(NetworkMonitorState state) + { + // 网络状态变化回调方法 + _state = state; + _state.IsOnline = true; + if (OnNetworkStateChanged != null) + { + await OnNetworkStateChanged(_state); + } + } +} diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorState.cs b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorState.cs new file mode 100644 index 00000000000..9bf577a0049 --- /dev/null +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorState.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the Apache 2.0 License +// See the LICENSE file in the project root for more information. +// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone + +namespace BootstrapBlazor.Components; + +/// +/// 网络状态信息类 +/// +public class NetworkMonitorState +{ + /// + /// Gets or sets a value indicating whether the network is online + /// + public bool IsOnline { get; set; } + + /// + /// Gets or sets the current network type + /// + public string? NetworkType { get; set; } + + /// + /// Gets or sets the downlink speed in megabits per second (Mbps). + /// + public double? Downlink { get; set; } + + /// + /// Gets or sets the round-trip time (RTT) in milliseconds. + /// + public int RTT { get; set; } + + /// + /// + /// + /// + public override string ToString() + { + return $"IsOnline: {IsOnline} NetworkType: {NetworkType} Downlink: {Downlink} RTT: {RTT}"; + } +} diff --git a/src/BootstrapBlazor/wwwroot/modules/net.js b/src/BootstrapBlazor/wwwroot/modules/net.js new file mode 100644 index 00000000000..49705b9e316 --- /dev/null +++ b/src/BootstrapBlazor/wwwroot/modules/net.js @@ -0,0 +1,38 @@ +import Data from "./data.js" +import EventHandler from "./event-handler.js"; + +export function init(id, options) { + const { invoke, onlineStateChangedCallback, onNetworkStateChangedCallback } = options; + navigator.connection.onchange = e => { + const nt = e.target; + const { downlink, effectiveType, rtt } = nt; + invoke.invokeMethodAsync(onNetworkStateChangedCallback, { + downlink, networkType: effectiveType, rTT: rtt + }); + } + + const onlineStateChanged = () => { + invoke.invokeMethodAsync(onlineStateChangedCallback, true); + } + const offlineStateChanged = () => { + invoke.invokeMethodAsync(onlineStateChangedCallback, false); + } + EventHandler.on(window, 'online', onlineStateChanged); + EventHandler.on(window, 'offline', offlineStateChanged); + + Data.set(id, { + onlineStateChanged, + offlineStateChanged + }) +} + +export async function dispose(id) { + var nt = Data.get(id); + Data.remove(id); + + if (nt) { + const { onlineStateChanged, offlineStateChanged } = nt; + EventHandler.off(window, 'online', onlineStateChanged); + EventHandler.off(window, 'offline', offlineStateChanged); + } +} From c16bbe3e8a2eec81fe6ca106c34a9b45ef9891cb Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 20:12:58 +0800 Subject: [PATCH 02/20] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Layout/BaseLayout.razor | 2 ++ .../Components/Layout/BaseLayout.razor.cs | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor index 2c3286201cf..cdfd232b3ed 100644 --- a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor +++ b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor @@ -7,6 +7,8 @@ + +
An unhandled error has occurred. Reload diff --git a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.cs b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.cs index 324edf5136a..6cafba57a97 100644 --- a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.cs @@ -95,6 +95,12 @@ private async Task NotifyReboot(DispatchEntry payload) } } + private static Task OnNetworkStateChanged(NetworkMonitorState state) + { + System.Console.WriteLine(state.ToString()); + return Task.CompletedTask; + } + /// /// 释放资源 /// From c4f879345378497ce9aa195686751a033197e0fa Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 21:12:37 +0800 Subject: [PATCH 03/20] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20Indicator=20?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NetworkMonitor/NetworkMonitor.cs | 9 ++++++- src/BootstrapBlazor/wwwroot/modules/net.js | 27 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitor.cs b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitor.cs index 1aed6eaa4b7..5150d24aa88 100644 --- a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitor.cs +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitor.cs @@ -17,6 +17,12 @@ public class NetworkMonitor : BootstrapModuleComponentBase [Parameter] public Func? OnNetworkStateChanged { get; set; } + /// + /// Gets or sets the list of indicators used for display info. + /// + [Parameter] + public List? Indicators { get; set; } + private NetworkMonitorState _state = new(); /// @@ -27,7 +33,8 @@ public class NetworkMonitor : BootstrapModuleComponentBase { Invoke = Interop, OnlineStateChangedCallback = nameof(TriggerOnlineStateChanged), - OnNetworkStateChangedCallback = nameof(TriggerNetworkStateChanged) + OnNetworkStateChangedCallback = nameof(TriggerNetworkStateChanged), + Indicators }); /// diff --git a/src/BootstrapBlazor/wwwroot/modules/net.js b/src/BootstrapBlazor/wwwroot/modules/net.js index 49705b9e316..c2ce159f23d 100644 --- a/src/BootstrapBlazor/wwwroot/modules/net.js +++ b/src/BootstrapBlazor/wwwroot/modules/net.js @@ -2,7 +2,7 @@ import EventHandler from "./event-handler.js"; export function init(id, options) { - const { invoke, onlineStateChangedCallback, onNetworkStateChangedCallback } = options; + const { invoke, onlineStateChangedCallback, onNetworkStateChangedCallback, indicators } = options; navigator.connection.onchange = e => { const nt = e.target; const { downlink, effectiveType, rtt } = nt; @@ -12,9 +12,27 @@ export function init(id, options) { } const onlineStateChanged = () => { + if (Array.isArray(indicators)) { + indicators.forEach(indicator => { + const el = document.getElementById(indicator); + if (el) { + el.classList.remove('offline'); + el.classList.add('online'); + } + }); + } invoke.invokeMethodAsync(onlineStateChangedCallback, true); } const offlineStateChanged = () => { + if (Array.isArray(indicators)) { + indicators.forEach(indicator => { + const el = document.getElementById(indicator); + if (el) { + el.classList.remove('online'); + el.classList.add('offline'); + } + }); + } invoke.invokeMethodAsync(onlineStateChangedCallback, false); } EventHandler.on(window, 'online', onlineStateChanged); @@ -23,7 +41,12 @@ export function init(id, options) { Data.set(id, { onlineStateChanged, offlineStateChanged - }) + }); + + const { downlink, effectiveType, rtt } = navigator.connection; + invoke.invokeMethodAsync(onNetworkStateChangedCallback, { + downlink, networkType: effectiveType, rTT: rtt + }); } export async function dispose(id) { From 742e74a6a7f120cf06fae2372ec113202ecf43eb Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 21:12:46 +0800 Subject: [PATCH 04/20] =?UTF-8?q?style:=20=E5=A2=9E=E5=8A=A0=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NetworkMonitorIndicator.razor.scss | 44 +++++++++++++++++++ .../wwwroot/scss/components.scss | 1 + 2 files changed, 45 insertions(+) create mode 100644 src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss new file mode 100644 index 00000000000..8ad5b2edd27 --- /dev/null +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss @@ -0,0 +1,44 @@ +.bb-nt-indicator { + --bb-nt-indicator-width: .5rem; + --bb-nt-indicator-border-radius: 50%; + --bb-nt-indicator-bg: var(--bs-secondary); + background: var(--bb-nt-indicator-bg); + cursor: pointer; + width: var(--bb-nt-indicator-width); + height: var(--bb-nt-indicator-width); + border-radius: var(--bb-nt-indicator-border-radius); + display: inline-block; + + &.bb-nt-indicator-4g { + background-color: var(--bs-success); + } + + &.bb-nt-indicator-3g { + background-color: var(--bs-warning); + } + + &.bb-nt-indicator-2g { + background-color: var(--bs-danger); + } +} + +.bb-nt-main { + .bb-nt-item { + display: flex; + align-items: center; + + > span { + width: 120px; + } + + > div { + flex: 1; + min-width: 0; + width: 1%; + } + + &:not(:last-child) { + margin-bottom: .5rem; + } + } +} diff --git a/src/BootstrapBlazor/wwwroot/scss/components.scss b/src/BootstrapBlazor/wwwroot/scss/components.scss index da15073286f..bcbd0818c41 100644 --- a/src/BootstrapBlazor/wwwroot/scss/components.scss +++ b/src/BootstrapBlazor/wwwroot/scss/components.scss @@ -69,6 +69,7 @@ @import "../../Components/Menu/Menu.razor.scss"; @import "../../Components/Message/Message.razor.scss"; @import "../../Components/Modal/Modal.razor.scss"; +@import "../../Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss"; @import "../../Components/Pagination/Pagination.razor.scss"; @import "../../Components/Popover/Popover.razor.scss"; @import "../../Components/QueryBuilder/QueryBuilder.razor.scss"; From af6bbb28d21c857c8121c2e7cb0fc9496a551011 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 21:13:09 +0800 Subject: [PATCH 05/20] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E7=8A=B6=E6=80=81=E6=8C=87=E7=A4=BA=E5=99=A8=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NetworkMonitorIndicator.razor | 26 +++++++ .../NetworkMonitorIndicator.razor.cs | 72 +++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor create mode 100644 src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.cs diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor new file mode 100644 index 00000000000..212989a9922 --- /dev/null +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor @@ -0,0 +1,26 @@ +@namespace BootstrapBlazor.Components +@inherits IdComponentBase + + + + + + + + + diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.cs b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.cs new file mode 100644 index 00000000000..dfc58b4e3be --- /dev/null +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.cs @@ -0,0 +1,72 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the Apache 2.0 License +// See the LICENSE file in the project root for more information. +// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone + +namespace BootstrapBlazor.Components; + +/// +/// Represents a network monitor indicator with customizable tooltip settings. +/// +/// This component allows you to configure the text, placement, and trigger behavior of a tooltip that +/// appears when interacting with the network monitor indicator. The tooltip can be customized to provide additional +/// information to users. +public partial class NetworkMonitorIndicator +{ + /// + /// 获得/设置 Popover 弹窗标题 默认为 null + /// + [Parameter] + public string? Title { get; set; } + + /// + /// 获得/设置 Popover 显示位置 默认为 Top + /// + [Parameter] + public Placement PopoverPlacement { get; set; } = Placement.Top; + + /// + /// 获得/设置 Popover 触发方式 默认为 hover focus + /// + [Parameter] + [NotNull] + public string? Trigger { get; set; } + + private NetworkMonitorState _state = new(); + private List _indicators = []; + + private string? ClassString => CssBuilder.Default("bb-nt-indicator") + .AddClass("bb-nt-indicator-4g", _state.NetworkType == "4g") + .AddClass("bb-nt-indicator-3g", _state.NetworkType == "3g") + .AddClass("bb-nt-indicator-2g", _state.NetworkType == "2g") + .AddClassFromAttributes(AdditionalAttributes) + .Build(); + + /// + /// + /// + protected override void OnInitialized() + { + base.OnInitialized(); + + _indicators.Add(Id); + } + + /// + /// + /// + protected override void OnParametersSet() + { + base.OnParametersSet(); + + Trigger ??= "hover focus"; + Title ??= "网络状态"; + } + + private Task OnNetworkStateChanged(NetworkMonitorState state) + { + _state = state; + StateHasChanged(); + return Task.CompletedTask; + } +} From 6dc42892874d954167164fc50a167576baa49afe Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 21:16:46 +0800 Subject: [PATCH 06/20] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=A6=BB?= =?UTF-8?q?=E7=BA=BF=E7=8A=B6=E6=80=81=E6=8C=87=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NetworkMonitor/NetworkMonitorIndicator.razor.scss | 4 ++++ src/BootstrapBlazor/wwwroot/modules/net.js | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss index 8ad5b2edd27..5cd04b00856 100644 --- a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss @@ -20,6 +20,10 @@ &.bb-nt-indicator-2g { background-color: var(--bs-danger); } + + &.offline { + background-color: var(--bs-secondary) !important; + } } .bb-nt-main { diff --git a/src/BootstrapBlazor/wwwroot/modules/net.js b/src/BootstrapBlazor/wwwroot/modules/net.js index c2ce159f23d..2a8d33dcee1 100644 --- a/src/BootstrapBlazor/wwwroot/modules/net.js +++ b/src/BootstrapBlazor/wwwroot/modules/net.js @@ -17,7 +17,6 @@ export function init(id, options) { const el = document.getElementById(indicator); if (el) { el.classList.remove('offline'); - el.classList.add('online'); } }); } @@ -28,7 +27,6 @@ export function init(id, options) { indicators.forEach(indicator => { const el = document.getElementById(indicator); if (el) { - el.classList.remove('online'); el.classList.add('offline'); } }); From 2ce3876488a33ecdd7cd1ebfed91194b999ee440 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 21:18:49 +0800 Subject: [PATCH 07/20] =?UTF-8?q?refactor:=20=E6=92=A4=E9=94=80=E6=9B=B4?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Layout/BaseLayout.razor | 2 -- .../Components/Layout/BaseLayout.razor.cs | 6 ------ 2 files changed, 8 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor index cdfd232b3ed..2c3286201cf 100644 --- a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor +++ b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor @@ -7,8 +7,6 @@ - -
An unhandled error has occurred. Reload diff --git a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.cs b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.cs index 6cafba57a97..324edf5136a 100644 --- a/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Layout/BaseLayout.razor.cs @@ -95,12 +95,6 @@ private async Task NotifyReboot(DispatchEntry payload) } } - private static Task OnNetworkStateChanged(NetworkMonitorState state) - { - System.Console.WriteLine(state.ToString()); - return Task.CompletedTask; - } - /// /// 释放资源 /// From b6971fda3f877ecda8f387ee5878112a51c15da6 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 21:27:21 +0800 Subject: [PATCH 08/20] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor.Server/Components/Layout/HomeLayout.razor | 3 +++ .../Components/NetworkMonitor/NetworkMonitorIndicator.razor | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Layout/HomeLayout.razor b/src/BootstrapBlazor.Server/Components/Layout/HomeLayout.razor index d38bedbe44c..6a0f9ad7627 100644 --- a/src/BootstrapBlazor.Server/Components/Layout/HomeLayout.razor +++ b/src/BootstrapBlazor.Server/Components/Layout/HomeLayout.razor @@ -64,6 +64,9 @@
BB @VersionService.Version
+
+ +
@Localizer["Footer"] diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor index 212989a9922..7352bd21edd 100644 --- a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor @@ -13,11 +13,11 @@
Downlink: -
@_state.Downlink
+
@_state.Downlink M/s
RTT: -
@_state.RTT
+
@_state.RTT ms
From 1b0dbaa0ca701cd1edeefc3679735962f719f480 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 21:33:21 +0800 Subject: [PATCH 09/20] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=20Online=20=E7=8A=B6=E6=80=81=E5=90=8E=E9=87=8D?= =?UTF-8?q?=E7=BD=AE=E6=95=B0=E6=8D=AE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/wwwroot/modules/net.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/BootstrapBlazor/wwwroot/modules/net.js b/src/BootstrapBlazor/wwwroot/modules/net.js index 2a8d33dcee1..365dcc61360 100644 --- a/src/BootstrapBlazor/wwwroot/modules/net.js +++ b/src/BootstrapBlazor/wwwroot/modules/net.js @@ -11,12 +11,20 @@ export function init(id, options) { }); } + const resetState = () => { + const { downlink, effectiveType, rtt } = navigator.connection; + invoke.invokeMethodAsync(onNetworkStateChangedCallback, { + downlink, networkType: effectiveType, rTT: rtt + }); + } + const onlineStateChanged = () => { if (Array.isArray(indicators)) { indicators.forEach(indicator => { const el = document.getElementById(indicator); if (el) { el.classList.remove('offline'); + resetState(); } }); } @@ -40,11 +48,7 @@ export function init(id, options) { onlineStateChanged, offlineStateChanged }); - - const { downlink, effectiveType, rtt } = navigator.connection; - invoke.invokeMethodAsync(onNetworkStateChangedCallback, { - downlink, networkType: effectiveType, rTT: rtt - }); + resetState(); } export async function dispose(id) { From 626398639257b1bae8b5c886f6c220ab487577ed Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 21:34:37 +0800 Subject: [PATCH 10/20] =?UTF-8?q?refactor:=20=E5=87=8F=E5=B0=91=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E7=BD=91=E7=BB=9C=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/wwwroot/modules/net.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/BootstrapBlazor/wwwroot/modules/net.js b/src/BootstrapBlazor/wwwroot/modules/net.js index 365dcc61360..092bf433faa 100644 --- a/src/BootstrapBlazor/wwwroot/modules/net.js +++ b/src/BootstrapBlazor/wwwroot/modules/net.js @@ -24,7 +24,6 @@ export function init(id, options) { const el = document.getElementById(indicator); if (el) { el.classList.remove('offline'); - resetState(); } }); } From 413ba2b051d12ec3d56a54aa89f876ed5ec3cf6e Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 23:47:51 +0800 Subject: [PATCH 11/20] =?UTF-8?q?style:=20=E6=9B=B4=E6=96=B0=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NetworkMonitor/NetworkMonitorIndicator.razor.scss | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss index 5cd04b00856..9d6546064c8 100644 --- a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor.scss @@ -22,10 +22,14 @@ } &.offline { - background-color: var(--bs-secondary) !important; + background-color: var(--bs-secondary); } } +[data-bs-toggle="popover"]:has(.offline) { + pointer-events: none; +} + .bb-nt-main { .bb-nt-item { display: flex; From 266e61e7bc8f41b1e0ea37c15e999e5f61df8f30 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 12 Jul 2025 23:48:02 +0800 Subject: [PATCH 12/20] =?UTF-8?q?refactor:=20=E8=B0=83=E6=95=B4=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/NetworkMonitor/NetworkMonitorIndicator.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor index 7352bd21edd..5bb15876ddf 100644 --- a/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor +++ b/src/BootstrapBlazor/Components/NetworkMonitor/NetworkMonitorIndicator.razor @@ -3,7 +3,7 @@ - +