diff --git a/src/Blazored.Modal/Blazored.Modal.csproj b/src/Blazored.Modal/Blazored.Modal.csproj
index c7ef3ee..10f00d4 100644
--- a/src/Blazored.Modal/Blazored.Modal.csproj
+++ b/src/Blazored.Modal/Blazored.Modal.csproj
@@ -30,6 +30,8 @@
+
+
diff --git a/src/Blazored.Modal/BlazoredModal.razor b/src/Blazored.Modal/BlazoredModal.razor
index fe16c9d..44512cf 100644
--- a/src/Blazored.Modal/BlazoredModal.razor
+++ b/src/Blazored.Modal/BlazoredModal.razor
@@ -1,5 +1,7 @@
@using System.Collections.ObjectModel
+@using Blazored.Modal.Configuration
@using Microsoft.AspNetCore.Components.Routing
+@using Microsoft.Extensions.Options
@inject NavigationManager NavigationManager
@inject IJSRuntime JsRuntime
@@ -37,6 +39,14 @@
internal event Action? OnModalClosed;
+ public BlazoredModal()
+ {
+ if (baseUri != null)
+ return;
+ // creates a lazy object that will determine the baseUri from the first request
+ baseUri = new(() => (NavigationManager.BaseUri ?? "./") + "_content/Blazored.Modal/");
+ }
+
protected override void OnInitialized()
{
if (CascadedModalService == null)
@@ -63,13 +73,49 @@
_globalModalOptions.ActivateFocusTrap = ActivateFocusTrap;
}
- protected override async Task OnAfterRenderAsync(bool firstRender)
+ #region JavaScript path customization
+ // This allows the javascript to be located on a CDN or shared location for server caching
+ // and/or sharing between multiple apps, or that the path can be customized for the app
+ // automatically base on the BaseUri found in NavigationManager
+
+ [Inject]
+ private IOptions Settings { get; set; } = null!;
+
+ // stores the basePath for all instances
+ private static string? sharedBasePath;
+
+ // default location for the JS file
+ private const string DefaultLocation = "./";
+
+ // a lazy object that will hold the baseUri
+ private static Lazy? baseUri;
+
+ // gets the baseUri from the lazy object
+ private string? BaseUri => baseUri?.Value;
+
+ // gets the location from the settings
+ private string? Location => Settings.Value.JsPath;
+
+ private string JsPath
{
- if (firstRender)
+ get
{
- _styleFunctions = await JsRuntime.InvokeAsync("import", "./_content/Blazored.Modal/BlazoredModal.razor.js");
+ // if the basePath is already set, return it
+ var basePath = sharedBasePath;
+ if (basePath != null)
+ return basePath;
+ // if the location is null, use the default location
+ var str = Location ?? BaseUri;
+ return sharedBasePath = str + "BlazoredModal.razor.js";
}
}
+ #endregion
+
+ protected override async Task OnAfterRenderAsync(bool firstRender)
+ {
+ if (firstRender)
+ _styleFunctions = await JsRuntime.InvokeAsync("import", JsPath);
+ }
internal async Task CloseInstance(ModalReference? modal, ModalResult result)
{
diff --git a/src/Blazored.Modal/BlazoredModalInstance.razor b/src/Blazored.Modal/BlazoredModalInstance.razor
index aa9f7d0..518efb1 100644
--- a/src/Blazored.Modal/BlazoredModalInstance.razor
+++ b/src/Blazored.Modal/BlazoredModalInstance.razor
@@ -21,6 +21,10 @@ else
{
@Title
}
+ @if (HeaderContent != null)
+ {
+ @HeaderContent
+ }
@if (!HideCloseButton)
{