diff --git a/Oqtane.Client/UI/ThemeBuilder.razor b/Oqtane.Client/UI/ThemeBuilder.razor index c3d0453b..c215e3ff 100644 --- a/Oqtane.Client/UI/ThemeBuilder.razor +++ b/Oqtane.Client/UI/ThemeBuilder.razor @@ -42,16 +42,17 @@ 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"; + headcontent += "" + "\n"; } // head content + AddHeadContent(headcontent, PageState.Site.HeadContent); if (!string.IsNullOrEmpty(PageState.Site.HeadContent)) { - headcontent += PageState.Site.HeadContent + "\n"; + headcontent = AddHeadContent(headcontent, PageState.Site.HeadContent); } if (!string.IsNullOrEmpty(PageState.Page.HeadContent)) { - headcontent += PageState.Page.HeadContent + "\n"; + headcontent = AddHeadContent(headcontent, PageState.Page.HeadContent); } SiteState.Properties.HeadContent = headcontent; @@ -63,9 +64,21 @@ }; } - private string CreateLink(string url, string integrity, string crossorigin) + private string AddHeadContent(string headcontent, string content) { - return ""; + // format head content, remove scripts, and filter duplicate elements + var elements = (">" + content.Replace("\n", "") + "<").Split("><"); + foreach (var element in elements) + { + if (!string.IsNullOrEmpty(element) && !element.Contains("script")) + { + if (!headcontent.Contains("<" + element + ">")) + { + headcontent += "<" + element + ">" + "\n"; + } + } + } + return headcontent; } protected override async Task OnAfterRenderAsync(bool firstRender)