diff --git a/src/BootstrapBlazor.Server/Extensions/MenusLocalizerExtensions.cs b/src/BootstrapBlazor.Server/Extensions/MenusLocalizerExtensions.cs
index b21e993d28c..c36305e26c1 100644
--- a/src/BootstrapBlazor.Server/Extensions/MenusLocalizerExtensions.cs
+++ b/src/BootstrapBlazor.Server/Extensions/MenusLocalizerExtensions.cs
@@ -596,11 +596,6 @@ void AddData(DemoMenuItem item)
Text=Localizer["Empty"],
Url = "empty"
},
- new ()
- {
- Text=Localizer["EyeDropper"],
- Url = "eye-dropper"
- },
new()
{
Text = Localizer["FileIcon"],
@@ -1431,6 +1426,11 @@ void AddServices(DemoMenuItem item)
Text = Localizer["FullScreen"],
Url = "fullscreen"
},
+ new ()
+ {
+ Text=Localizer["EyeDropper"],
+ Url = "eye-dropper"
+ },
new()
{
Text = Localizer["Festival"],
diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json
index c86ad1948fa..e331fc1f77b 100644
--- a/src/BootstrapBlazor.Server/Locales/en-US.json
+++ b/src/BootstrapBlazor.Server/Locales/en-US.json
@@ -4589,7 +4589,7 @@
"DateTimeRange": "DateTimeRange",
"Editor": "Editor",
"EditorForm": "EditorForm",
- "EyeDropper": "EyeDropper",
+ "EyeDropper": "EyeDropper Service",
"Input": "Input",
"InputNumber": "InputNumber",
"InputGroup": "InputGroup",
@@ -6034,7 +6034,7 @@
"Numerals": "numeral glyph substitution"
},
"BootstrapBlazor.Server.Components.Samples.EyeDroppers": {
- "EyeDropperTitle": "EyeDropper",
+ "EyeDropperTitle": "EyeDropper Service",
"EyeDropperDescription": "The EyeDropperService
provides a mechanism for creating an eyedropper tool. Using this tool, users can sample colors from their screens, including outside of the browser window.",
"EyeDropperNormalTitle": "Basic usage",
"EyeDropperNormalIntro": "Using the EyeDropperService
application can start the eyedropper mode. Once started, the cursor changes to indicate to the user that the mode is active. The user can then either select a color from anywhere on the screen, or dismiss the eyedropper mode by pressing Escape",
diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json
index c05ff2c0500..7abd68fc104 100644
--- a/src/BootstrapBlazor.Server/Locales/zh-CN.json
+++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json
@@ -4589,7 +4589,7 @@
"DateTimeRange": "时间范围框 DateTimeRange",
"Editor": "富文本框 Editor",
"EditorForm": "表单编辑框 EditorForm",
- "EyeDropper": "取色服务 EyeDropper",
+ "EyeDropper": "取色服务 EyeDropperService",
"Input": "输入框 Input",
"InputNumber": "数字框 InputNumber",
"InputGroup": "输入组 InputGroup",
@@ -6034,7 +6034,7 @@
"Numerals": "数字符号集合"
},
"BootstrapBlazor.Server.Components.Samples.EyeDroppers": {
- "EyeDropperTitle": "屏幕取色 EyeDropper",
+ "EyeDropperTitle": "屏幕取色 EyeDropperService",
"EyeDropperDescription": "用户可以从屏幕上采样颜色,包括在浏览器窗口之外",
"EyeDropperNormalTitle": "基础用法",
"EyeDropperNormalIntro": "使用 EyeDropperService
,可以启动吸管模式。启动后,光标会发生变化以向用户指示该模式处于活动状态。然后用户可以从屏幕上的任何位置选择一种颜色,通过按 Escape 关闭吸管模式",
diff --git a/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRoot.razor b/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRoot.razor
index 7037643218e..1dd8c4281d1 100644
--- a/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRoot.razor
+++ b/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRoot.razor
@@ -3,7 +3,6 @@
@RenderBody()
-
@@ -14,7 +13,7 @@
-@foreach(var com in Generators)
+@foreach (var com in Generators)
{
@com.Generator()
}
diff --git a/src/BootstrapBlazor/Components/EyeDropper/EyeDropper.cs b/src/BootstrapBlazor/Components/EyeDropper/EyeDropper.cs
deleted file mode 100644
index d58d9e4260a..00000000000
--- a/src/BootstrapBlazor/Components/EyeDropper/EyeDropper.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-// 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;
-
-///
-/// EyeDropper 组件
-///
-[BootstrapModuleAutoLoader(ModuleName = "eye-dropper", AutoInvokeInit = false, AutoInvokeDispose = false)]
-public class EyeDropper : BootstrapModuleComponentBase
-{
- ///
- /// EyeDropperService 服务实例
- ///
- [Inject]
- [NotNull]
- private EyeDropperService? EyeDropperService { get; set; }
-
- ///
- /// OnInitialized 方法
- ///
- protected override void OnInitialized()
- {
- base.OnInitialized();
-
- // 注册 EyeDropperService 弹窗事件
- EyeDropperService.Register(this, Pick);
- }
-
- private async Task Pick(EyeDropperOption option)
- {
- option.Value = await InvokeAsync("open");
- }
-
- ///
- ///
- ///
- ///
- protected override async ValueTask DisposeAsync(bool disposing)
- {
- if (disposing)
- {
- EyeDropperService.UnRegister(this);
- }
-
- await base.DisposeAsync(disposing);
- }
-}
diff --git a/src/BootstrapBlazor/Components/EyeDropper/EyeDropperOption.cs b/src/BootstrapBlazor/Components/EyeDropper/EyeDropperOption.cs
deleted file mode 100644
index 2bfe4c4a623..00000000000
--- a/src/BootstrapBlazor/Components/EyeDropper/EyeDropperOption.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// 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;
-
-///
-/// EyeDropper 配置类
-///
-public class EyeDropperOption
-{
- ///
- /// 获得/设置 回调方法
- ///
- public string? Value { get; set; }
-}
diff --git a/src/BootstrapBlazor/Components/EyeDropper/EyeDropperService.cs b/src/BootstrapBlazor/Services/EyeDropperService.cs
similarity index 60%
rename from src/BootstrapBlazor/Components/EyeDropper/EyeDropperService.cs
rename to src/BootstrapBlazor/Services/EyeDropperService.cs
index 4953a7b8402..a6ff6dc59ef 100644
--- a/src/BootstrapBlazor/Components/EyeDropper/EyeDropperService.cs
+++ b/src/BootstrapBlazor/Services/EyeDropperService.cs
@@ -8,16 +8,18 @@ namespace BootstrapBlazor.Components;
///
/// EyeDropper 服务用于屏幕吸色
///
-public class EyeDropperService : BootstrapServiceBase
+public class EyeDropperService(IJSRuntime jSRuntime)
{
+ [NotNull]
+ private JSModule? _module = null;
+
///
/// 全屏方法,已经全屏时再次调用后退出全屏
///
///
- public async Task PickAsync()
+ public async Task PickAsync(CancellationToken token = default)
{
- var op = new EyeDropperOption();
- await Invoke(op);
- return op.Value;
+ _module ??= await jSRuntime.LoadModule("./_content/BootstrapBlazor/modules/eye-dropper.js");
+ return await _module.InvokeAsync("open", token);
}
}
diff --git a/src/BootstrapBlazor/wwwroot/modules/eye-dropper.js b/src/BootstrapBlazor/wwwroot/modules/eye-dropper.js
index e0d0d13b580..11ba3fe3957 100644
--- a/src/BootstrapBlazor/wwwroot/modules/eye-dropper.js
+++ b/src/BootstrapBlazor/wwwroot/modules/eye-dropper.js
@@ -1,7 +1,7 @@
export async function open() {
if (!window.EyeDropper) {
console.error("Your browser does not support the EyeDropper API")
- return
+ return null;
}
const eyeDropper = new EyeDropper();
diff --git a/test/UnitTest/Services/EyeDropperTest.cs b/test/UnitTest/Services/EyeDropperServiceTest.cs
similarity index 70%
rename from test/UnitTest/Services/EyeDropperTest.cs
rename to test/UnitTest/Services/EyeDropperServiceTest.cs
index 4006f76239c..6348cff3876 100644
--- a/test/UnitTest/Services/EyeDropperTest.cs
+++ b/test/UnitTest/Services/EyeDropperServiceTest.cs
@@ -5,15 +5,14 @@
namespace UnitTest.Services;
-public class EyeDropperTest : BootstrapBlazorTestBase
+public class EyeDropperServiceTest : BootstrapBlazorTestBase
{
[Fact]
public async Task EyeDropperService_Ok()
{
- Context.JSInterop.Setup("open").SetResult("Ok");
+ Context.JSInterop.Setup("open").SetResult("#FFFFFF");
var service = Context.Services.GetRequiredService();
- var cut = Context.RenderComponent();
var expected = await service.PickAsync();
- Assert.Equal("Ok", expected);
+ Assert.Equal("#FFFFFF", expected);
}
}