Skip to content

Commit 8fa761f

Browse files
2 parents 1d3b570 + 3add03e commit 8fa761f

20 files changed

+108
-24
lines changed

BlazorSRRDemo/BlazorSRRDemo/BlazorSRRDemo.csproj

+6
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,10 @@
1212
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.6" />
1313
</ItemGroup>
1414

15+
<ItemGroup>
16+
<Content Update="Components\Pages\ExistingSignature.razor">
17+
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
18+
</Content>
19+
</ItemGroup>
20+
1521
</Project>
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
@page "/BGImageDemo"
22

3-
<Demos.Core.SignaturePadDemos.BackgroundImageDemo @rendermode="InteractiveServer" />
3+
<BackgroundImageDemo @rendermode="InteractiveServer" />
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
@page "/Disabled"
22

3-
<Demos.Core.SignaturePadDemos.DisabledDemo @rendermode="InteractiveServer" />
3+
<DisabledDemo @rendermode="InteractiveServer" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
@page "/ExistingSignature"
2+
3+
<ExistingSignatureDemo @rendermode="InteractiveServer" />
4+
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
@page "/"
22

3-
<Demos.Core.SignaturePadDemos.HomeDemo @rendermode="InteractiveServer" />
3+
<HomeDemo @rendermode="InteractiveServer" />
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
@page "/OptionsDemo"
22

3-
<Demos.Core.SignaturePadDemos.OptionsDemo @rendermode="InteractiveServer" />
3+
<OptionsDemo @rendermode="InteractiveServer" />

BlazorSRRDemo/BlazorSRRDemo/Components/_Imports.razor

+1
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
@using BlazorSRRDemo
1010
@using BlazorSRRDemo.Components
1111
@using Demos.Core
12+
@using Demos.Core.SignaturePadDemos

BlazorServerDemo/BlazorServerDemo.csproj

+6
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,10 @@
1111
<ProjectReference Include="..\SignaturePad\SignaturePad.csproj" />
1212
</ItemGroup>
1313

14+
<ItemGroup>
15+
<Content Update="Pages\ExistingSignature.razor">
16+
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
17+
</Content>
18+
</ItemGroup>
19+
1420
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
@page "/ExistingSignature"
2+
3+
<ExistingSignatureDemo />
4+

BlazorWebAssemblyDemo/BlazorWebAssemblyDemo.csproj

+6
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,10 @@
1616
<ProjectReference Include="..\Demos.Core\Demos.Core.csproj" />
1717
</ItemGroup>
1818

19+
<ItemGroup>
20+
<Content Update="Pages\ExistingSignature.razor">
21+
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
22+
</Content>
23+
</ItemGroup>
24+
1925
</Project>
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
@page "/BGImageDemo"
22

3-
<Demos.Core.SignaturePadDemos.BackgroundImageDemo />
3+
<BackgroundImageDemo />
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
@page "/Disabled"
22

3-
<Demos.Core.SignaturePadDemos.DisabledDemo />
3+
<DisabledDemo />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
@page "/ExistingSignature"
2+
3+
4+
<ExistingSignatureDemo />
5+

BlazorWebAssemblyDemo/Pages/Home.razor

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66

77
Welcome to your new app.
88

9-
<Demos.Core.SignaturePadDemos.HomeDemo />
9+
<HomeDemo />
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
@page "/OptionsDemo"
22

3-
<Demos.Core.SignaturePadDemos.OptionsDemo />
3+
<OptionsDemo />

BlazorWebAssemblyDemo/_Imports.razor

+1
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
@using BlazorWebAssemblyDemo
1010
@using BlazorWebAssemblyDemo.Layout
1111
@using Demos.Core
12+
@using Demos.Core.SignaturePadDemos

Demos.Core/Demos.Core.csproj

+6
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,10 @@
1919
<ProjectReference Include="..\SignaturePad\SignaturePad.csproj" />
2020
</ItemGroup>
2121

22+
<ItemGroup>
23+
<Content Update="SignaturePadDemos\ExistingSignatureDemo.razor">
24+
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
25+
</Content>
26+
</ItemGroup>
27+
2228
</Project>

Demos.Core/NavMenu.razor

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@
2929
</NavLink>
3030
</div>
3131

