fix #2912 - move JavaScript handling from ThemeBuilder to component OnAfterRenderAsync
This commit is contained in:
		| @ -9,6 +9,7 @@ using Oqtane.UI; | ||||
| using System.Collections.Generic; | ||||
| using Microsoft.JSInterop; | ||||
| using System.Linq; | ||||
| using Oqtane.Themes; | ||||
|  | ||||
| namespace Oqtane.Modules | ||||
| { | ||||
| @ -70,12 +71,28 @@ namespace Oqtane.Modules | ||||
|         { | ||||
|             if (firstRender) | ||||
|             { | ||||
|                 if (Resources != null && Resources.Exists(item => item.ResourceType == ResourceType.Script)) | ||||
|                 List<Resource> resources = null; | ||||
|                 var type = GetType(); | ||||
|                 if (type.BaseType == typeof(ModuleBase)) | ||||
|                 { | ||||
|                     if (PageState.Page.Resources != null) | ||||
|                     { | ||||
|                         resources = PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Script && item.Namespace == type.Namespace).ToList(); | ||||
|                     } | ||||
|                 } | ||||
|                 else // modulecontrolbase | ||||
|                 { | ||||
|                     if (Resources != null) | ||||
|                     { | ||||
|                         resources = Resources.Where(item => item.ResourceType == ResourceType.Script).ToList(); | ||||
|                     } | ||||
|                 } | ||||
|                 if (resources != null &&resources.Any()) | ||||
|                 { | ||||
|                     var interop = new Interop(JSRuntime); | ||||
|                     var scripts = new List<object>(); | ||||
|                     var inline = 0; | ||||
|                     foreach (Resource resource in Resources.Where(item => item.ResourceType == ResourceType.Script)) | ||||
|                     foreach (Resource resource in resources) | ||||
|                     { | ||||
|                         if (!string.IsNullOrEmpty(resource.Url)) | ||||
|                         { | ||||
| @ -104,6 +121,7 @@ namespace Oqtane.Modules | ||||
|         } | ||||
|  | ||||
|         // url methods | ||||
|  | ||||
|         public string NavigateUrl() | ||||
|         { | ||||
|             return NavigateUrl(PageState.Page.Path); | ||||
|  | ||||
| @ -6,6 +6,7 @@ using Oqtane.UI; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Reflection; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace Oqtane.Themes | ||||
| @ -33,12 +34,28 @@ namespace Oqtane.Themes | ||||
|         { | ||||
|             if (firstRender) | ||||
|             { | ||||
|                 if (Resources != null && Resources.Exists(item => item.ResourceType == ResourceType.Script)) | ||||
|                 List<Resource> resources = null; | ||||
|                 var type = GetType(); | ||||
|                 if (type.BaseType == typeof(ThemeBase)) | ||||
|                 { | ||||
|                     if (PageState.Page.Resources != null) | ||||
|                     { | ||||
|                         resources = PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Script && item.Namespace == type.Namespace).ToList(); | ||||
|                     } | ||||
|                 } | ||||
|                 else // themecontrolbase, containerbase | ||||
|                 { | ||||
|                     if (Resources != null) | ||||
|                     { | ||||
|                         resources = Resources.Where(item => item.ResourceType == ResourceType.Script).ToList(); | ||||
|                     } | ||||
|                 } | ||||
|                 if (resources != null && resources.Any()) | ||||
|                 { | ||||
|                     var interop = new Interop(JSRuntime); | ||||
|                     var scripts = new List<object>(); | ||||
|                     var inline = 0; | ||||
|                     foreach (Resource resource in Resources.Where(item => item.ResourceType == ResourceType.Script)) | ||||
|                     foreach (Resource resource in resources) | ||||
|                     { | ||||
|                         if (!string.IsNullOrEmpty(resource.Url)) | ||||
|                         { | ||||
|  | ||||
| @ -333,10 +333,11 @@ | ||||
|                 // fallback to default Oqtane theme | ||||
|                 page.ThemeType = Constants.DefaultTheme; | ||||
|                 themetype = Type.GetType(Constants.DefaultTheme); | ||||
|                 theme = site.Themes.FirstOrDefault(item => item.Themes.Any(item => item.TypeName == page.ThemeType)); | ||||
|             } | ||||
|  | ||||
|             string panes = ""; | ||||
|             if (themetype != null) | ||||
|             if (themetype != null && theme != null) | ||||
|             { | ||||
|                 // get resources for theme (ITheme) | ||||
|                 page.Resources = ManagePageResources(page.Resources, theme.Resources, ResourceLevel.Page, alias, "Themes", Utilities.GetTypeName(theme.ThemeName)); | ||||
| @ -522,10 +523,11 @@ | ||||
|                 } | ||||
|  | ||||
|                 // ensure resource does not exist already | ||||
|                 if (!pageresources.Any(item => item.Url.ToLower() == resource.Url.ToLower())) | ||||
|                 if (!pageresources.Exists(item => item.Url.ToLower() == resource.Url.ToLower())) | ||||
|                 { | ||||
|                     resource.Level = level; | ||||
| 					pageresources.Add(resource); | ||||
|                     resource.Namespace = name; | ||||
|                     pageresources.Add(resource); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| @ -105,10 +105,9 @@ | ||||
|  | ||||
|         if (PageState.Page.Resources != null) | ||||
|         { | ||||
|             var interop = new Interop(JSRuntime); | ||||
|  | ||||
|             if (PageState.Page.Resources.Exists(item => item.ResourceType == ResourceType.Stylesheet)) | ||||
|             { | ||||
|                 var interop = new Interop(JSRuntime); | ||||
|                 string batch = DateTime.UtcNow.ToString("yyyyMMddHHmmssfff"); | ||||
|                 var links = new List<object>(); | ||||
|                 foreach (Resource resource in PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Stylesheet)) | ||||
| @ -125,28 +124,28 @@ | ||||
|                 await interop.RemoveElementsById("app-stylesheet-module-", "", "app-stylesheet-module-" + batch + "-00"); | ||||
|             } | ||||
|  | ||||
|             if (PageState.Page.Resources.Exists(item => item.ResourceType == ResourceType.Script)) | ||||
|             { | ||||
|                 var scripts = new List<object>(); | ||||
|                 var inline = 0; | ||||
|                 foreach (Resource resource in PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Script && item.Level != ResourceLevel.Site)) | ||||
|                 { | ||||
|                     if (!string.IsNullOrEmpty(resource.Url)) | ||||
|                     { | ||||
|                         var url = (resource.Url.Contains("://")) ? resource.Url : PageState.Alias.BaseUrl + resource.Url; | ||||
|                         scripts.Add(new { href = url, bundle = resource.Bundle ?? "", integrity = resource.Integrity ?? "", crossorigin = resource.CrossOrigin ?? "", es6module = resource.ES6Module, location = resource.Location.ToString().ToLower() }); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         inline += 1; | ||||
|                         await interop.IncludeScript(GetType().Namespace.ToLower() + inline.ToString(), "", "", "", resource.Content, resource.Location.ToString().ToLower()); | ||||
|                     } | ||||
|                 } | ||||
|                 if (scripts.Any()) | ||||
|                 { | ||||
|                     await interop.IncludeScripts(scripts.ToArray()); | ||||
|                 } | ||||
|             } | ||||
|             //if (PageState.Page.Resources.Exists(item => item.ResourceType == ResourceType.Script)) | ||||
|             //{ | ||||
|             //    var scripts = new List<object>(); | ||||
|             //    var inline = 0; | ||||
|             //    foreach (Resource resource in PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Script && item.Level != ResourceLevel.Site)) | ||||
|             //    { | ||||
|             //        if (!string.IsNullOrEmpty(resource.Url)) | ||||
|             //        { | ||||
|             //            var url = (resource.Url.Contains("://")) ? resource.Url : PageState.Alias.BaseUrl + resource.Url; | ||||
|             //            scripts.Add(new { href = url, bundle = resource.Bundle ?? "", integrity = resource.Integrity ?? "", crossorigin = resource.CrossOrigin ?? "", es6module = resource.ES6Module, location = resource.Location.ToString().ToLower() }); | ||||
|             //        } | ||||
|             //        else | ||||
|             //        { | ||||
|             //            inline += 1; | ||||
|             //            await interop.IncludeScript(GetType().Namespace.ToLower() + inline.ToString(), "", "", "", resource.Content, resource.Location.ToString().ToLower()); | ||||
|             //        } | ||||
|             //    } | ||||
|             //    if (scripts.Any()) | ||||
|             //    { | ||||
|             //        await interop.IncludeScripts(scripts.ToArray()); | ||||
|             //    } | ||||
|             //} | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 sbwalker
					sbwalker