From 46cf7df960ceb6a70cf4b8b45e0af0bd27fa8dc8 Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Fri, 14 Oct 2022 00:01:27 +0800 Subject: [PATCH 1/9] =?UTF-8?q?wip:=20=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Ajax/Ajax.cs | 40 +++++++++++------ .../BootstrapBlazorRoot.razor.cs | 3 ++ src/BootstrapBlazor/wwwroot/modules/ajax.js | 44 +++++++++++++++++++ 3 files changed, 73 insertions(+), 14 deletions(-) create mode 100644 src/BootstrapBlazor/wwwroot/modules/ajax.js diff --git a/src/BootstrapBlazor/Components/Ajax/Ajax.cs b/src/BootstrapBlazor/Components/Ajax/Ajax.cs index 43f9c98f3..f3540ac8f 100644 --- a/src/BootstrapBlazor/Components/Ajax/Ajax.cs +++ b/src/BootstrapBlazor/Components/Ajax/Ajax.cs @@ -7,7 +7,8 @@ namespace BootstrapBlazor.Components; /// /// Ajax 组件 /// -public class Ajax : BootstrapComponentBase, IDisposable +[JSModuleAutoLoader] +public class Ajax : BootstrapModuleComponentBase { [Inject] [NotNull] @@ -23,10 +24,24 @@ public class Ajax : BootstrapComponentBase, IDisposable AjaxService.RegisterGoto(this, Goto); } + /// + /// + /// + /// + /// + protected override Task ModuleInvokeVoidAsync(bool firstRender) + { + return Task.CompletedTask; + } + private async Task GetMessage(AjaxOption option) { - var obj = await JSRuntime.InvokeAsync(null, "bb_ajax", option.Url, option.Method, option.Data); - return obj; + string? ret = null; + if (Module != null) + { + ret = await Module.InvokeAsync($"{ModuleName}.execute", option.Url, option.Method, option.Data); + } + return ret; } private async Task Goto(string url) @@ -35,23 +50,20 @@ public class Ajax : BootstrapComponentBase, IDisposable } /// - /// Dispose 方法 + /// /// - protected virtual void Dispose(bool disposing) + protected override async ValueTask DisposeAsync(bool disposing) { if (disposing) { AjaxService.UnRegister(this); AjaxService.UnRegisterGoto(this); - } - } - /// - /// Dispose 方法 - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); + if (Module != null) + { + await Module.DisposeAsync(); + Module = null; + } + } } } diff --git a/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRoot.razor.cs b/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRoot.razor.cs index 8b3566726..389334be3 100644 --- a/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRoot.razor.cs +++ b/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRoot.razor.cs @@ -101,6 +101,9 @@ public partial class BootstrapBlazorRoot builder.OpenComponent(0); builder.CloseComponent(); + builder.OpenComponent(1); + builder.CloseComponent(); + builder.OpenComponent(2); builder.CloseComponent(); diff --git a/src/BootstrapBlazor/wwwroot/modules/ajax.js b/src/BootstrapBlazor/wwwroot/modules/ajax.js new file mode 100644 index 000000000..2bcb7feee --- /dev/null +++ b/src/BootstrapBlazor/wwwroot/modules/ajax.js @@ -0,0 +1,44 @@ +export class Ajax { + static execute(url, method, data) { + data = JSON.stringify(data); + + const ajax = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP") + ajax.open(method, url, true); + ajax.send(); + + //4.接收 + oAjax.onreadystatechange = function () { + if (oAjax.readyState == 4) { + if (oAjax.status == 200) { + //alert('成功了:'+oAjax.responseText); + fnSucc(oAjax.responseText); + } else { + //alert('失败了'); + if (fnFaild) { + fnFaild(); + } + } + } + }; + + var res = null; + $.ajax({ + url: url, + data: data, + method: method, + contentType: 'application/json', + dataType: 'json', + async: false, + success: function (result) { + res = result; + }, + error: function (XMLHttpRequest, textStatus, errorThrown) { + return null; + } + }); + if (res == null) { + return null; + } + return JSON.stringify(res); + } +} -- Gitee From 4cf910a226fb70648b89af8ef13f86151a49ed66 Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Thu, 3 Nov 2022 16:30:10 +0800 Subject: [PATCH 2/9] =?UTF-8?q?refactor:=20=E7=94=A8=20fetch=20=E4=BB=A3?= =?UTF-8?q?=E6=9B=BF=20ajax?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Ajax/Ajax.cs | 17 +----- src/BootstrapBlazor/Components/Ajax/Ajax.js | 29 --------- .../Components/Ajax/AjaxService.cs | 2 +- .../wwwroot/bundle/bootstrap.blazor.js | 30 ---------- .../wwwroot/js/bootstrap.blazor.bundle.js | 30 ---------- src/BootstrapBlazor/wwwroot/modules/ajax.js | 60 +++++++------------ 6 files changed, 27 insertions(+), 141 deletions(-) delete mode 100644 src/BootstrapBlazor/Components/Ajax/Ajax.js diff --git a/src/BootstrapBlazor/Components/Ajax/Ajax.cs b/src/BootstrapBlazor/Components/Ajax/Ajax.cs index f3540ac8f..04623e85d 100644 --- a/src/BootstrapBlazor/Components/Ajax/Ajax.cs +++ b/src/BootstrapBlazor/Components/Ajax/Ajax.cs @@ -20,7 +20,7 @@ public class Ajax : BootstrapModuleComponentBase protected override void OnInitialized() { base.OnInitialized(); - AjaxService.Register(this, GetMessage); + AjaxService.Register(this, InvokeAsync); AjaxService.RegisterGoto(this, Goto); } @@ -34,20 +34,9 @@ public class Ajax : BootstrapModuleComponentBase return Task.CompletedTask; } - private async Task GetMessage(AjaxOption option) - { - string? ret = null; - if (Module != null) - { - ret = await Module.InvokeAsync($"{ModuleName}.execute", option.Url, option.Method, option.Data); - } - return ret; - } + private Task InvokeAsync(AjaxOption option) => InvokeAsync("execute", option); - private async Task Goto(string url) - { - await JSRuntime.InvokeVoidAsync(null, "bb_ajax_goto", url); - } + private Task Goto(string url) => InvokeAsync("goto", url); /// /// diff --git a/src/BootstrapBlazor/Components/Ajax/Ajax.js b/src/BootstrapBlazor/Components/Ajax/Ajax.js deleted file mode 100644 index a1d91702d..000000000 --- a/src/BootstrapBlazor/Components/Ajax/Ajax.js +++ /dev/null @@ -1,29 +0,0 @@ -(function ($) { - $.extend({ - bb_ajax: function (url, method, data) { - data = JSON.stringify(data); - var res = null; - $.ajax({ - url: url, - data: data, - method: method, - contentType: 'application/json', - dataType: 'json', - async: false, - success: function (result) { - res = result; - }, - error: function (XMLHttpRequest, textStatus, errorThrown) { - return null; - } - }); - if (res == null) { - return null; - } - return JSON.stringify(res); - }, - bb_ajax_goto: function (url) { - window.location.href = url; - } - }); -})(jQuery); diff --git a/src/BootstrapBlazor/Components/Ajax/AjaxService.cs b/src/BootstrapBlazor/Components/Ajax/AjaxService.cs index 1e760628d..6af55ca4e 100644 --- a/src/BootstrapBlazor/Components/Ajax/AjaxService.cs +++ b/src/BootstrapBlazor/Components/Ajax/AjaxService.cs @@ -62,7 +62,7 @@ public class AjaxService /// /// /// - public async Task GetMessage(AjaxOption option) + public async Task InvokeAsync(AjaxOption option) { var cb = Cache.FirstOrDefault().Callback; return cb == null ? null : await cb.Invoke(option); diff --git a/src/BootstrapBlazor/wwwroot/bundle/bootstrap.blazor.js b/src/BootstrapBlazor/wwwroot/bundle/bootstrap.blazor.js index f682f697e..3786c3814 100644 --- a/src/BootstrapBlazor/wwwroot/bundle/bootstrap.blazor.js +++ b/src/BootstrapBlazor/wwwroot/bundle/bootstrap.blazor.js @@ -1178,36 +1178,6 @@ $.fn.lgbTab.Constructor = Tab; })(jQuery); -(function ($) { - $.extend({ - bb_ajax: function (url, method, data) { - data = JSON.stringify(data); - var res = null; - $.ajax({ - url: url, - data: data, - method: method, - contentType: 'application/json', - dataType: 'json', - async: false, - success: function (result) { - res = result; - }, - error: function (XMLHttpRequest, textStatus, errorThrown) { - return null; - } - }); - if (res == null) { - return null; - } - return JSON.stringify(res); - }, - bb_ajax_goto: function (url) { - window.location.href = url; - } - }); -})(jQuery); - (function ($) { $.extend({ bb_autoScrollItem: function (el, index) { diff --git a/src/BootstrapBlazor/wwwroot/js/bootstrap.blazor.bundle.js b/src/BootstrapBlazor/wwwroot/js/bootstrap.blazor.bundle.js index 572fd3df7..4439f87bd 100644 --- a/src/BootstrapBlazor/wwwroot/js/bootstrap.blazor.bundle.js +++ b/src/BootstrapBlazor/wwwroot/js/bootstrap.blazor.bundle.js @@ -19165,36 +19165,6 @@ return jQuery; $.fn.lgbTab.Constructor = Tab; })(jQuery); -(function ($) { - $.extend({ - bb_ajax: function (url, method, data) { - data = JSON.stringify(data); - var res = null; - $.ajax({ - url: url, - data: data, - method: method, - contentType: 'application/json', - dataType: 'json', - async: false, - success: function (result) { - res = result; - }, - error: function (XMLHttpRequest, textStatus, errorThrown) { - return null; - } - }); - if (res == null) { - return null; - } - return JSON.stringify(res); - }, - bb_ajax_goto: function (url) { - window.location.href = url; - } - }); -})(jQuery); - (function ($) { $.extend({ bb_autoScrollItem: function (el, index) { diff --git a/src/BootstrapBlazor/wwwroot/modules/ajax.js b/src/BootstrapBlazor/wwwroot/modules/ajax.js index 2bcb7feee..2ae51fe5b 100644 --- a/src/BootstrapBlazor/wwwroot/modules/ajax.js +++ b/src/BootstrapBlazor/wwwroot/modules/ajax.js @@ -1,44 +1,30 @@ export class Ajax { - static execute(url, method, data) { - data = JSON.stringify(data); + static async execute(option) { + option = { + method: 'POST', + url: null, + data: null, + ...option + } - const ajax = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP") - ajax.open(method, url, true); - ajax.send(); + if (option.url === null) + { + window.error('url not allow null') + return null + } - //4.接收 - oAjax.onreadystatechange = function () { - if (oAjax.readyState == 4) { - if (oAjax.status == 200) { - //alert('成功了:'+oAjax.responseText); - fnSucc(oAjax.responseText); - } else { - //alert('失败了'); - if (fnFaild) { - fnFaild(); - } - } + const response = await fetch(option.url, { + method: option.method, + body: JSON.stringify(option.data), + headers: { + 'Content-Type': 'application/json' } - }; + }) + const json = await response.json() + return JSON.stringify(json) + } - var res = null; - $.ajax({ - url: url, - data: data, - method: method, - contentType: 'application/json', - dataType: 'json', - async: false, - success: function (result) { - res = result; - }, - error: function (XMLHttpRequest, textStatus, errorThrown) { - return null; - } - }); - if (res == null) { - return null; - } - return JSON.stringify(res); + static goto(url) { + window.location.href = url } } -- Gitee From 4e84a437c432af47dff07ef576e1301de1970a20 Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Thu, 3 Nov 2022 16:30:20 +0800 Subject: [PATCH 3/9] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/wwwroot/modules/base/utility.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/BootstrapBlazor/wwwroot/modules/base/utility.js b/src/BootstrapBlazor/wwwroot/modules/base/utility.js index 8c26a71d8..c7c1bcf7e 100644 --- a/src/BootstrapBlazor/wwwroot/modules/base/utility.js +++ b/src/BootstrapBlazor/wwwroot/modules/base/utility.js @@ -120,7 +120,7 @@ const getWindow = node => { const addScript = content => { // content 文件名 const links = [...document.getElementsByTagName('script')] - var link = links.filter(function (link) { + let link = links.filter(function (link) { return link.src.indexOf(content) > -1 }) if (link.length === 0) { @@ -132,17 +132,17 @@ const addScript = content => { const removeScript = content => { const links = [...document.getElementsByTagName('script')] - var nodes = links.filter(function (link) { + const nodes = links.filter(function (link) { return link.src.indexOf(content) > -1 }) - for (var index = 0; index < nodes.length; index++) { + for (let index = 0; index < nodes.length; index++) { document.body.removeChild(nodes[index]) } } const addLink = href => { const links = [...document.getElementsByTagName('link')] - var link = links.filter(function (link) { + let link = links.filter(function (link) { return link.href.indexOf(href) > -1 }) if (link.length === 0) { @@ -155,10 +155,10 @@ const addLink = href => { const removeLink = href => { const links = [...document.getElementsByTagName('link')] - var nodes = links.filter(function (link) { + const nodes = links.filter(function (link) { return link.href.indexOf(content) > -1 }) - for (var index = 0; index < nodes.length; index++) { + for (let index = 0; index < nodes.length; index++) { document.getElementsByTagName("head")[0].removeChild(nodes[index]) } } -- Gitee From 6624928b3d11c7993415fc096ce501598a5d7b84 Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Thu, 3 Nov 2022 16:30:30 +0800 Subject: [PATCH 4/9] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor.Shared/Samples/Ajaxs.razor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor.cs b/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor.cs index de77e230f..b9ccf9ca9 100644 --- a/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor.cs +++ b/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor.cs @@ -28,7 +28,7 @@ public partial class Ajaxs Url = "/api/Login", Data = new User() { UserName = "admin", Password = "123456" } }; - var result = await AjaxService.GetMessage(option); + var result = await AjaxService.InvokeAsync(option); if (result == null) { ResultMessage = "响应失败"; @@ -55,7 +55,7 @@ public partial class Ajaxs Url = "/api/Login", Data = new User() { UserName = "admin", Password = "1234567" } }; - var result = await AjaxService.GetMessage(option); + var result = await AjaxService.InvokeAsync(option); if (result == null) { ResultMessage = "响应失败"; -- Gitee From b514a720605fa6fe2827873cb16b7598907f8d1f Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Thu, 3 Nov 2022 16:51:26 +0800 Subject: [PATCH 5/9] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=20Ajax=20?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor.Shared/Locales/en.json | 4 +++- src/BootstrapBlazor.Shared/Locales/zh.json | 6 +++-- .../Samples/Ajaxs.razor | 11 ++++++++-- .../Samples/Ajaxs.razor.cs | 22 +++++++++++++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/BootstrapBlazor.Shared/Locales/en.json b/src/BootstrapBlazor.Shared/Locales/en.json index 676b76b79..d9801282e 100644 --- a/src/BootstrapBlazor.Shared/Locales/en.json +++ b/src/BootstrapBlazor.Shared/Locales/en.json @@ -3220,7 +3220,9 @@ "GotoTitle": "Page jump", "GotoIntro": "Implementing page jumps with Js addresses an issue where Blazor pages don't really refresh when they're jumped as SPA ", "GotoButtonText1": "Jump to the first page of the document", - "GotoButtonText2": "Jump to yourself (refresh page)" + "GotoButtonText2": "Jump to yourself (refresh page)", + "InvokeAsync": "Execute fetch", + "Goto": "Execute goto" }, "BootstrapBlazor.Shared.Samples.Avatars": { "Title": "Avatar", diff --git a/src/BootstrapBlazor.Shared/Locales/zh.json b/src/BootstrapBlazor.Shared/Locales/zh.json index 01ccc31de..6f53975c6 100644 --- a/src/BootstrapBlazor.Shared/Locales/zh.json +++ b/src/BootstrapBlazor.Shared/Locales/zh.json @@ -3218,7 +3218,7 @@ }, "BootstrapBlazor.Shared.Samples.Ajaxs": { "AjaxTitle": "Ajax调用", - "H4": "用于直接在浏览器使用 js 的 ajax 方法与服务器交互,目前只支持输入输出皆为json,返回值为 json 字符串,可以自行转换处理。", + "H4": "用于直接在浏览器使用 fetch 方法与服务器交互,目前只支持输入输出皆为 json,返回值为 json 字符串,可以自行转换处理。", "NormalTitle": "基础用法", "NormalIntro": "模拟登录", "NormalB": "特别注意:", @@ -3228,7 +3228,9 @@ "GotoTitle": "页面跳转", "GotoIntro": "用 Js 实现页面跳转,解决了 Blazor 页面作为 SPA 跳转时不会真正刷新页面的问题", "GotoButtonText1": "跳转到文档首页", - "GotoButtonText2": "跳转到自己(刷新页面)" + "GotoButtonText2": "跳转到自己(刷新页面)", + "InvokeAsync": "执行 fetch 方法", + "Goto": "执行 goto 方法" }, "BootstrapBlazor.Shared.Samples.Avatars": { "Title": "Avatar 头像", diff --git a/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor b/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor index 7b7e88fe2..ff849d594 100644 --- a/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor +++ b/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor @@ -10,14 +10,21 @@ @Localizer["NormalB"]
@((MarkupString)Localizer["NormalDiv"].Value)

