@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"; // head content if (!string.IsNullOrEmpty(PageState.Site.HeadContent)) { headcontent += ProcessHeadContent(PageState.Site.HeadContent, "site") + "\n"; } if (!string.IsNullOrEmpty(PageState.Page.HeadContent)) { headcontent += ProcessHeadContent(PageState.Page.HeadContent, $"page{PageState.Page.PageId}") + "\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"; } SiteState.Properties.HeadContent = headcontent; DynamicComponent = builder => { var themeType = Type.GetType(PageState.Page.ThemeType); builder.OpenComponent(0, themeType); builder.CloseComponent(); }; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (!string.IsNullOrEmpty(PageState.Page.HeadContent) && PageState.Page.HeadContent.Contains("= 0) { var script = PageState.Page.HeadContent.Substring(index, PageState.Page.HeadContent.IndexOf("", index) + 9 - index); 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; } } } if (!string.IsNullOrEmpty(src)) { src = (src.Contains("://")) ? src : PageState.Alias.BaseUrl + src; await interop.IncludeScript(id, src, integrity, crossorigin, type, "", "head"); } else { 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), "head"); } index = PageState.Page.HeadContent.IndexOf("= 0) { var script = headcontent.Substring(index, headcontent.IndexOf("", index) + 9 - index); if (!script.Contains("src=") && !script.Contains("id=")) { count += 1; id += $"-script{count}"; headcontent = headcontent.Replace(script, script.Replace(""; } }