-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKimiJsInterop.cs
131 lines (113 loc) · 5.29 KB
/
KimiJsInterop.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using Microsoft.JSInterop;
namespace Kimi.CkEditor
{
// This class provides an example of how JavaScript functionality can be wrapped in a .NET class
// for easy consumption. The associated JavaScript module is loaded on demand when first needed.
//
// This class can be registered as scoped DI service and then injected into Blazor components
// for use.
public class KimiJsInterop : IAsyncDisposable
{
private readonly Lazy<Task<IJSObjectReference>> kimiTask;
private readonly Lazy<Task<IJSObjectReference>> threeTask;
private readonly Lazy<Task<IJSObjectReference>> stepTask;
private readonly Lazy<Task<IJSObjectReference>> ckEditorTask;
private IJSRuntime jsRuntime;
public KimiJsInterop(IJSRuntime jsRuntime)
{
this.jsRuntime = jsRuntime;
kimiTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
"import", "./_content/Kimi.CkEditor/kimi.js").AsTask());
ckEditorTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
"import", "./_content/Kimi.CkEditor/blazorCkEditor.js").AsTask());
threeTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
"import", "./_content/Kimi.CkEditor/blazorThreeJs.js").AsTask());
stepTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
"import", "./_content/Kimi.CkEditor/blazorStep.js").AsTask());
}
public async ValueTask show3dContent(string divId, string file)
{
var three = await threeTask.Value;
await three.InvokeVoidAsync("show3dContent", new object[] { divId, file });
}
public async ValueTask showStepContent(string divId, string file)
{
var step = await stepTask.Value;
await step.InvokeVoidAsync("showStepContent", new object[] { divId, file });
}
public async ValueTask createCkEditor(string editorId, string containerId, string html, bool isReadonly, string callbackFunc, object dotNet)
{
var module = await ckEditorTask.Value;
await module.InvokeVoidAsync("createCKEditor", new object[] { editorId, html, isReadonly, callbackFunc, dotNet });
await SetAllSubElementsWithSameSelector(containerId);
}
public async ValueTask DisposeCkEditor(string editorId)
{
var module = await ckEditorTask.Value;
await module.InvokeVoidAsync("destroy", new object[] { editorId });
}
public async ValueTask SetCkEditorReadonly(string editorId, bool isReadonly)
{
var module = await ckEditorTask.Value;
await module.InvokeVoidAsync("setReadonly", new object[] { editorId, isReadonly });
}
public async ValueTask setCkEditorHtml(string html)
{
await jsRuntime.InvokeVoidAsync("editor.setData", new object[] { html });
}
public async ValueTask SaveAsFile(string fileName, byte[] fileByte)
{
var module = await kimiTask.Value;
var basw64str = Convert.ToBase64String(fileByte);
await module.InvokeAsync<string>("saveAsFile", new object[] { fileName, basw64str });
}
public async ValueTask setNotScrollMaxHeight(string id, int desiredMargin)
{
var module = await kimiTask.Value;
await module.InvokeAsync<string>("setNotScrollMaxHeight", new object[] { id, desiredMargin });
}
public async ValueTask setNotScrollMaxHeightByClass(string className, int desiredMargin)
{
var module = await kimiTask.Value;
await module.InvokeAsync<string>("setNotScrollMaxHeightByClass", new object[] { className, desiredMargin });
}
public async ValueTask setDivReadonlyByDivId(string id, bool isReadOnly)
{
var module = await kimiTask.Value;
await module.InvokeAsync<string>("setDivReadOnlyByDivId", new object[] { id, isReadOnly });
}
public async ValueTask setDivReadonlyByDivClassName(string divClassName, bool isReadOnly)
{
var module = await kimiTask.Value;
await module.InvokeAsync<string>("setDivReadOnlyByDivClassName", new object[] { divClassName, isReadOnly });
}
public async ValueTask removeDiv(string divId)
{
var module = await kimiTask.Value;
await module.InvokeAsync<string>("removeDiv", new object[] { divId });
}
public async ValueTask SetAllSubElementsWithSameSelector(string divId)
{
var module = await kimiTask.Value;
await module.InvokeAsync<string>("setAllSubElementsWithSameSelector", new object[] { divId });
}
public async ValueTask DisposeAsync()
{
if (kimiTask.IsValueCreated)
{
var module = await kimiTask.Value;
await module.DisposeAsync();
}
if (threeTask.IsValueCreated)
{
var module = await threeTask.Value;
await module.DisposeAsync();
}
if (ckEditorTask.IsValueCreated)
{
var module = await ckEditorTask.Value;
await module.DisposeAsync();
}
}
}
}