-
@ResultMessage
+
var option = new AjaxOption
+{
+    Url = "/api/Login",
+    Data = new User() { UserName = "admin", Password = "1234567" }
+};
+var result = await AjaxService.InvokeAsync(option);
+
@ResultMessage
+
await AjaxService.Goto("/introduction");
- + diff --git a/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor.cs b/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor.cs index b9ccf9ca9..991e7daaa 100644 --- a/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor.cs +++ b/src/BootstrapBlazor.Shared/Samples/Ajaxs.razor.cs @@ -84,4 +84,26 @@ public partial class Ajaxs { await AjaxService.Goto("/ajaxs"); } + + /// + /// 获得属性方法 + /// + /// + private IEnumerable GetMethods() => new MethodItem[] + { + new MethodItem() + { + Name = "InvokeAsync", + Description = Localizer["InvokeAsync"], + Parameters = "AjaxOption", + ReturnValue = "string" + }, + new MethodItem() + { + Name = "Goto", + Description = Localizer["Goto"], + Parameters = "string", + ReturnValue = " — " + } + }; } -- Gitee From beacb08755e2e5d4ab8fe82ccf504cc5b6ece0dc Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Thu, 3 Nov 2022 16:51:35 +0800 Subject: [PATCH 6/9] =?UTF-8?q?doc:=20=E6=A0=BC=E5=BC=8F=E5=8C=96=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Samples/Buttons.razor.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor.Shared/Samples/Buttons.razor.cs b/src/BootstrapBlazor.Shared/Samples/Buttons.razor.cs index 9336c9e98..26f42e461 100644 --- a/src/BootstrapBlazor.Shared/Samples/Buttons.razor.cs +++ b/src/BootstrapBlazor.Shared/Samples/Buttons.razor.cs @@ -178,12 +178,12 @@ public sealed partial class Buttons /// private IEnumerable GetMethods() => new MethodItem[] { - new MethodItem() - { - Name = "SetDisable", - Description = Localizer["MethodDesc1"], - Parameters = "disable", - ReturnValue = " — " - } + new MethodItem() + { + Name = "SetDisable", + Description = Localizer["MethodDesc1"], + Parameters = "disable", + ReturnValue = " — " + } }; } -- Gitee From 93e4fa047d1144f638a1c4df723fe8e51d866b06 Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Thu, 3 Nov 2022 16:51:44 +0800 Subject: [PATCH 7/9] =?UTF-8?q?test:=20=E4=BF=AE=E5=A4=8D=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/AjaxTest.cs | 4 ++-- test/UnitTest/Components/TableFilterTest.cs | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/test/UnitTest/Components/AjaxTest.cs b/test/UnitTest/Components/AjaxTest.cs index 2ec89e7dd..94f33f36d 100644 --- a/test/UnitTest/Components/AjaxTest.cs +++ b/test/UnitTest/Components/AjaxTest.cs @@ -18,10 +18,10 @@ public class AjaxTest : BootstrapBlazorTestBase Data = new { UserName = "admin", Password = "1234567" } }; var service = Context.Services.GetRequiredService(); - _ = service.GetMessage(option); + _ = service.InvokeAsync(option); _ = Context.RenderComponent(); - _ = service.GetMessage(option); + _ = service.InvokeAsync(option); _ = service.Goto("http://www.blazor.zone"); } } diff --git a/test/UnitTest/Components/TableFilterTest.cs b/test/UnitTest/Components/TableFilterTest.cs index da02ee126..e9c44af77 100644 --- a/test/UnitTest/Components/TableFilterTest.cs +++ b/test/UnitTest/Components/TableFilterTest.cs @@ -39,12 +39,6 @@ public class TableFilterTest : BootstrapBlazorTestBase var filterInstance = cut.FindComponent(); - // ConfirmByKey - cut.InvokeAsync(() => filterInstance.Instance.ConfirmByKey()); - - // EscByKey - cut.InvokeAsync(() => filterInstance.Instance.EscByKey()); - // Reset/Confirm buttons // ClickReset var buttons = filterInstance.FindAll(".is-close"); -- Gitee From c24f6889f3481412a2b4965ba29f2d3cf7b5c282 Mon Sep 17 00:00:00 2001 From: Argo-Asicotech Date: Thu, 3 Nov 2022 16:52:44 +0800 Subject: [PATCH 8/9] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E4=B8=8D?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84=E6=89=A9=E5=B1=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/JSRuntimeExtensions.cs | 35 ------------------- .../wwwroot/bundle/bootstrap.blazor.min.js | 2 +- .../wwwroot/js/bootstrap.blazor.bundle.min.js | 2 +- 3 files changed, 2 insertions(+), 37 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/JSRuntimeExtensions.cs b/src/BootstrapBlazor/Extensions/JSRuntimeExtensions.cs index 0198455ab..308dca10e 100644 --- a/src/BootstrapBlazor/Extensions/JSRuntimeExtensions.cs +++ b/src/BootstrapBlazor/Extensions/JSRuntimeExtensions.cs @@ -42,39 +42,4 @@ internal static class JSRuntimeExtensions catch (InvalidOperationException) { } catch (TaskCanceledException) { } } - - /// - /// 调用 JSInvoke 方法 - /// - /// IJSRuntime 实例 - /// Element 实例或者组件 Id - /// Javascript 方法 - /// Javascript 参数 - public static async ValueTask InvokeAsync(this IJSRuntime jsRuntime, object? el = null, string? func = null, params object[] args) - { - TValue? ret = default; - var paras = new List(); - if (el != null) - { - paras.Add(el); - } - - if (args != null) - { - paras.AddRange(args); - } - - try - { - ret = await jsRuntime.InvokeAsync($"$.{func}", paras.ToArray()).ConfigureAwait(false); - } -#if NET6_0_OR_GREATER - catch (JSDisconnectedException) { } -#endif - catch (JSException) { } - catch (AggregateException) { } - catch (InvalidOperationException) { } - catch (TaskCanceledException) { } - return ret; - } } diff --git a/src/BootstrapBlazor/wwwroot/bundle/bootstrap.blazor.min.js b/src/BootstrapBlazor/wwwroot/bundle/bootstrap.blazor.min.js index 9bb13b4a6..aba013aa3 100644 --- a/src/BootstrapBlazor/wwwroot/bundle/bootstrap.blazor.min.js +++ b/src/BootstrapBlazor/wwwroot/bundle/bootstrap.blazor.min.js @@ -1 +1 @@ -(function(n,t){typeof define=="function"&&(define.amd||define.cmd)?define(function(){return t(n)}):typeof exports=="object"?module.exports=t(n):n.Browser=t(n)})(typeof self!="undefined"?self:this,function(n){var r=n||{},t=typeof n.navigator!="undefined"?n.navigator:{},i=function(n,i){var r=t.mimeTypes;for(var u in r)if(r[u][n]==i)return!0;return!1};return function(n){var u=n||t.userAgent||{},f=this,e={Trident:u.indexOf("Trident")>-1||u.indexOf("NET CLR")>-1,Presto:u.indexOf("Presto")>-1,WebKit:u.indexOf("AppleWebKit")>-1,Gecko:u.indexOf("Gecko/")>-1,KHTML:u.indexOf("KHTML/")>-1,Safari:u.indexOf("Safari")>-1,Chrome:u.indexOf("Chrome")>-1||u.indexOf("CriOS")>-1,IE:u.indexOf("MSIE")>-1||u.indexOf("Trident")>-1,Edge:u.indexOf("Edge")>-1||u.indexOf("Edg/")>-1||u.indexOf("EdgA")>-1||u.indexOf("EdgiOS")>-1,Firefox:u.indexOf("Firefox")>-1||u.indexOf("FxiOS")>-1,"Firefox Focus":u.indexOf("Focus")>-1,Chromium:u.indexOf("Chromium")>-1,Opera:u.indexOf("Opera")>-1||u.indexOf("OPR")>-1,Vivaldi:u.indexOf("Vivaldi")>-1,Yandex:u.indexOf("YaBrowser")>-1,Arora:u.indexOf("Arora")>-1,Lunascape:u.indexOf("Lunascape")>-1,QupZilla:u.indexOf("QupZilla")>-1,"Coc Coc":u.indexOf("coc_coc_browser")>-1,Kindle:u.indexOf("Kindle")>-1||u.indexOf("Silk/")>-1,Iceweasel:u.indexOf("Iceweasel")>-1,Konqueror:u.indexOf("Konqueror")>-1,Iceape:u.indexOf("Iceape")>-1,SeaMonkey:u.indexOf("SeaMonkey")>-1,Epiphany:u.indexOf("Epiphany")>-1,"360":u.indexOf("QihooBrowser")>-1||u.indexOf("QHBrowser")>-1,"360EE":u.indexOf("360EE")>-1,"360SE":u.indexOf("360SE")>-1,UC:u.indexOf("UCBrowser")>-1||u.indexOf(" UBrowser")>-1||u.indexOf("UCWEB")>-1,QQBrowser:u.indexOf("QQBrowser")>-1,QQ:u.indexOf("QQ/")>-1,Baidu:u.indexOf("Baidu")>-1||u.indexOf("BIDUBrowser")>-1||u.indexOf("baidubrowser")>-1||u.indexOf("baiduboxapp")>-1||u.indexOf("BaiduHD")>-1,Maxthon:u.indexOf("Maxthon")>-1,Sogou:u.indexOf("MetaSr")>-1||u.indexOf("Sogou")>-1,Liebao:u.indexOf("LBBROWSER")>-1||u.indexOf("LieBaoFast")>-1,"2345Explorer":u.indexOf("2345Explorer")>-1||u.indexOf("Mb2345Browser")>-1||u.indexOf("2345chrome")>-1,"115Browser":u.indexOf("115Browser")>-1,TheWorld:u.indexOf("TheWorld")>-1,XiaoMi:u.indexOf("MiuiBrowser")>-1,Quark:u.indexOf("Quark")>-1,Qiyu:u.indexOf("Qiyu")>-1,Wechat:u.indexOf("MicroMessenger")>-1,WechatWork:u.indexOf("wxwork/")>-1,Taobao:u.indexOf("AliApp(TB")>-1,Alipay:u.indexOf("AliApp(AP")>-1,Weibo:u.indexOf("Weibo")>-1,Douban:u.indexOf("com.douban.frodo")>-1,Suning:u.indexOf("SNEBUY-APP")>-1,iQiYi:u.indexOf("IqiyiApp")>-1,DingTalk:u.indexOf("DingTalk")>-1,Huawei:u.indexOf("HuaweiBrowser")>-1||u.indexOf("HUAWEI/")>-1||u.indexOf("HONOR")>-1||u.indexOf("HBPC/")>-1,Vivo:u.indexOf("VivoBrowser")>-1,Windows:u.indexOf("Windows")>-1,Linux:u.indexOf("Linux")>-1||u.indexOf("X11")>-1,"Mac OS":u.indexOf("Macintosh")>-1,Android:u.indexOf("Android")>-1||u.indexOf("Adr")>-1,HarmonyOS:u.indexOf("HarmonyOS")>-1,Ubuntu:u.indexOf("Ubuntu")>-1,FreeBSD:u.indexOf("FreeBSD")>-1,Debian:u.indexOf("Debian")>-1,"Windows Phone":u.indexOf("IEMobile")>-1||u.indexOf("Windows Phone")>-1,BlackBerry:u.indexOf("BlackBerry")>-1||u.indexOf("RIM")>-1,MeeGo:u.indexOf("MeeGo")>-1,Symbian:u.indexOf("Symbian")>-1,iOS:u.indexOf("like Mac OS X")>-1,"Chrome OS":u.indexOf("CrOS")>-1,WebOS:u.indexOf("hpwOS")>-1,Mobile:u.indexOf("Mobi")>-1||u.indexOf("iPh")>-1||u.indexOf("480")>-1,Tablet:u.indexOf("Tablet")>-1||u.indexOf("Pad")>-1||u.indexOf("Nexus 7")>-1||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1,isWebview:u.indexOf("; wv)")>-1},o=!1,s,h,c,l,v,y,a;r.chrome&&(s=u.replace(/^.*Chrome\/([\d]+).*$/,"$1"),r.chrome.adblock2345||r.chrome.common2345?e["2345Explorer"]=!0:i("type","application/360softmgrplugin")||i("type","application/mozilla-npqihooquicklogin")?o=!0:s>36&&r.showModalDialog?o=!0:s>45&&(o=i("type","application/vnd.chromium.remoting-viewer"),!o&&s>=69&&(o=i("type","application/hwepass2001.installepass2001")||i("type","application/asx"))));e.Mobile?e.Mobile=!(u.indexOf("iPad")>-1):o&&(i("type","application/gameplugin")?e["360SE"]=!0:t&&typeof t.connection!="undefined"&&typeof t.connection.saveData=="undefined"?e["360SE"]=!0:e["360EE"]=!0);e.Baidu&&e.Opera?e.Baidu=!1:e.iOS&&(e.Safari=!0);h={engine:["WebKit","Trident","Gecko","Presto","KHTML"],browser:["Safari","Chrome","Edge","IE","Firefox","Firefox Focus","Chromium","Opera","Vivaldi","Yandex","Arora","Lunascape","QupZilla","Coc Coc","Kindle","Iceweasel","Konqueror","Iceape","SeaMonkey","Epiphany","XiaoMi","Vivo","360","360SE","360EE","UC","QQBrowser","QQ","Huawei","Baidu","Maxthon","Sogou","Liebao","2345Explorer","115Browser","TheWorld","Quark","Qiyu","Wechat","WechatWork","Taobao","Alipay","Weibo","Douban","Suning","iQiYi","DingTalk"],os:["Windows","Linux","Mac OS","Android","HarmonyOS","Ubuntu","FreeBSD","Debian","iOS","Windows Phone","BlackBerry","MeeGo","Symbian","Chrome OS","WebOS"],device:["Mobile","Tablet"]};f.device="PC";f.language=function(){var i=t.browserLanguage||t.language,n=i.split("-");return n[1]&&(n[1]=n[1].toUpperCase()),n.join("_")}();for(c in h)for(l=0;l{const t=parseInt(n.platformVersion.split(".")[0]);t>=13&&(f.osVersion="11.0")});f.isWebview=e.isWebview;a={Safari:function(){return u.replace(/^.*Version\/([\d.]+).*$/,"$1")},Chrome:function(){return u.replace(/^.*Chrome\/([\d.]+).*$/,"$1").replace(/^.*CriOS\/([\d.]+).*$/,"$1")},IE:function(){return u.replace(/^.*MSIE ([\d.]+).*$/,"$1").replace(/^.*rv:([\d.]+).*$/,"$1")},Edge:function(){return u.replace(/^.*Edge\/([\d.]+).*$/,"$1").replace(/^.*Edg\/([\d.]+).*$/,"$1").replace(/^.*EdgA\/([\d.]+).*$/,"$1").replace(/^.*EdgiOS\/([\d.]+).*$/,"$1")},Firefox:function(){return u.replace(/^.*Firefox\/([\d.]+).*$/,"$1").replace(/^.*FxiOS\/([\d.]+).*$/,"$1")},"Firefox Focus":function(){return u.replace(/^.*Focus\/([\d.]+).*$/,"$1")},Chromium:function(){return u.replace(/^.*Chromium\/([\d.]+).*$/,"$1")},Opera:function(){return u.replace(/^.*Opera\/([\d.]+).*$/,"$1").replace(/^.*OPR\/([\d.]+).*$/,"$1")},Vivaldi:function(){return u.replace(/^.*Vivaldi\/([\d.]+).*$/,"$1")},Yandex:function(){return u.replace(/^.*YaBrowser\/([\d.]+).*$/,"$1")},Arora:function(){return u.replace(/^.*Arora\/([\d.]+).*$/,"$1")},Lunascape:function(){return u.replace(/^.*Lunascape[\/\s]([\d.]+).*$/,"$1")},QupZilla:function(){return u.replace(/^.*QupZilla[\/\s]([\d.]+).*$/,"$1")},"Coc Coc":function(){return u.replace(/^.*coc_coc_browser\/([\d.]+).*$/,"$1")},Kindle:function(){return u.replace(/^.*Version\/([\d.]+).*$/,"$1")},Iceweasel:function(){return u.replace(/^.*Iceweasel\/([\d.]+).*$/,"$1")},Konqueror:function(){return u.replace(/^.*Konqueror\/([\d.]+).*$/,"$1")},Iceape:function(){return u.replace(/^.*Iceape\/([\d.]+).*$/,"$1")},SeaMonkey:function(){return u.replace(/^.*SeaMonkey\/([\d.]+).*$/,"$1")},Epiphany:function(){return u.replace(/^.*Epiphany\/([\d.]+).*$/,"$1")},"360":function(){return u.replace(/^.*QihooBrowser\/([\d.]+).*$/,"$1")},"360SE":function(){var n=u.replace(/^.*Chrome\/([\d]+).*$/,"$1");return{"86":"13.0","78":"12.0","69":"11.0","63":"10.0","55":"9.1","45":"8.1","42":"8.0","31":"7.0","21":"6.3"}[n]||""},"360EE":function(){var n=u.replace(/^.*Chrome\/([\d]+).*$/,"$1");return{"95":"21","86":"13.0","78":"12.0","69":"11.0","63":"9.5","55":"9.0","50":"8.7","30":"7.5"}[n]||""},Maxthon:function(){return u.replace(/^.*Maxthon\/([\d.]+).*$/,"$1")},QQBrowser:function(){return u.replace(/^.*QQBrowser\/([\d.]+).*$/,"$1")},QQ:function(){return u.replace(/^.*QQ\/([\d.]+).*$/,"$1")},Baidu:function(){return u.replace(/^.*BIDUBrowser[\s\/]([\d.]+).*$/,"$1").replace(/^.*baiduboxapp\/([\d.]+).*$/,"$1")},UC:function(){return u.replace(/^.*UC?Browser\/([\d.]+).*$/,"$1")},Sogou:function(){return u.replace(/^.*SE ([\d.X]+).*$/,"$1").replace(/^.*SogouMobileBrowser\/([\d.]+).*$/,"$1")},Liebao:function(){var n="",t,i;return u.indexOf("LieBaoFast")>-1&&(n=u.replace(/^.*LieBaoFast\/([\d.]+).*$/,"$1")),t={"57":"6.5","49":"6.0","46":"5.9","42":"5.3","39":"5.2","34":"5.0","29":"4.5","21":"4.0"},i=u.replace(/^.*Chrome\/([\d]+).*$/,"$1"),n||t[i]||""},"2345Explorer":function(){var n=navigator.userAgent.replace(/^.*Chrome\/([\d]+).*$/,"$1");return{"69":"10.0","55":"9.9"}[n]||u.replace(/^.*2345Explorer\/([\d.]+).*$/,"$1").replace(/^.*Mb2345Browser\/([\d.]+).*$/,"$1")},"115Browser":function(){return u.replace(/^.*115Browser\/([\d.]+).*$/,"$1")},TheWorld:function(){return u.replace(/^.*TheWorld ([\d.]+).*$/,"$1")},XiaoMi:function(){return u.replace(/^.*MiuiBrowser\/([\d.]+).*$/,"$1")},Vivo:function(){return u.replace(/^.*VivoBrowser\/([\d.]+).*$/,"$1")},Quark:function(){return u.replace(/^.*Quark\/([\d.]+).*$/,"$1")},Qiyu:function(){return u.replace(/^.*Qiyu\/([\d.]+).*$/,"$1")},Wechat:function(){return u.replace(/^.*MicroMessenger\/([\d.]+).*$/,"$1")},WechatWork:function(){return u.replace(/^.*wxwork\/([\d.]+).*$/,"$1")},Taobao:function(){return u.replace(/^.*AliApp\(TB\/([\d.]+).*$/,"$1")},Alipay:function(){return u.replace(/^.*AliApp\(AP\/([\d.]+).*$/,"$1")},Weibo:function(){return u.replace(/^.*weibo__([\d.]+).*$/,"$1")},Douban:function(){return u.replace(/^.*com.douban.frodo\/([\d.]+).*$/,"$1")},Suning:function(){return u.replace(/^.*SNEBUY-APP([\d.]+).*$/,"$1")},iQiYi:function(){return u.replace(/^.*IqiyiVersion\/([\d.]+).*$/,"$1")},DingTalk:function(){return u.replace(/^.*DingTalk\/([\d.]+).*$/,"$1")},Huawei:function(){return u.replace(/^.*Version\/([\d.]+).*$/,"$1").replace(/^.*HuaweiBrowser\/([\d.]+).*$/,"$1").replace(/^.*HBPC\/([\d.]+).*$/,"$1")}};f.version="";a[f.browser]&&(f.version=a[f.browser](),f.version==u&&(f.version=""));f.browser=="Chrome"&&u.match(/\S+Browser/)&&(f.browser=u.match(/\S+Browser/)[0],f.version=u.replace(/^.*Browser\/([\d.]+).*$/,"$1"));f.browser=="Edge"?f.engine=parseInt(f.version)>75?"Blink":"EdgeHTML":e.Chrome&&f.engine=="WebKit"&&parseInt(a.Chrome())>27?f.engine="Blink":f.browser=="Opera"&&parseInt(f.version)>12?f.engine="Blink":f.browser=="Yandex"&&(f.engine="Blink")}}),function(n){function r(t){return this.each(function(){var u=n(this),r=u.data(i.DATA_KEY),f=typeof t=="object"&&t;r?r.update(f):u.data(i.DATA_KEY,r=new i(this,f))})}var i=function(t,i){this.$element=n(t);this.options=n.extend({},i);this.init()},t;i.VERSION="5.1.0";i.Author="argo@163.com";i.DATA_KEY="lgb.SliderCaptcha";t=i.prototype;t.init=function(){this.initDOM();this.initImg();this.bindEvents()};t.initDOM=function(){var u=this.$element.find("canvas:first")[0].getContext("2d"),t=this.$element.find("canvas:last")[0],f=t.getContext("2d"),e=this.$element.find(".captcha-load"),i=this.$element.find(".captcha-footer"),o=i.find(".captcha-bar-bg"),s=this.$element.find(".captcha-bar"),r=this.$element.find(".captcha-bar-text"),h=this.$element.find(".captcha-refresh"),c=r.attr("data-text");n.extend(this,{canvas:u,block:t,bar:f,$load:e,$footer:i,$barLeft:o,$slider:s,$barText:r,$refresh:h,barText:c})};t.initImg=function(){var i=function(n,t){var i=this.options.sideLength,f=this.options.diameter,e=Math.PI,r=this.options.offsetX,u=this.options.offsetY;n.beginPath();n.moveTo(r,u);n.arc(r+i/2,u-f+2,f,.72*e,2.26*e);n.lineTo(r+i,u);n.arc(r+i+f-2,u+i/2,f,1.21*e,2.78*e);n.lineTo(r+i,u+i);n.lineTo(r,u+i);n.arc(r+f-2,u+i/2,f+.4,2.76*e,1.24*e,!0);n.lineTo(r,u);n.lineWidth=2;n.fillStyle="rgba(255, 255, 255, 0.7)";n.strokeStyle="rgba(255, 255, 255, 0.7)";n.stroke();n[t]();n.globalCompositeOperation="destination-over"},t=new Image,n;t.src=this.options.imageUrl;n=this;t.onload=function(){i.call(n,n.canvas,"fill");i.call(n,n.bar,"clip");n.canvas.drawImage(t,0,0,n.options.width,n.options.height);n.bar.drawImage(t,0,0,n.options.width,n.options.height);var r=n.options.offsetY-n.options.diameter*2-1,u=n.bar.getImageData(n.options.offsetX-3,r,n.options.barWidth,n.options.barWidth);n.block.width=n.options.barWidth;n.bar.putImageData(u,0,r)};t.onerror=function(){n.$load.text($load.attr("data-failed")).addClass("text-danger")}};t.bindEvents=function(){var n=this,t=0,i=0,r=[];this.$slider.drag(function(r){n.$barText.addClass("d-none");t=r.clientX||r.touches[0].clientX;i=r.clientY||r.touches[0].clientY},function(u){var o=u.clientX||u.touches[0].clientX,s=u.clientY||u.touches[0].clientY,f=o-t,h=s-i,e;if(f<0||f+40>n.options.width)return!1;n.$slider.css({left:f-1+"px"});e=(n.options.width-60)/(n.options.width-40)*f;n.block.style.left=e+"px";n.$footer.addClass("is-move");n.$barLeft.css({width:f+4+"px"});r.push(Math.round(h))},function(i){var f=i.clientX||i.changedTouches[0].clientX,u;n.$footer.removeClass("is-move");u=Math.ceil((n.options.width-60)/(n.options.width-40)*(f-t)+3);n.verify(u,r)});this.$refresh.on("click",function(){n.options.barText=n.$barText.attr("data-text")})};t.verify=function(n,t){var r=this.options.remoteObj.obj,u=this.options.remoteObj.method,i=this;r.invokeMethodAsync(u,n,t).then(function(n){n?(i.$footer.addClass("is-valid"),i.options.barText=i.$barText.attr("data-text")):(i.$footer.addClass("is-invalid"),setTimeout(function(){i.$refresh.trigger("click");i.options.barText=i.$barText.attr("data-try")},1e3))})};t.update=function(t){n.extend(this.options,t);this.resetCanvas();this.initImg();this.resetBar()};t.resetCanvas=function(){this.canvas.clearRect(0,0,this.options.width,this.options.height);this.bar.clearRect(0,0,this.options.width,this.options.height);this.block.width=this.options.width;this.block.style.left=0;this.$load.text(this.$load.attr("data-load")).removeClass("text-danger")};t.resetBar=function(){this.$footer.removeClass("is-invalid is-valid");this.$barText.text(this.options.barText).removeClass("d-none");this.$slider.css({left:"0px"});this.$barLeft.css({width:"0px"})};n.fn.sliderCaptcha=r;n.fn.sliderCaptcha.Constructor=i;n.extend({captcha:function(t,i,r,u){u.remoteObj={obj:i,method:r};n(t).sliderCaptcha(u)}})}(jQuery),function(n){n.isFunction(Date.prototype.format)||(Date.prototype.format=function(n){var i={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours()%12==0?12:this.getHours()%12,"H+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),S:this.getMilliseconds()},t;/(y+)/.test(n)&&(n=n.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length)));/(E+)/.test(n)&&(n=n.replace(RegExp.$1,(RegExp.$1.length>1?RegExp.$1.length>2?"星期":"周":"")+{0:"日",1:"一",2:"二",3:"三",4:"四",5:"五",6:"六"}[this.getDay()]));for(t in i)new RegExp("("+t+")").test(n)&&(n=n.replace(RegExp.$1,RegExp.$1.length===1?i[t]:("00"+i[t]).substr((""+i[t]).length)));return n});n.browser={versions:function(){var n=navigator.userAgent;return{trident:n.indexOf("Trident")>-1,presto:n.indexOf("Presto")>-1,webKit:n.indexOf("AppleWebKit")>-1,gecko:n.indexOf("Gecko")>-1&&n.indexOf("KHTML")===-1,mobile:!!n.match(/AppleWebKit.*Mobile.*/),ios:!!n.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),android:n.indexOf("Android")>-1||n.indexOf("Linux")>-1,iPhone:n.indexOf("iPhone")>-1,iPod:n.indexOf("iPod")>-1,iPad:n.indexOf("iPad")>-1,mac:n.indexOf("Macintosh")>-1,webApp:n.indexOf("Safari")===-1}}(),language:(navigator.browserLanguage||navigator.language).toLowerCase()};Array.prototype.indexOf=function(n){for(var t=0;t-1&&this.splice(t,1)};n.extend({format:function(t,i){return i===undefined||i===null?null:(arguments.length>2&&i.constructor!==Array&&(i=n.makeArray(arguments).slice(1)),i.constructor!==Array&&(i=[i]),n.each(i,function(n,i){t=t.replace(new RegExp("\\{"+n+"\\}","g"),function(){return i})}),t)},getUID:function(n){n||(n="b");do n+=~~(Math.random()*1e6);while(document.getElementById(n));return n},webClient:function(t,i,r){var u={},f=new Browser;u.Browser=f.browser+" "+f.version;u.Device=f.device;u.Language=f.language;u.Engine=f.engine;u.UserAgent=navigator.userAgent;n.ajax({type:"GET",url:i,success:function(n){u.Os=f.os+" "+f.osVersion;t.invokeMethodAsync(r,n.Id,n.Ip,u.Os,u.Browser,u.Device,u.Language,u.Engine,u.UserAgent)},error:function(){console.error("Please add UseBootstrapBlazor middleware");t.invokeMethodAsync(r,"","",u.Os,u.Browser,u.Device,u.Language,u.Engine,u.UserAgent)}})}});n.fn.extend({drag:function(t,i,r){var u=n(this),o=function(i){i.preventDefault();i.stopPropagation();document.addEventListener("mousemove",f);document.addEventListener("touchmove",f);document.addEventListener("mouseup",e);document.addEventListener("touchend",e);n.isFunction(t)&&t.call(u,i)},f=function(t){t.touches&&t.touches.length>1||n.isFunction(i)&&i.call(u,t)},e=function(t){n.isFunction(r)&&r.call(u,t);window.setTimeout(function(){document.removeEventListener("mousemove",f);document.removeEventListener("touchmove",f);document.removeEventListener("mouseup",e);document.removeEventListener("touchend",e)},100)};u.on("mousedown",o);u.on("touchstart",o)},touchScale:function(t,i){i=n.extend({max:null,min:.195},i);var f=this[0],r={scale:1},u=n(this);f.addEventListener("touchstart",function(n){var i=n.touches,u=i[0],t=i[1];n.preventDefault();r.pageX=u.pageX;r.pageY=u.pageY;r.moveable=!0;t&&(r.pageX2=t.pageX,r.pageY2=t.pageY);r.originScale=r.scale||1});document.addEventListener("touchmove",function(f){if(r.moveable){var s=f.touches,h=s[0],o=s[1];if(o){f.preventDefault();u.hasClass("transition-none")||u.addClass("transition-none");r.pageX2||(r.pageX2=o.pageX);r.pageY2||(r.pageY2=o.pageY);var c=function(n,t){return Math.hypot(t.x-n.x,t.y-n.y)},l=c({x:h.pageX,y:h.pageY},{x:o.pageX,y:o.pageY})/c({x:r.pageX,y:r.pageY},{x:r.pageX2,y:r.pageY2}),e=r.originScale*l;i.max!=null&&e>i.max&&(e=i.max);i.min!=null&&e-1});t.length===0&&(t=document.createElement("script"),t.setAttribute("src",n),document.body.appendChild(t))},r=function(n){var i,t;const r=[...document.getElementsByTagName("script")];for(i=r.filter(function(t){return t.src.indexOf(n)>-1}),t=0;t-1});t.length===0&&(t=document.createElement("link"),t.setAttribute("href",n),t.setAttribute("rel","stylesheet"),document.getElementsByTagName("head")[0].appendChild(t))},f=function(){var t,n;const i=[...document.getElementsByTagName("link")];for(t=i.filter(function(n){return n.href.indexOf(content)>-1}),n=0;n<\/div>');o==="inline"&&u.addClass("form-inline");e.children().each(function(e,o){var s=n(o),c=s.data("toggle")==="row",h=r._getColSpan(s);c?n("
<\/div>").addClass(r._calc(h)).appendTo(u).append(s):(f=s.prop("tagName")==="LABEL",f?(i===null&&(i=n("
<\/div>").addClass(r._calc(h))),i.append(s)):(f=!1,i==null&&(i=n("
<\/div>").addClass(r._calc(h))),i.append(s),t==null?i.appendTo(u):i.appendTo(t),i=null))});t==null&&e.append(u)},_layout_parent_row:function(){var t=this.$element.data("target"),i=n('[data-uid="'+t+'"]'),r=n('
<\/div>').appendTo(i);this._layout_column(r)},_calc:function(n){var t=this.options.itemsPerRow,i;return n>0&&(t=t*n),i="col-12",t!==12&&(i="col-12 col-sm-"+t),i},_getColSpan:function(n){var t=parseInt(n.data("colspan"));return isNaN(t)&&(t=0),t}});n.fn.grid=i;n.fn.grid.Constructor=t}(jQuery),function(n){function r(i){return this.each(function(){var u=n(this),r=u.data(t.DATA_KEY),f=typeof i=="object"&&i;r||u.data(t.DATA_KEY,r=new t(this,f));typeof i=="string"&&/active/.test(i)&&r[i].apply(r)})}var t=function(t,i){this.$element=n(t);this.$header=this.$element.children(".tabs-header");this.$wrap=this.$header.children(".tabs-nav-wrap");this.$scroll=this.$wrap.children(".tabs-nav-scroll");this.$tab=this.$scroll.children(".tabs-nav");this.options=n.extend({},i);this.init()},i;t.VERSION="5.1.0";t.Author="argo@163.com";t.DATA_KEY="lgb.Tab";i=t.prototype;i.init=function(){var t=this;n(window).on("resize",function(){t.resize()});this.active()};i.fixSize=function(){var n=this.$element.height(),t=this.$element.width();this.$element.css({height:n+"px",width:t+"px"})};i.resize=function(){var n,t,i,r,u;this.vertical=this.$element.hasClass("tabs-left")||this.$element.hasClass("tabs-right");this.horizontal=this.$element.hasClass("tabs-top")||this.$element.hasClass("tabs-bottom");n=this.$tab.find(".tabs-item:last");n.length>0&&(this.vertical?(this.$wrap.css({height:this.$element.height()+"px"}),t=this.$tab.height(),i=n.position().top+n.outerHeight(),i0?this.$scroll.scrollTop(t+s):(f=u-t,f<0&&this.$scroll.scrollTop(t+f));r.css({width:"2px",transform:"translateY("+u+"px)"})}else{var e=n.position().left,y=e+n.outerWidth(),i=this.$scroll.scrollLeft(),p=this.$scroll.width(),h=y-i-p;h>0?this.$scroll.scrollLeft(i+h):(o=e-i,o<0&&this.$scroll.scrollLeft(i+o));c=n.width();l=e+parseInt(n.css("paddingLeft"));r.css({width:c+"px",transform:"translateX("+l+"px)"})}};n.fn.lgbTab=r;n.fn.lgbTab.Constructor=t}(jQuery),function(n){n.extend({bb_ajax:function(t,i,r){r=JSON.stringify(r);var u=null;return(n.ajax({url:t,data:r,method:i,contentType:"application/json",dataType:"json","async":!1,success:function(n){u=n},error:function(){return null}}),u==null)?null:JSON.stringify(u)},bb_ajax_goto:function(n){window.location.href=n}})}(jQuery),function(n){n.extend({bb_autoScrollItem:function(t,i){var s=n(t),r=s.find(".dropdown-menu"),e=parseInt(r.css("max-height").replace("px",""))/2,u=r.children("li:first").outerHeight(),h=u*i,f=Math.floor(e/u),o;r.children().removeClass("active");o=r.children().length;ie?r.scrollTop(u*(i>f?i-f:i)):i<=f&&r.scrollTop(0)},bb_composition:function(t,i,r){var u=!1,f=n(t);f.on("compositionstart",function(){u=!0});f.on("compositionend",function(){u=!1});f.on("input",function(n){u&&(n.stopPropagation(),n.preventDefault(),setTimeout(function(){u||i.invokeMethodAsync(r,f.val())},15))})},bb_setDebounce:function(t,i){var f=n(t),u;let r;u=["ArrowUp","ArrowDown","Escape","Enter"];f.on("keyup",function(n){u.indexOf(n.key)<1&&r?(clearTimeout(r),n.stopPropagation(),r=setTimeout(function(){r=null;n.target.dispatchEvent(n.originalEvent)},i)):r=setTimeout(function(){},i)})}})}(jQuery),function(n){n.extend({bb_camera:function(t,i,r,u,f,e){var o=n(t),h=function(n,t){n.pause();n.srcObject=null;t.stop()},c,s;if(r==="stop"){c=o.find("video")[0];s=o.data("bb_video_track");s&&h(c,s);return}navigator.mediaDevices.enumerateDevices().then(function(t){var l=t.filter(function(n){return n.kind==="videoinput"}),r,s,a,c;i.invokeMethodAsync("InitDevices",l).then(()=>{u&&l.length>0&&o.find('button[data-method="play"]').trigger("click")});r=o.find("video")[0];s=o.find("canvas")[0];s.width=f;s.height=e;a=s.getContext("2d");o.on("click","button[data-method]",async function(){var l=n(this).attr("data-method"),t,v,u;if(l==="play"){var w=n(this).attr("data-camera"),y=o.find(".dropdown-item.active").attr("data-val"),p={video:{facingMode:w,width:f,height:e},audio:!1};y!==""&&(p.video.deviceId={exact:y});navigator.mediaDevices.getUserMedia(p).then(n=>{r.srcObject=n,r.play(),c=n.getTracks()[0],o.data("bb_video_track",c),i.invokeMethodAsync("Start")}).catch(n=>{console.log(n),i.invokeMethodAsync("GetError",n.message)})}else if(l==="stop")h(r,c),i.invokeMethodAsync("Stop");else if(l==="capture"){for(a.drawImage(r,0,0,f,e),t=s.toDataURL(),v=30720;t.length>v;)u=t.substr(0,v),console.log(u),await i.invokeMethodAsync("Capture",u),t=t.substr(u.length);t.length>0&&await i.invokeMethodAsync("Capture",t);await i.invokeMethodAsync("Capture","__BB__%END%__BB__")}})})}})}(jQuery),function(){$.extend({bb_cascader_hide:function(n){const t=document.getElementById(n),i=bootstrap.Dropdown.getInstance(t);i.hide()}})}(),function(n){n.extend({bb_collapse:function(t){var i=n(t),r=null;i.hasClass("is-accordion")&&(r="["+t.getAttributeNames().pop()+"]");n.each(i.children(".accordion-item"),function(){var u=n(this),i=u.children(".accordion-collapse"),t=i.attr("id"),f;t||(t=n.getUID(),i.attr("id",t),r!=null&&i.attr("data-bs-parent",r),f=u.find('[data-bs-toggle="collapse"]'),f.attr("data-bs-target","#"+t).attr("aria-controls",t))});i.find(".tree .tree-item > .fa").on("click",function(){var t=n(this).parent();t.find('[data-bs-toggle="collapse"]').trigger("click")});if(i.parent().hasClass("menu"))i.on("click",".nav-link:not(.collapse)",function(){var r=n(this),t;for(i.find(".active").removeClass("active"),r.addClass("active"),t=r.closest(".accordion");t.length>0;)t.children(".accordion-header").find(".nav-link").addClass("active"),t=t.parent().closest(".accordion")})}})}(jQuery),function(n){n.extend({bb_console:function(t){var u=n(t),i=u.find('[data-scroll="auto"]'),r;i.length>0&&(r=i.find(".console-window"),i.scrollTop(r.height()))}})}(jQuery),function(n){n.extend({bb_form_load:function(t,i){var r=n(t);i==="show"?r.addClass("show"):r.removeClass("show")}})}(jQuery),function(n){n.extend({bb_drawer:function(t,i){var r=n(t),u;i?(r.addClass("is-open"),n("body").addClass("overflow-hidden")):r.hasClass("is-open")&&(r.removeClass("is-open").addClass("is-close"),u=window.setTimeout(function(){window.clearTimeout(u);r.removeClass("is-close");n("body").removeClass("overflow-hidden")},350))}})}(jQuery),function(n){Number.prototype.toRadians=function(){return this*Math.PI/180};n.extend({bb_geo_distance:function(n,t,i,r){var u=(i-n).toRadians(),f=(r-t).toRadians();n=n.toRadians();i=i.toRadians();var e=Math.sin(u/2)*Math.sin(u/2)+Math.cos(n)*Math.cos(i)*Math.sin(f/2)*Math.sin(f/2),o=2*Math.atan2(Math.sqrt(e),Math.sqrt(1-e));return 6371*o},bb_geo_updateLocaltion:function(t,i=0,r=0,u,f){var e=t.coords.latitude,o=t.coords.longitude,a=t.coords.accuracy,s=t.coords.altitude,h=t.coords.altitudeAccuracy,c=t.coords.heading,l=t.coords.speed,v=t.timestamp;return a>=500&&console.warn("Need more accurate values to calculate distance."),u!=null&&f!=null&&(i=n.bb_geo_distance(e,o,u,f),r+=i),u=e,f=o,s==null&&(s=0),h==null&&(h=0),c==null&&(c=0),l==null&&(l=0),{latitude:e,longitude:o,accuracy:a,altitude:s,altitudeAccuracy:h,heading:c,speed:l,timestamp:v,currentDistance:i,totalDistance:r,lastLat:u,lastLong:f}},bb_geo_handleLocationError:function(n){switch(n.code){case 0:console.error("There was an error while retrieving your location: "+n.message);break;case 1:console.error("The user prevented this page from retrieving a location.");break;case 2:console.error("The browser was unable to determine your location: "+n.message);break;case 3:console.error("The browser timed out before retrieving the location.")}},bb_geo_getCurrnetPosition:function(t,i){var r=!1;return navigator.geolocation?(r=!0,navigator.geolocation.getCurrentPosition(r=>{var u=n.bb_geo_updateLocaltion(r);t.invokeMethodAsync(i,u)},n.bb_geo_handleLocationError)):console.warn("HTML5 Geolocation is not supported in your browser"),r},bb_geo_watchPosition:function(t,i){var r=0,u=0,f=0,e,o;return navigator.geolocation?r=navigator.geolocation.watchPosition(r=>{var s=n.bb_geo_updateLocaltion(r,u,f,e,o);u=s.currentDistance;f=s.totalDistance;e=s.lastLat;o=s.lastLong;t.invokeMethodAsync(i,s)},n.bb_geo_handleLocationError,{maximumAge:2e4}):console.warn("HTML5 Geolocation is not supported in your browser"),r},bb_geo_clearWatchLocation:function(n){var t=!1;return navigator.geolocation&&(t=!0,navigator.geolocation.clearWatch(n)),t}})}(jQuery),function(n){n.extend({bb_gotop:function(t,i){var r=n(t),u=r.tooltip();r.on("click",function(t){t.preventDefault();n(i||window).scrollTop(0);u.tooltip("hide")})}})}(jQuery),function(n){n.extend({bb_handwritten:function(n,t,i,r){function u(n){var i,f,e;this.linewidth=1;this.color="#000000";this.background="#fff";for(i in n)this[i]=n[i];this.canvas=document.createElement("canvas");this.el.appendChild(this.canvas);this.cxt=this.canvas.getContext("2d");this.canvas.clientTop=this.el.clientWidth;this.canvas.width=this.el.clientWidth;this.canvas.height=this.el.clientHeight;this.cxt.fillStyle=this.background;this.cxt.fillRect(2,2,this.canvas.width,this.canvas.height);this.cxt.fillStyle=this.background;this.cxt.strokeStyle=this.color;this.cxt.lineWidth=this.linewidth;this.cxt.lineCap="round";var t="ontouchend"in window,s=this,u=!1,o=function(n){u=!0;this.cxt.beginPath();var i=n.target.offsetParent.offsetLeft,r=n.target.offsetParent.offsetTop;t?this.cxt.moveTo(n.changedTouches[0].pageX+2-i,n.changedTouches[0].pageY+2-r):this.cxt.moveTo(n.pageX+2-i,n.pageY+2-r)};t?this.canvas.addEventListener("touchstart",o.bind(this),!1):this.canvas.addEventListener("mousedown",o.bind(this),!1);f=function(n){if(u){var i=n.target.offsetParent.offsetLeft,r=n.target.offsetParent.offsetTop;t?this.cxt.lineTo(n.changedTouches[0].pageX+2-i,n.changedTouches[0].pageY+2-r):this.cxt.lineTo(n.pageX+2-i,n.pageY+2-r);this.cxt.stroke()}};t?this.canvas.addEventListener("touchmove",f.bind(this),!1):this.canvas.addEventListener("mousedown",f.bind(this),!1);e=function(){u=!1;this.cxt.closePath()};t?this.canvas.addEventListener("touchend",e.bind(this),!1):this.canvas.addEventListener("mousedown",e.bind(this),!1);this.clearEl.addEventListener("click",function(){this.cxt.clearRect(2,2,this.canvas.width,this.canvas.height)}.bind(this),!1);this.saveEl.addEventListener("click",function(){var n=this.canvas.toDataURL();return this.obj.invokeMethodAsync(r,n)}.bind(this),!1)}document.body.addEventListener("touchmove",function(n){n.preventDefault()},{passive:!1});new u({el:n.getElementsByClassName("hw-body")[0],clearEl:n.getElementsByClassName("btn-secondary")[0],saveEl:n.getElementsByClassName("btn-primary")[0],obj:t})}})}(jQuery),function(n){n.extend({bb_image_load_async:function(t,i){if(i){var r=n(t),u=r.children("img");u.attr("src",i)}},bb_image_preview:function(t,i){var u=n(t),e=u.children(".bb-viewer-wrapper"),ut=n("body").addClass("is-img-preview"),r=e.find(".bb-viewer-canvas > img"),h=u.find(".bb-viewer-close"),a=u.find(".bb-viewer-prev"),v=u.find(".bb-viewer-next"),y=u.find(".fa-magnifying-glass-plus"),p=u.find(".fa-magnifying-glass-minus"),d=u.find(".btn-full-screen"),y=u.find(".fa-magnifying-glass-plus"),g=u.find(".fa-rotate-left"),nt=u.find(".fa-rotate-right"),d=u.find(".bb-viewer-full-screen"),tt=u.find(".bb-viewer-mask"),f,c;if(e.appendTo("body").addClass("show"),!e.hasClass("init")){e.addClass("init");h.on("click",function(){n("body").removeClass("is-img-preview");l();e.removeClass("show").appendTo(u)});a.on("click",function(){f--;f<0&&(f=i.length-1);c(f)});v.on("click",function(){f++;f>=i.length&&(f=0);c(f)});f=0;c=function(n){l();var t=i[n];e.find(".bb-viewer-canvas > img").attr("src",t)};d.on("click",function(){l();e.toggleClass("active")});y.on("click",function(){o(function(n){return n+.2})});p.on("click",function(){o(function(n){return Math.max(.2,n-.2)})});g.on("click",function(){o(null,function(n){return n-90})});nt.on("click",function(){o(null,function(n){return n+90})});r.on("mousewheel DOMMouseScroll",function(n){n.preventDefault();var t=n.originalEvent.wheelDelta||-n.originalEvent.detail,i=Math.max(-1,Math.min(1,t));i>0?o(function(n){return n+.015}):o(function(n){return Math.max(.195,n-.015)})});var w=0,b=0,s={top:0,left:0};r.drag(function(n){w=n.clientX||n.touches[0].clientX;b=n.clientY||n.touches[0].clientY;s.top=parseInt(r.css("marginTop").replace("px",""));s.left=parseInt(r.css("marginLeft").replace("px",""));this.addClass("is-drag")},function(n){if(this.hasClass("is-drag")){var t=n.clientX||n.changedTouches[0].clientX,i=n.clientY||n.changedTouches[0].clientY;newValX=s.left+Math.ceil(t-w);newValY=s.top+Math.ceil(i-b);this.css({marginLeft:newValX});this.css({marginTop:newValY})}},function(){this.removeClass("is-drag")});tt.on("click",function(){h.trigger("click")});n(document).on("keydown",function(n){console.log(n.key);n.key==="ArrowUp"?y.trigger("click"):n.key==="ArrowDown"?p.trigger("click"):n.key==="ArrowLeft"?a.trigger("click"):n.key==="ArrowRight"?v.trigger("click"):n.key==="Escape"&&h.trigger("click")});var it=function(n){var t=1,i;return n&&(i=n.split(" "),t=parseFloat(i[0].split("(")[1])),t},rt=function(n){var t;return n&&(t=n.split(" "),scale=parseFloat(t[1].split("(")[1])),scale},o=function(n,t){var f=r[0].style.transform,i=it(f),u=rt(f),e,o;n&&(i=n(i));t&&(u=t(u));r.css("transform","scale("+i+") rotate("+u+"deg)");e=k(r[0].style.marginLeft);o=k(r[0].style.marginTop);r.css("marginLeft",e+"px");r.css("marginTop",o+"px")},l=function(){r.addClass("transition-none");r.css("transform","scale(1) rotate(0deg)");r.css("marginLeft","0px");r.css("marginTop","0px");window.setTimeout(function(){r.removeClass("transition-none")},300)},k=function(n){var t=0;return n&&(t=parseFloat(n)),t};r.touchScale(function(n){o(function(){return n})})}}})}(jQuery),function(n){n.extend({bb_input:function(t,i,r,u,f,e){var o=n(t);o.on("keyup",function(n){r&&n.key==="Enter"?i.invokeMethodAsync(u):f&&n.key==="Escape"&&i.invokeMethodAsync(e,o.val())})},bb_input_selectAll_focus:function(t){var i=n(t);i.on("focus",function(){n(this).select()})},bb_input_selectAll_enter:function(t){var i=n(t);i.on("keyup",function(t){t.key==="Enter"&&n(this).select()})},bb_input_selectAll:function(t){n(t).select()}})}(jQuery),function(n){var u=function(t){var i=this;t!==undefined?i.prevValues[t]=n(n(i).find(".ipv4-cell")[t]).val():n(i).find(".ipv4-cell").each(function(t,r){i.prevValues[t]=n(r).val()})},i=function(t){var i=this;t!==undefined?n(n(i).find(".ipv4-cell")[t]).val(i.prevValues[t]):n(i).find(".ipv4-cell").each(function(t,r){n(r).val(i.prevValues)})},t=function(t){var i=this;t===undefined&&t<0&&t>3||n(n(i).find(".ipv4-cell")[t]).focus()},f=function(n){if(typeof n!="string")return!1;var t=n.split(".");return t.length!==4?!1:t.reduce(function(n,t){return n===!1||t.length===0?!1:Number(t)>=0&&Number(t)<=255?!0:!1},!0)},e=function(){var t="";return this.find(".ipv4-cell").each(function(i,r){t+=i==0?n(r).val():"."+n(r).val()}),t},r=function(){var n=this,t,i;if("selectionStart"in n)return n.selectionStart;if(document.selection)return n.focus(),t=document.selection.createRange(),i=document.selection.createRange().text.length,t.moveStart("character",-n.value.length),t.text.length-i;throw new Error("cell is not an input");};n.extend({bb_ipv4_input:function(f){var e=n(f);f.prevValues=[];e.find(".ipv4-cell").focus(function(){n(this).select();e.toggleClass("selected",!0)});e.find(".ipv4-cell").focusout(function(){e.toggleClass("selected",!1)});e.find(".ipv4-cell").each(function(e,o){n(o).keydown(function(i){i.keyCode>=48&&i.keyCode<=57||i.keyCode>=96&&i.keyCode<=105?u.call(f,e):i.keyCode==37||i.keyCode==39?i.keyCode==37&&r.call(o)===0?(t.call(f,e-1),i.preventDefault()):i.keyCode==39&&r.call(o)===n(o).val().length&&(t.call(f,e+1),i.preventDefault()):i.keyCode==9||i.keyCode==8||i.keyCode==46||i.preventDefault()});n(o).keyup(function(r){var u,s,o;(r.keyCode>=48&&r.keyCode<=57||r.keyCode>=96&&r.keyCode<=105)&&(u=n(this).val(),s=Number(u),s>255?i.call(f,e):u.length>1&&u[0]==="0"?i.call(f,e):u.length===3&&t.call(f,e+1));r.key==="Backspace"&&n(this).val()===""&&(n(this).val("0"),o=e-1,o>-1?t.call(f,o):t.call(f,0));r.key==="."&&t.call(f,e+1);r.key==="ArrowRight"&&t.call(f,e+1);r.key==="ArrowLeft"&&t.call(f,e-1)})})}})}(jQuery),function(n){var e=function(t){var i=this;t!==undefined?i.prevValues[t]=n(n(i).find(".ipv4-cell")[t]).val():n(i).find(".ipv4-cell").each(function(t,r){i.prevValues[t]=n(r).val()})},i=function(t){var i=this;t!==undefined?n(n(i).find(".ipv4-cell")[t]).val(i.prevValues[t]):n(i).find(".ipv4-cell").each(function(t,r){n(r).val(i.prevValues)})},t=function(t){var i=this;t===undefined&&t<0&&t>3||n(n(i).find(".ipv4-cell")[t]).focus()},r=function(n){if(typeof n!="string")return!1;var t=n.split(".");return t.length!==4?!1:t.reduce(function(n,t){return n===!1||t.length===0?!1:Number(t)>=0&&Number(t)<=255?!0:!1},!0)},u=function(){var t="";return this.find(".ipv4-cell").each(function(i,r){t+=i==0?n(r).val():"."+n(r).val()}),t},f=function(){var n=this,t,i;if("selectionStart"in n)return n.selectionStart;if(document.selection)return n.focus(),t=document.selection.createRange(),i=document.selection.createRange().text.length,t.moveStart("character",-n.value.length),t.text.length-i;throw new Error("cell is not an input");};n.fn.ipv4_input=function(o,s){var h,c,a,l;if(this.each(function(){if(!n(this).hasClass("ipv4-input")){var r=this;r.prevValues=[];n(r).toggleClass("ipv4-input",!0);n(r).html('