Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">

<PropertyGroup>
<Version>11.0.0-rc.2.1</Version>
</PropertyGroup>

<PropertyGroup>
<PackageTags>Bootstrap Blazor WebAssembly wasm UI Components SignaturePad</PackageTags>
<Description>Bootstrap UI components extensions of Plyr</Description>
</PropertyGroup>

<ItemGroup>
<Content Remove="Locales\en.json" />
<Content Remove="Locales\zh.json" />
<EmbeddedResource Include="Locales\en.json" />
<EmbeddedResource Include="Locales\zh.json" />
<Content Remove="Locales\*.json" />
<EmbeddedResource Include="Locales\*.json" />
</ItemGroup>

<ItemGroup>
Expand Down
106 changes: 70 additions & 36 deletions src/components/BootstrapBlazor.SignaturePad/SignaturePad.razor.cs
Original file line number Diff line number Diff line change
@@ -1,188 +1,222 @@
// Copyright (c) Argo Zhang (argo@163.com). All rights reserved.
// Copyright (c) Argo Zhang (argo@163.com). 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.AspNetCore.Components;
using Microsoft.Extensions.Localization;
using Microsoft.JSInterop;

namespace BootstrapBlazor.Components;

/// <summary>
/// SignaturePad 签名
/// <para lang="zh">手写签名组件</para>
/// <para lang="en">Signature pad component</para>
/// </summary>
public partial class SignaturePad
{
private const string StylePath = "_content/BootstrapBlazor.SignaturePad/SignaturePad.css";

#if NET9_0_OR_GREATER
private string StyleUrl => Assets[StylePath];
#else
private static string StyleUrl => StylePath;
#endif

/// <summary>
/// 手写签名结果回调/SignaturePad result callback method
/// <para lang="zh">手写签名结果回调</para>
/// <para lang="en">Callback invoked with the signature result</para>
/// </summary>
[Parameter]
public Func<string, Task>? OnResult { get; set; }

/// <summary>
/// 手写签名警告信息回调/SignaturePad alert callback method
/// <para lang="zh">手写签名警告信息回调</para>
/// <para lang="en">Callback invoked when a signature alert is raised</para>
/// </summary>
[Parameter]
public Func<string, Task>? OnAlert { get; set; }

/// <summary>
/// 手写签名关闭信息回调/SignaturePad close callback method
/// <para lang="zh">手写签名关闭回调</para>
/// <para lang="en">Callback invoked when the signature pad is closed</para>
/// </summary>
[Parameter]
public Func<Task>? OnClose { get; set; }

/// <summary>
/// 获得/设置 错误回调方法
/// <para lang="zh">获得或设置错误回调</para>
/// <para lang="en">Gets or sets the error callback</para>
/// </summary>
[Parameter]
public Func<string, Task>? OnError { get; set; }

/// <summary>
/// 在框内签名标签文本/Sign above label
/// <para lang="zh">获得或设置签名区域上方的提示文本</para>
/// <para lang="en">Gets or sets the label displayed above the signing area</para>
/// </summary>
[Parameter]
[NotNull]
public string? SignAboveLabel { get; set; }
/// <summary>
/// 清除按钮文本/Clear button title
/// <para lang="zh">获得或设置清除按钮文本</para>
/// <para lang="en">Gets or sets the clear button label</para>
/// </summary>
[Parameter]
[NotNull]
public string? ClearBtnTitle { get; set; }

/// <summary>
/// 请先签名提示文本/'Please provide a signature first' alert text
/// <para lang="zh">获得或设置尚未签名时显示的提示文本</para>
/// <para lang="en">Gets or sets the alert text shown when no signature is present</para>
/// </summary>
[Parameter]
[NotNull]
public string? SignatureAlertText { get; set; }

/// <summary>
/// 换颜色按钮文本/Change color button title
/// <para lang="zh">获得或设置更改颜色按钮文本</para>
/// <para lang="en">Gets or sets the change color button label</para>
/// </summary>
[Parameter]
[NotNull]
public string? ChangeColorBtnTitle { get; set; }

/// <summary>
/// 撤消按钮文本/Undo button title
/// <para lang="zh">获得或设置撤销按钮文本</para>
/// <para lang="en">Gets or sets the undo button label</para>
/// </summary>
[Parameter]
[NotNull]
public string? UndoBtnTitle { get; set; }

/// <summary>
/// 关闭按钮文本/Close button title
/// <para lang="zh">获得或设置关闭按钮文本</para>
/// <para lang="en">Gets or sets the close button label</para>
/// </summary>
[Parameter]
[NotNull]
public string? CloseBtnTitle { get; set; }

/// <summary>
/// 保存为 base64 按钮文本 Save as Base64 button title
/// <para lang="zh">获得或设置保存为 Base64 按钮文本</para>
/// <para lang="en">Gets or sets the save as Base64 button label</para>
/// </summary>
[Parameter]
[NotNull]
public string? SaveBase64BtnTitle { get; set; }

/// <summary>
/// 保存为PNG按钮文本/Save as PNG button title
/// <para lang="zh">获得或设置保存为 PNG 按钮文本</para>
/// <para lang="en">Gets or sets the save as PNG button label</para>
/// </summary>
[Parameter]
[NotNull]
public string? SavePNGBtnTitle { get; set; }

/// <summary>
/// 保存为JPG按钮文本/Save as JPG button title
/// <para lang="zh">获得或设置保存为 JPG 按钮文本</para>
/// <para lang="en">Gets or sets the save as JPG button label</para>
/// </summary>
[Parameter]
[NotNull]
public string? SaveJPGBtnTitle { get; set; }

/// <summary>
/// 保存为SVG按钮文本/Save as SVG button title
/// <para lang="zh">获得或设置保存为 SVG 按钮文本</para>
/// <para lang="en">Gets or sets the save as SVG button label</para>
/// </summary>
[Parameter]
[NotNull]
public string? SaveSVGBtnTitle { get; set; }

/// <summary>
/// 启用换颜色按钮/Enable change color button
/// <para lang="zh">获得或设置是否启用更改颜色按钮</para>
/// <para lang="en">Gets or sets whether the change color button is enabled</para>
/// </summary>
[Parameter]
[NotNull]
public bool EnableChangeColorBtn { get; set; } = true;

/// <summary>
/// 启用撤消按钮/Enable undo button
/// <para lang="zh">获得或设置是否启用撤销按钮</para>
/// <para lang="en">Gets or sets whether the undo button is enabled</para>
/// </summary>
[Parameter]
[NotNull]
public bool EnableUndoBtn { get; set; } = true;

/// <summary>
/// 启用JS错误弹窗/Enable Alert from JS
/// <para lang="zh">获得或设置是否启用 JavaScript 提示框</para>
/// <para lang="en">Gets or sets whether JavaScript alerts are enabled</para>
/// </summary>
[Parameter]
[NotNull]
public bool EnableAlertJS { get; set; } = true;

/// <summary>
/// 启用保存为 base64 按钮 Enable save as Base64 button
/// <para lang="zh">获得或设置是否启用保存为 Base64 按钮</para>
/// <para lang="en">Gets or sets whether the save as Base64 button is enabled</para>
/// </summary>
[Parameter]
[NotNull]
public bool EnableSaveBase64Btn { get; set; } = true;

/// <summary>
/// 启用保存为PNG按钮文本/Enable save as PNG button
/// <para lang="zh">获得或设置是否启用保存为 PNG 按钮</para>
/// <para lang="en">Gets or sets whether the save as PNG button is enabled</para>
/// </summary>
[Parameter]
[NotNull]
public bool EnableSavePNGBtn { get; set; }

/// <summary>
/// 启用保存为JPG按钮文本/Enable save as JPG button
/// <para lang="zh">获得或设置是否启用保存为 JPG 按钮</para>
/// <para lang="en">Gets or sets whether the save as JPG button is enabled</para>
/// </summary>
[Parameter]
[NotNull]
public bool EnableSaveJPGBtn { get; set; }

/// <summary>
/// 启用保存为SVG按钮文本/Enable save as SVG button
/// <para lang="zh">获得或设置是否启用保存为 SVG 按钮</para>
/// <para lang="en">Gets or sets whether the save as SVG button is enabled</para>
/// </summary>
[Parameter]
public bool EnableSaveSVGBtn { get; set; }

/// <summary>
/// 按钮CSS式样/Button css style
/// <para lang="zh">获得或设置按钮 CSS 类</para>
/// <para lang="en">Gets or sets the CSS classes for buttons</para>
/// </summary>
[Parameter]
public string BtnCssClass { get; set; } = "btn btn-light";

/// <summary>
/// 按钮 "保存 "的css样式/Button "Save" css style
/// <para lang="zh">获得或设置保存按钮的 CSS 类</para>
/// <para lang="en">Gets or sets the CSS classes for save buttons</para>
/// </summary>
[Parameter]
public string BtnSaveCssClass { get; set; } = "btn btn-light";

/// <summary>
/// 组件CSS式样/Components css style
/// <para lang="zh">获得或设置组件 CSS 类(已过期,请直接使用 class)</para>
/// <para lang="en">Gets or sets the component CSS class (obsolete; use class instead)</para>
/// </summary>
[Parameter]
[NotNull]
[Obsolete("已过期,直接使用 class 即可")]
public string CssClass { get; set; } = "signature-pad-body";

/// <summary>
/// 响应式css界面,为所有用户设计最佳体验/Enable Responsive css
/// <para lang="zh">获得或设置是否启用响应式布局</para>
/// <para lang="en">Gets or sets whether responsive layout is enabled</para>
/// </summary>
[Parameter]
[NotNull]
public bool Responsive { get; set; }

/// <summary>
/// 组件背景 backgroundColor
/// <para lang="zh">获得或设置签名画布的背景颜色</para>
/// <para lang="en">Gets or sets the signature canvas background color</para>
/// </summary>
[Parameter]
public string? BackgroundColor { get; set; }
Expand Down Expand Up @@ -219,23 +253,23 @@ protected override void OnParametersSet()
/// <summary>
/// <inheritdoc/>
/// </summary>
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, EnableAlertJS ? SignatureAlertText : null, BackgroundColor);
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, EnableAlertJS ? SignatureAlertText : null, BackgroundColor, StyleUrl);

/// <summary>
/// 签名完成回调方法
/// <para lang="zh">调用签名结果回调</para>
/// <para lang="en">Invokes the signature result callback</para>
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
[JSInvokable]
public async Task SignatureResult(string? val)
{
if (OnResult != null) await OnResult.Invoke(val ?? "");
}

/// <summary>
/// 告警回调方法
/// <para lang="zh">调用签名提示回调</para>
/// <para lang="en">Invokes the signature alert callback</para>
/// </summary>
/// <returns></returns>
[JSInvokable]
public async Task SignatureAlert()
{
Expand All @@ -246,9 +280,9 @@ public async Task SignatureAlert()
}

/// <summary>
/// 关闭回调方法
/// <para lang="zh">调用签名板关闭回调</para>
/// <para lang="en">Invokes the signature pad close callback</para>
/// </summary>
/// <returns></returns>
[JSInvokable]
public async Task Close()
{
Expand Down
Loading
Loading