diff --git a/src/BootstrapBlazor.Shared/Locales/en.json b/src/BootstrapBlazor.Shared/Locales/en.json index b279ec6972bed5bdcc59df30f3dd3c9dd5b0db7d..52ce97f203a35b2574c8d4ae46e15a0ef8baf48a 100644 --- a/src/BootstrapBlazor.Shared/Locales/en.json +++ b/src/BootstrapBlazor.Shared/Locales/en.json @@ -1086,7 +1086,12 @@ "Ret1": "
Data returned from plugin1
", "Swal2Title": "After clicking the plugin2 button, a pop-up window will appear", "Swal2Content": "After clicking the plug-in button, the window will pop up and confirm before proceeding to the next step.", - "Ret2": "Data returned from plugin2" + "Ret2": "Data returned from plugin2", + "DoMethodAsync": "Instance Method", + "DoMethodAsyncIntro": "Call the instance method, please refer summernote api", + "DoMethodAsyncButton1": "Insert Html", + "DoMethodAsyncButton2": "Update to H2", + "DoMethodAsyncButton3": "Insert Image" }, "BootstrapBlazor.Shared.Samples.EditorForms": { "Title": "EditorForm", diff --git a/src/BootstrapBlazor.Shared/Locales/zh.json b/src/BootstrapBlazor.Shared/Locales/zh.json index a925c13b869047bdc294dc5e5e6872511942cba9..ba79819045e89ce30e93cfe43e2b855603492efe 100644 --- a/src/BootstrapBlazor.Shared/Locales/zh.json +++ b/src/BootstrapBlazor.Shared/Locales/zh.json @@ -1088,7 +1088,12 @@ "Ret1": "
从plugin1返回的数据
", "Swal2Title": "点击 plugin2 按钮后弹窗", "Swal2Content": "点击插件按钮后弹窗并确认后才进行下一步处理", - "Ret2": "从plugin2返回的数据" + "Ret2": "从plugin2返回的数据", + "DoMethodAsync": "实例方法", + "DoMethodAsyncIntro": "使用实例方法从外部操作 Editor,具体的参数参照 summernote api", + "DoMethodAsyncButton1": "插入一段 Html", + "DoMethodAsyncButton2": "将段落修改为 H2", + "DoMethodAsyncButton3": "添加一张图片" }, "BootstrapBlazor.Shared.Samples.EditorForms": { "Title": "EditorForm 表单组件", diff --git a/src/BootstrapBlazor.Shared/Samples/Editors.razor b/src/BootstrapBlazor.Shared/Samples/Editors.razor index 1e4b6c2897b14d5f7ca25552a2cb1019b366735e..394aef2ab0fdaddfd01343fe28adc26a439a1a86 100644 --- a/src/BootstrapBlazor.Shared/Samples/Editors.razor +++ b/src/BootstrapBlazor.Shared/Samples/Editors.razor @@ -16,7 +16,7 @@

@((MarkupString)Localizer["P3"].Value)

- +
@@ -48,4 +48,14 @@ + +

@((MarkupString)Localizer["P6"].Value)