32+
<div class="nav-item px-3">
33+
<NavLink class="nav-link" href="ExistingSignature" Match="NavLinkMatch.All">
34+
<span class="oi oi-home" aria-hidden="true"></span> Existing signature
35+
</NavLink>
36+
</div>
37+
3238
<div class="nav-item px-3">
3339
<NavLink class="nav-link" href="BGImageDemo" Match="NavLinkMatch.All">
3440
<span class="oi oi-home" aria-hidden="true"></span> BG Image
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
@using System.Text
2+
@inject NavigationManager navigationManager
3+
@inject SignatureInMemoryService memoryService
4+
5+
<h1>SignaturePad Default Demo</h1>
6+
<SignaturePad @bind-Value="Input.Signature" style="width: 100%;" />
7+
8+
9+
@if (Input.Signature.Any())
10+
{
11+
<h2>Signature</h2>
12+
<img src="@Input.SignatureAsBase64" />
13+
<button type="button" class="btn btn-primary" @onclick="SaveSignature">Save signature</button>
14+
<button type="button" class="btn btn-primary" @onclick="OpenSignature">Open signature</button>
15+
}
16+
17+
@if(memoryService.Signature.Any())
18+
{
19+
<button type="button" class="btn btn-primary ms-1" @onclick="ReadSignature">Read signature</button>
20+
}
21+
22+
@code {
23+
public MyInput Input { get; set; } = new();
24+
25+
public ExistingSignatureDemo()
26+
{
27+
Input.Signature = Encoding.UTF8.GetBytes("data:image/png;base64, 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");
28+
}
29+
30+
private void SaveSignature()
31+
{
32+
memoryService.Signature = Input.Signature;
33+
}
34+
35+
private void OpenSignature()
36+
{
37+
navigationManager.NavigateTo(Input.SignatureAsBase64);
38+
}
39+
40+
private void ReadSignature()
41+
{
42+
Input.Signature = memoryService.Signature;
43+
StateHasChanged();
44+
}
45+
}

SignaturePad/SignaturePad.razor.cs

+10-16
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,8 @@ namespace SignaturePad
88
public partial class SignaturePad
99
{
1010
[Parameter]
11-
public byte[] Value
12-
{
13-
get => _value;
14-
set
15-
{
16-
if (value == _value) return;
17-
18-
_value = value;
19-
UpdateImage();
20-
}
21-
}
11+
public byte[] Value { get; set; } = [];
12+
2213
[Parameter]
2314
public EventCallback<byte[]> ValueChanged { get; set; }
2415
[Parameter]
@@ -36,6 +27,7 @@ public byte[] Value
3627
public bool Disabled { get; set; }
3728

3829

30+
3931
/// <summary>
4032
/// Captures all the custom attributes that are not part of BlazorBootstrap component.
4133
/// </summary>
@@ -45,8 +37,8 @@ public byte[] Value
4537
private readonly string _id = Guid.NewGuid().ToString();
4638
private readonly DotNetObjectReference<SignaturePad> _reference;
4739
private IJSObjectReference? _jsModule;
48-
private byte[] _value = [];
49-
40+
41+
5042
public SignaturePad()
5143
{
5244
_reference = DotNetObjectReference.Create(this);
@@ -56,19 +48,19 @@ public SignaturePad()
5648
public async Task SignatureDataChangedAsync()
5749
{
5850
using MemoryStream memoryStream = new();
59-
var dataReference = await _jsModule.InvokeAsync<IJSStreamReference>("getBase64", _id);
51+
var dataReference = await _jsModule!.InvokeAsync<IJSStreamReference>("getBase64", _id);
6052
using var dataReferenceStream = await dataReference.OpenReadStreamAsync(maxAllowedSize: 10_000_000);
6153
await dataReferenceStream.CopyToAsync(memoryStream);
6254

6355
string base64 = Encoding.UTF8.GetString(memoryStream.ToArray());
6456

6557
try
6658
{
67-
_value = Convert.FromBase64String(base64);
59+
Value = Convert.FromBase64String(base64);
6860
}
6961
catch (Exception)
7062
{
71-
_value = [];
63+
Value = [];
7264
}
7365

7466

@@ -82,6 +74,8 @@ protected async override Task OnAfterRenderAsync(bool firstRender)
8274
{
8375
_jsModule = await jsRuntime.InvokeAsync<IJSObjectReference>("import", "./_content/Blazor.SignaturePad/sigpad.interop.js?ver=8.1.2");
8476
await Setup();
77+
await Update();
78+
await UpdateImage();
8579
}
8680

8781
await base.OnAfterRenderAsync(firstRender);

0 commit comments

Comments
 (0)