Skip to content

Commit 03261a8

Browse files
committed
feat: 增加 IToggle 接口
1 parent 8672eab commit 03261a8

File tree

3 files changed

+67
-20
lines changed

3 files changed

+67
-20
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the Apache 2.0 License
3+
// See the LICENSE file in the project root for more information.
4+
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
5+
6+
namespace BootstrapBlazor.Components;
7+
8+
/// <summary>
9+
/// 状态可切换接口定义
10+
/// </summary>
11+
public interface IToggle
12+
{
13+
/// <summary>
14+
/// 显示弹窗方法
15+
/// </summary>
16+
/// <param name="delay">延时指定毫秒后显示弹窗 默认 null 不延时</param>
17+
/// <returns></returns>
18+
Task Show(int? delay = null);
19+
20+
/// <summary>
21+
/// 关闭弹窗方法
22+
/// </summary>
23+
/// <param name="delay">延时指定毫秒后关闭弹窗 默认 null 不延时</param>
24+
/// <returns></returns>
25+
Task Hide(int? delay = null);
26+
27+
/// <summary>
28+
/// 切换弹窗当前状态方法
29+
/// </summary>
30+
/// <param name="delay">延时指定毫秒后切换弹窗方法 默认 null 不延时</param>
31+
/// <returns></returns>
32+
Task Toggle(int? delay = null);
33+
}

src/BootstrapBlazor/Components/Tooltip/Tooltip.razor

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
@inherits BootstrapModuleComponentBase
33
@attribute [BootstrapModuleAutoLoader]
44

5-
<span @attributes="@AdditionalAttributes" class="@ClassString" tabindex="0" id="@Id"
6-
data-bs-toggle="tooltip" data-bs-original-title="@Title"
7-
data-bs-selector="@Selector" data-bs-placement="@PlacementString" data-bs-custom-class="@CustomClassString"
8-
data-bs-trigger="@Trigger" data-bs-delay="@Delay"
9-
data-bs-offset="@Offset" data-bs-fallbackPlacements="@FallbackPlacementsString"
10-
data-bs-html="@HtmlString" data-bs-sanitize="@SanitizeString">
5+
<DynamicElement @attributes="@AdditionalAttributes" TagName="span"
6+
TriggerClick="@TriggerClick" OnClick="OnTriggerClick"
7+
class="@ClassString" tabindex="0" id="@Id"
8+
data-bs-toggle="tooltip" data-bs-original-title="@Title"
9+
data-bs-selector="@Selector" data-bs-placement="@PlacementString" data-bs-custom-class="@CustomClass"
10+
data-bs-trigger="@Trigger" data-bs-delay="@Delay"
11+
data-bs-offset="@Offset" data-bs-fallbackPlacements="@FallbackPlacementsString"
12+
data-bs-html="@HtmlString" data-bs-sanitize="@SanitizeString">
1113
<CascadingValue Value="this" IsFixed="true">
1214
@ChildContent
1315
</CascadingValue>
14-
</span>
16+
</DynamicElement>

src/BootstrapBlazor/Components/Tooltip/Tooltip.razor.cs

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace BootstrapBlazor.Components;
88
/// <summary>
99
/// Tooltip 组件
1010
/// </summary>
11-
public partial class Tooltip : ITooltip
11+
public partial class Tooltip : ITooltip, IToggle
1212
{
1313
/// <summary>
1414
/// 弹窗位置字符串
@@ -25,10 +25,7 @@ public partial class Tooltip : ITooltip
2525
/// </summary>
2626
protected string? HtmlString => IsHtml ? "true" : null;
2727

28-
/// <summary>
29-
/// component class
30-
/// </summary>
31-
protected string? ClassString => CssBuilder.Default()
28+
private string? ClassString => CssBuilder.Default("bb-tooltip")
3229
.AddClassFromAttributes(AdditionalAttributes)
3330
.Build();
3431

@@ -50,7 +47,7 @@ public partial class Tooltip : ITooltip
5047
public string? Selector { get; set; }
5148

5249
/// <summary>
53-
/// 获得/设置 显示内容
50+
/// <inheritdoc/>
5451
/// </summary>
5552
[Parameter]
5653
public string? Title { get; set; }
@@ -62,7 +59,7 @@ public partial class Tooltip : ITooltip
6259
public Func<Task<string>>? GetTitleCallback { get; set; }
6360

6461
/// <summary>
65-
/// 获得/设置 显示文字是否为 Html 默认为 false
62+
/// <inheritdoc/>
6663
/// </summary>
6764
[Parameter]
6865
public bool IsHtml { get; set; }
@@ -74,7 +71,7 @@ public partial class Tooltip : ITooltip
7471
public bool Sanitize { get; set; } = true;
7572

7673
/// <summary>
77-
/// 获得/设置 位置 默认为 Placement.Top
74+
/// <inheritdoc/>
7875
/// </summary>
7976
[Parameter]
8077
public Placement Placement { get; set; } = Placement.Top;
@@ -92,14 +89,13 @@ public partial class Tooltip : ITooltip
9289
public string? Offset { get; set; }
9390

9491
/// <summary>
95-
/// 获得/设置 自定义样式 默认 null
92+
/// <inheritdoc/>
9693
/// </summary>
97-
/// <remarks>由 data-bs-custom-class 实现</remarks>
9894
[Parameter]
9995
public string? CustomClass { get; set; }
10096

10197
/// <summary>
102-
/// 获得/设置 触发方式 可组合 click focus hover 默认为 focus hover
98+
/// <inheritdoc/>
10399
/// </summary>
104100
[Parameter]
105101
public string? Trigger { get; set; }
@@ -111,10 +107,15 @@ public partial class Tooltip : ITooltip
111107
public RenderFragment? ChildContent { get; set; }
112108

113109
/// <summary>
114-
/// 获得 CustomClass 字符串
110+
/// 获得/设置 点击回调方法
115111
/// </summary>
116-
protected virtual string? CustomClassString => CustomClass;
112+
[Parameter]
113+
public Func<IToggle, Task>? OnClick { get; set; }
117114

115+
/// <summary>
116+
/// 是否允许触发 <see cref="OnClick"/> 回调方法
117+
/// </summary>
118+
protected bool TriggerClick => OnClick != null;
118119
/// <summary>
119120
/// <inheritdoc/>
120121
/// </summary>
@@ -177,4 +178,15 @@ public void SetParameters(string title, Placement placement = Placement.Auto, st
177178
/// <param name="delay">延时指定毫秒后切换弹窗方法 默认 null 不延时</param>
178179
/// <returns></returns>
179180
public Task Toggle(int? delay = null) => InvokeVoidAsync("toggle", Id, delay);
181+
182+
/// <summary>
183+
/// 触发 <see cref="OnClick"/> 回调方法
184+
/// </summary>
185+
protected async Task OnTriggerClick()
186+
{
187+
if (OnClick != null)
188+
{
189+
await OnClick(this);
190+
}
191+
}
180192
}

0 commit comments

Comments
 (0)