+ +
+ + + +
+
+ diff --git a/src/BootstrapBlazor.Shared/Samples/Editors.razor.cs b/src/BootstrapBlazor.Shared/Samples/Editors.razor.cs index 922b8d680803eb5219893d4ca102d1b39b6caea3..d791639ced2c5ecc867040d6636370b359109c90 100644 --- a/src/BootstrapBlazor.Shared/Samples/Editors.razor.cs +++ b/src/BootstrapBlazor.Shared/Samples/Editors.razor.cs @@ -14,6 +14,9 @@ public sealed partial class Editors { private string? EditorValue { get; set; } + [NotNull] + private Editor? Editor { get; set; } + private Task OnValueChanged(string val) { EditorValue = val; @@ -25,6 +28,11 @@ public sealed partial class Editors EditorValue = Localizer["UpdateValue"]; } + private async Task InsertHtmlAsync() + { + await Editor.DoMethodAysnc("pasteHTML", "

这里是外部按钮插入的内容

"); + } + private List? EditorPluginItems { get; set; } private async Task PluginClick(string pluginItemName) diff --git a/src/BootstrapBlazor.Shared/Samples/Markdowns.razor b/src/BootstrapBlazor.Shared/Samples/Markdowns.razor index 70a467bf6f00774d0d4e35d8abe17f4f614319bc..d97b46941de4c725aac3ad5618b10f95cf5a6678 100644 --- a/src/BootstrapBlazor.Shared/Samples/Markdowns.razor +++ b/src/BootstrapBlazor.Shared/Samples/Markdowns.razor @@ -86,4 +86,11 @@ + + + + + + + diff --git a/src/BootstrapBlazor.Shared/Samples/Markdowns.razor.cs b/src/BootstrapBlazor.Shared/Samples/Markdowns.razor.cs index ed7b7473d5ed2fb9208c1eeafba12b0e43e66c62..df6e5cfb1a2d027b652ce1f4e6f341952428a07e 100644 --- a/src/BootstrapBlazor.Shared/Samples/Markdowns.razor.cs +++ b/src/BootstrapBlazor.Shared/Samples/Markdowns.razor.cs @@ -2,6 +2,7 @@ // 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 BootstrapBlazor.Components; using BootstrapBlazor.Shared.Common; using System.Globalization; @@ -29,6 +30,9 @@ public partial class Markdowns console.log('test'); ```"; + [NotNull] + private Markdown? Markdown { get; set; } + /// /// OnInitializedAsync 方法 /// diff --git a/src/BootstrapBlazor/Components/Editor/Editor.js b/src/BootstrapBlazor/Components/Editor/Editor.js index c33395c45e854e2a496814897b354be65032a393..ca5ba018ecc1b7b57e4b7fca0f689db88d85111d 100644 --- a/src/BootstrapBlazor/Components/Editor/Editor.js +++ b/src/BootstrapBlazor/Components/Editor/Editor.js @@ -111,6 +111,10 @@ else { invoker(); } + }, + bb_editor_method: function (el, method, parameter) { + var editor = el.getElementsByClassName("editor-body"); + $(editor).toggleClass('open').summernote(method, ...parameter); } }); })(jQuery); diff --git a/src/BootstrapBlazor/Components/Editor/Editor.razor.cs b/src/BootstrapBlazor/Components/Editor/Editor.razor.cs index bc32c63342635355205ed57f9baa1cb3518838b3..3252225032c978341cec95e2d0d03d1eb4114add 100644 --- a/src/BootstrapBlazor/Components/Editor/Editor.razor.cs +++ b/src/BootstrapBlazor/Components/Editor/Editor.razor.cs @@ -104,6 +104,11 @@ public partial class Editor : IDisposable [Parameter] public Func>? OnClickButton { get; set; } + /// + /// 执行editor的方法 + /// + public ValueTask DoMethodAysnc(string method, params object[] value) => JSRuntime.InvokeVoidAsync(EditorElement, "bb_editor_method", method, value); + /// /// OnInitialized 方法 /// diff --git a/src/BootstrapBlazor/wwwroot/js/bootstrap.blazor.bundle.min.js b/src/BootstrapBlazor/wwwroot/js/bootstrap.blazor.bundle.min.js index a5c6e31844dd1719329a40c858c2c6ef431dee09..08bb1e33e5a10d5332af81fe4ffd64f00cfea990 100644 --- a/src/BootstrapBlazor/wwwroot/js/bootstrap.blazor.bundle.min.js +++ b/src/BootstrapBlazor/wwwroot/js/bootstrap.blazor.bundle.min.js @@ -13,4 +13,4 @@ var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this /*! Summernote v0.8.18 | (c) 2013- Alan Hong and other contributors | MIT license */ !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("jquery"));else if("function"==typeof define&&define.amd)define(["jquery"],e);else{var n="object"==typeof exports?e(require("jquery")):e(t.jQuery);for(var o in n)("object"==typeof exports?exports:t)[o]=n[o]}}(self,(function(t){return(()=>{"use strict";var e={9458:e=>{e.exports=t}},n={};function o(t){var i=n[t];if(void 0!==i)return i.exports;var r=n[t]={exports:{}};return e[t](r,r.exports,o),r.exports}o.amdO={},o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var n in e)o.o(e,n)&&!o.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var i={};return(()=>{o.r(i);var t=o(9458),e=o.n(t);function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,e){for(var n=0;n'),u=s('