From b68e3cb10fcb6ec8676317430ec4516751d721e5 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Sat, 19 Feb 2022 17:24:41 -0500 Subject: [PATCH] Add support for ES6 module JavaScript resources --- Oqtane.Client/Modules/ModuleBase.cs | 2 +- Oqtane.Client/Themes/ThemeBase.cs | 2 +- Oqtane.Server/wwwroot/js/interop.js | 3 +++ Oqtane.Shared/Models/Resource.cs | 8 ++++++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Oqtane.Client/Modules/ModuleBase.cs b/Oqtane.Client/Modules/ModuleBase.cs index f3f06aee..2efe7b42 100644 --- a/Oqtane.Client/Modules/ModuleBase.cs +++ b/Oqtane.Client/Modules/ModuleBase.cs @@ -55,7 +55,7 @@ namespace Oqtane.Modules var scripts = new List(); foreach (Resource resource in Resources.Where(item => item.ResourceType == ResourceType.Script && item.Declaration != ResourceDeclaration.Global)) { - scripts.Add(new { href = resource.Url, bundle = resource.Bundle ?? "", integrity = resource.Integrity ?? "", crossorigin = resource.CrossOrigin ?? "" }); + scripts.Add(new { href = resource.Url, bundle = resource.Bundle ?? "", integrity = resource.Integrity ?? "", crossorigin = resource.CrossOrigin ?? "", ismodule = resource.IsModule ?? false}); } if (scripts.Any()) { diff --git a/Oqtane.Client/Themes/ThemeBase.cs b/Oqtane.Client/Themes/ThemeBase.cs index ccf80e04..aa823628 100644 --- a/Oqtane.Client/Themes/ThemeBase.cs +++ b/Oqtane.Client/Themes/ThemeBase.cs @@ -34,7 +34,7 @@ namespace Oqtane.Themes var scripts = new List(); foreach (Resource resource in Resources.Where(item => item.ResourceType == ResourceType.Script && item.Declaration != ResourceDeclaration.Global)) { - scripts.Add(new { href = resource.Url, bundle = resource.Bundle ?? "", integrity = resource.Integrity ?? "", crossorigin = resource.CrossOrigin ?? "" }); + scripts.Add(new { href = resource.Url, bundle = resource.Bundle ?? "", integrity = resource.Integrity ?? "", crossorigin = resource.CrossOrigin ?? "", ismodule = resource.IsModule ?? false }); } if (scripts.Any()) { diff --git a/Oqtane.Server/wwwroot/js/interop.js b/Oqtane.Server/wwwroot/js/interop.js index dcecde3c..8d89c4c7 100644 --- a/Oqtane.Server/wwwroot/js/interop.js +++ b/Oqtane.Server/wwwroot/js/interop.js @@ -232,6 +232,9 @@ Oqtane.Interop = { if (path === scripts[s].href && scripts[s].crossorigin !== '') { element.crossOrigin = scripts[s].crossorigin; } + if (path === scripts[s].href && scripts[s].ismodule === true) { + element.type = "module"; + } } } }) diff --git a/Oqtane.Shared/Models/Resource.cs b/Oqtane.Shared/Models/Resource.cs index b87e32ec..42674075 100644 --- a/Oqtane.Shared/Models/Resource.cs +++ b/Oqtane.Shared/Models/Resource.cs @@ -33,8 +33,7 @@ namespace Oqtane.Models public string Bundle { get; set; } /// - /// Determines if the Resource is global, meaning that the entire solution uses it or just some modules. - /// TODO: VERIFY that this explanation is correct. + /// Determines if the Resource is global or local, meaning that the entire solution uses it or just some modules. /// public ResourceDeclaration Declaration { get; set; } @@ -42,5 +41,10 @@ namespace Oqtane.Models /// If the Resource should be included in the `head` of the HTML document or the `body` /// public ResourceLocation Location { get; set; } + + /// + /// For Scripts this allows type="module" registrations - not applicable to Stylesheets + /// + public bool? IsModule { get; set; } } }