@namespace Oqtane.UI @inject IJSRuntime JSRuntime @inject NavigationManager NavigationManager @inject SiteState SiteState @DynamicComponent @code { [CascadingParameter] PageState PageState { get; set; } RenderFragment DynamicComponent { get; set; } protected override void OnParametersSet() { // handle page redirection if (!string.IsNullOrEmpty(PageState.Page.Url)) { NavigationManager.NavigateTo(PageState.Page.Url); return; } // set page title if (!string.IsNullOrEmpty(PageState.Page.Title)) { SiteState.Properties.PageTitle = PageState.Page.Title; } else { SiteState.Properties.PageTitle = PageState.Site.Name + " - " + PageState.Page.Name; } // set page head content var headcontent = ""; // favicon var favicon = "favicon.ico"; if (PageState.Site.FaviconFileId != null) { favicon = Utilities.FileUrl(PageState.Alias, PageState.Site.FaviconFileId.Value); } headcontent += $"\n"; // stylesheets foreach (Resource resource in PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Stylesheet)) { var url = (resource.Url.Contains("://")) ? resource.Url : PageState.Alias.BaseUrl + resource.Url; headcontent += CreateLink(url, resource.Integrity, resource.CrossOrigin) + "\n"; } // head content if (!string.IsNullOrEmpty(PageState.Site.HeadContent)) { headcontent += PageState.Site.HeadContent + "\n"; } if (!string.IsNullOrEmpty(PageState.Page.HeadContent)) { headcontent += PageState.Page.HeadContent + "\n"; } SiteState.Properties.HeadContent = headcontent; DynamicComponent = builder => { var themeType = Type.GetType(PageState.Page.ThemeType); builder.OpenComponent(0, themeType); builder.CloseComponent(); }; } private string CreateLink(string url, string integrity, string crossorigin) { return ""; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (!firstRender) { if (!string.IsNullOrEmpty(PageState.Page.HeadContent) && PageState.Page.HeadContent.Contains("(); var count = 0; var index = content.IndexOf("= 0) { var script = content.Substring(index, content.IndexOf("", index) + 9 - index); // get script attributes var attributes = script.Substring(0, script.IndexOf(">")).Replace("\"", "").Split(" "); string id = ""; string src = ""; string integrity = ""; string crossorigin = ""; string type = ""; foreach (var attribute in attributes) { if (attribute.Contains("=")) { var value = attribute.Split("="); switch (value[0]) { case "id": id = value[1]; break; case "src": src = value[1]; break; case "integrity": integrity = value[1]; break; case "crossorigin": crossorigin = value[1]; break; case "type": type = value[1]; break; } } } // inject script if (!string.IsNullOrEmpty(src)) { src = (src.Contains("://")) ? src : PageState.Alias.BaseUrl + src; scripts.Add(new { href = src, bundle = "", integrity = integrity, crossorigin = crossorigin, es6module = (type == "module"), location = location }); } else { // inline script must have an id attribute if (id == "") { count += 1; id = $"page{PageState.Page.PageId}-script{count}"; } index = script.IndexOf(">") + 1; await interop.IncludeScript(id, "", "", "", "", script.Substring(index, script.IndexOf("") - index), location.ToString().ToLower()); } index = content.IndexOf("