Skip to content

Commit 4dfefe6

Browse files
committed
Add some more infrastructure
1 parent cbd1841 commit 4dfefe6

File tree

6 files changed

+68
-10
lines changed

6 files changed

+68
-10
lines changed

Source/Extensions/Blazorise.RichTextEdit.Rooster/JSRoosterModule.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ public JSRoosterModule( IJSRuntime jsRuntime, IVersionProvider versionProvider )
1515
/// <inheritdoc/>
1616
public override string ModuleFileName => $"./_content/Blazorise.RichTextEdit.Rooster/blazorise.rooster.js?v={VersionProvider.Version}";
1717

18-
public ValueTask Initialize( DotNetObjectReference<RichTextEdit> adapterReference, ElementReference elementRef, string elementId, object options )
18+
public ValueTask Initialize( DotNetObjectReference<RoosterAdapter> adapterReference, ElementReference elementRef, string elementId, object options )
1919
=> InvokeSafeVoidAsync( "initialize", adapterReference, elementRef, elementId, options );
2020

2121
public ValueTask Destroy( ElementReference elementRef, string elementId )
22-
=> ValueTask.CompletedTask;
22+
=> InvokeSafeVoidAsync( "destroy", elementRef, elementId );
2323
}
Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
11
@namespace Blazorise.RichTextEdit.Rooster
22
@inherits BaseComponent
3-
4-
<div @ref="@ElementRef"
5-
id="@ElementId"
6-
class="@ClassNames"
7-
style="width: 500px; height: 300px; overflow: auto; border: solid 1px black"
8-
@attributes="@Attributes">
9-
</div>
3+
<div @ref="@ElementRef" id="@ElementId" class="@ClassNames" style="@StyleNames" @attributes="@Attributes" />

Source/Extensions/Blazorise.RichTextEdit.Rooster/RichTextEdit.razor.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,59 @@
11
using System.Threading.Tasks;
2+
using Blazorise.Extensions;
3+
using Blazorise.Utilities;
24
using Microsoft.AspNetCore.Components;
35
using Microsoft.JSInterop;
46

57
namespace Blazorise.RichTextEdit.Rooster;
68

9+
/// <summary>
10+
/// RichTextEdit based on rooster.js
11+
/// </summary>
712
public partial class RichTextEdit : BaseComponent
813
{
14+
private DotNetObjectReference<RoosterAdapter> adapter;
15+
16+
/// <inheritdoc/>
917
protected override async Task OnAfterRenderAsync( bool firstRender )
1018
{
1119
await base.OnAfterRenderAsync( firstRender );
1220

1321
if ( firstRender )
1422
{
1523
JSModule ??= new JSRoosterModule( JSRuntime, VersionProvider );
16-
var adapter = DotNetObjectReference.Create( this );
24+
adapter = DotNetObjectReference.Create( new RoosterAdapter( this ) );
1725

1826
await JSModule.Initialize( adapter, ElementRef, ElementId, default );
1927
}
2028
}
2129

30+
/// <inheritdoc/>
31+
protected override void BuildClasses( ClassBuilder builder )
32+
{
33+
builder.Append( "b-rte-rooster" );
34+
35+
base.BuildClasses( builder );
36+
}
37+
38+
/// <inheritdoc/>
39+
protected override async ValueTask DisposeAsync( bool disposing )
40+
{
41+
if ( disposing && Rendered )
42+
{
43+
await JSModule.SafeDestroy( ElementRef, ElementId );
44+
45+
await JSModule.SafeDisposeAsync();
46+
47+
if ( adapter != null )
48+
{
49+
adapter.Dispose();
50+
adapter = null;
51+
}
52+
}
53+
54+
await base.DisposeAsync( disposing );
55+
}
56+
2257
internal JSRoosterModule JSModule { get; set; }
2358

2459
[Inject] private IJSRuntime JSRuntime { get; set; }
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Blazorise.RichTextEdit.Rooster;
2+
3+
internal class RoosterAdapter
4+
{
5+
private readonly RichTextEdit rte;
6+
7+
public RoosterAdapter( RichTextEdit rte )
8+
{
9+
this.rte = rte;
10+
}
11+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.b-rte-rooster {
2+
width: 500px;
3+
height: 300px;
4+
overflow: auto;
5+
border: solid 1px black;
6+
}

Source/Extensions/Blazorise.RichTextEdit.Rooster/wwwroot/blazorise.rooster.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const _instances = [];
44

5+
document.getElementsByTagName("head")[0].insertAdjacentHTML("beforeend", "<link rel=\"stylesheet\" href=\"_content/Blazorise.RichTextEdit.Rooster/blazorise.rooster.css?v=1.2.2.0\" />");
56

67
export async function initialize(dotNetAdapter, element, elementId, options) {
78
element = getRequiredElement(element, elementId);
@@ -26,3 +27,14 @@ export async function initialize(dotNetAdapter, element, elementId, options) {
2627
_instances[elementId] = instance;
2728
}
2829

30+
export function destroy(element, elementId) {
31+
const instances = _instances || {};
32+
const instance = instances[elementId];
33+
34+
if (!instance)
35+
return;
36+
37+
instance.rooster.dispose();
38+
delete instances[elementId];
39+
}
40+

0 commit comments

Comments
 (0)