Merge pull request #2811 from sbwalker/dev
ability to add arbitrary content to head and body during client and server rendering
This commit is contained in:
33
Oqtane.Client/Body.razor
Normal file
33
Oqtane.Client/Body.razor
Normal file
@ -0,0 +1,33 @@
|
||||
@using System.ComponentModel
|
||||
@using Oqtane.Shared
|
||||
@inject SiteState SiteState
|
||||
|
||||
@((MarkupString)content)
|
||||
|
||||
@code {
|
||||
private string content = "";
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
((INotifyPropertyChanged)SiteState.Properties).PropertyChanged += PropertyChanged;
|
||||
}
|
||||
|
||||
private void PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
case "BodyContent":
|
||||
if (content != SiteState.Properties.BodyContent)
|
||||
{
|
||||
content = SiteState.Properties.BodyContent;
|
||||
StateHasChanged();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
((INotifyPropertyChanged)SiteState.Properties).PropertyChanged -= PropertyChanged;
|
||||
}
|
||||
}
|
42
Oqtane.Client/Head.razor
Normal file
42
Oqtane.Client/Head.razor
Normal file
@ -0,0 +1,42 @@
|
||||
@using System.ComponentModel
|
||||
@using Oqtane.Shared
|
||||
@inject SiteState SiteState
|
||||
|
||||
<title>@title</title>
|
||||
@((MarkupString)content)
|
||||
|
||||
@code {
|
||||
private string title = "";
|
||||
private string content = "";
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
((INotifyPropertyChanged)SiteState.Properties).PropertyChanged += PropertyChanged;
|
||||
}
|
||||
|
||||
private void PropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
case "PageTitle":
|
||||
if (title != SiteState.Properties.PageTitle)
|
||||
{
|
||||
title = SiteState.Properties.PageTitle;
|
||||
StateHasChanged();
|
||||
}
|
||||
break;
|
||||
case "HeadContent":
|
||||
if (content != SiteState.Properties.HeadContent)
|
||||
{
|
||||
content = SiteState.Properties.HeadContent;
|
||||
StateHasChanged();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
((INotifyPropertyChanged)SiteState.Properties).PropertyChanged -= PropertyChanged;
|
||||
}
|
||||
}
|
@ -273,6 +273,35 @@ namespace Oqtane.Modules
|
||||
SiteState.Properties.ModuleVisibility = obj;
|
||||
}
|
||||
|
||||
public void SetPageTitle(string title)
|
||||
{
|
||||
SiteState.Properties.PageTitle = title;
|
||||
}
|
||||
|
||||
public void AddHeadContent(string content)
|
||||
{
|
||||
if (string.IsNullOrEmpty(SiteState.Properties.HeadContent))
|
||||
{
|
||||
SiteState.Properties.HeadContent = content;
|
||||
}
|
||||
else if (!SiteState.Properties.HeadContent.Contains(content))
|
||||
{
|
||||
SiteState.Properties.HeadContent += content;
|
||||
}
|
||||
}
|
||||
|
||||
public void AddBodyContent(string content)
|
||||
{
|
||||
if (string.IsNullOrEmpty(SiteState.Properties.BodyContent))
|
||||
{
|
||||
SiteState.Properties.BodyContent = content;
|
||||
}
|
||||
else if (!SiteState.Properties.BodyContent.Contains(content))
|
||||
{
|
||||
SiteState.Properties.BodyContent += content;
|
||||
}
|
||||
}
|
||||
|
||||
// logging methods
|
||||
public async Task Log(Alias alias, LogLevel level, string function, Exception exception, string message, params object[] args)
|
||||
{
|
||||
|
@ -1,22 +1,36 @@
|
||||
@namespace Oqtane.UI
|
||||
@inject IJSRuntime JsRuntime
|
||||
@inject NavigationManager NavigationManager
|
||||
@inject SiteState SiteState
|
||||
|
||||
@DynamicComponent
|
||||
|
||||
@code {
|
||||
[CascadingParameter] PageState PageState { get; set; }
|
||||
[CascadingParameter] PageState PageState { get; set; }
|
||||
|
||||
RenderFragment DynamicComponent { 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;
|
||||
}
|
||||
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 meta
|
||||
SiteState.Properties.HeadContent = PageState.Page.Meta ?? "";
|
||||
|
||||
DynamicComponent = builder =>
|
||||
{
|
||||
@ -45,15 +59,5 @@
|
||||
}
|
||||
await interop.RemoveElementsById("app-stylesheet-page-", "", "app-stylesheet-page-" + batch + "-00");
|
||||
await interop.RemoveElementsById("app-stylesheet-module-", "", "app-stylesheet-module-" + batch + "-00");
|
||||
|
||||
// set page title
|
||||
if (!string.IsNullOrEmpty(PageState.Page.Title))
|
||||
{
|
||||
await interop.UpdateTitle(PageState.Page.Title);
|
||||
}
|
||||
else
|
||||
{
|
||||
await interop.UpdateTitle(PageState.Site.Name + " - " + PageState.Page.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user