commit
d97cb4c360
|
@ -260,7 +260,8 @@
|
||||||
IsNewTenant = true,
|
IsNewTenant = true,
|
||||||
SiteName = Constants.DefaultSite,
|
SiteName = Constants.DefaultSite,
|
||||||
Register = _register,
|
Register = _register,
|
||||||
SiteTemplate = _template
|
SiteTemplate = _template,
|
||||||
|
RenderMode = RenderModes.InteractiveServer
|
||||||
};
|
};
|
||||||
|
|
||||||
var installation = await InstallationService.Install(config);
|
var installation = await InstallationService.Install(config);
|
||||||
|
|
|
@ -311,27 +311,32 @@
|
||||||
<Section Name="Hosting" Heading="Hosting Model" ResourceKey="Hosting">
|
<Section Name="Hosting" Heading="Hosting Model" ResourceKey="Hosting">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<Label Class="col-sm-3" For="runtime" HelpText="The Blazor runtime hosting model for the site" ResourceKey="Runtime">Runtime: </Label>
|
<Label Class="col-sm-3" For="rendermode" HelpText="The default render mode for the site" ResourceKey="Rendermode">Render Mode: </Label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<select id="runtime" class="form-select" @bind="@_runtime" required>
|
<select id="rendermode" class="form-select" @bind="@_rendermode" required>
|
||||||
<option value="Server">@SharedLocalizer["BlazorServer"]</option>
|
<option value="@RenderModes.StaticServer">@SharedLocalizer[@RenderModes.StaticServer]</option>
|
||||||
<option value="WebAssembly">@SharedLocalizer["BlazorWebAssembly"]</option>
|
<option value="@RenderModes.InteractiveServer">@SharedLocalizer[@RenderModes.InteractiveServer]</option>
|
||||||
|
<option value="@RenderModes.InteractiveWebAssembly">@SharedLocalizer[@RenderModes.InteractiveWebAssembly]</option>
|
||||||
|
<option value="@RenderModes.InteractiveAuto">@SharedLocalizer[@RenderModes.InteractiveAuto]</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@if (_rendermode != "Static")
|
||||||
|
{
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<Label Class="col-sm-3" For="prerender" HelpText="Specifies if the site should be prerendered (for search crawlers, etc...)" ResourceKey="Prerender">Prerender? </Label>
|
<Label Class="col-sm-3" For="prerender" HelpText="Specifies if the site supports prerendering" ResourceKey="Prerender">Prerender? </Label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<select id="prerender" class="form-select" @bind="@_prerender" required>
|
<select id="prerender" class="form-select" @bind="@_prerender" required>
|
||||||
<option value="Prerendered">@SharedLocalizer["Yes"]</option>
|
<option value="True">@SharedLocalizer["Yes"]</option>
|
||||||
<option value="">@SharedLocalizer["No"]</option>
|
<option value="False">@SharedLocalizer["No"]</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
}
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<Label Class="col-sm-3" For="hybridenabled" HelpText="Specifies if the site can be integrated with an external .NET MAUI hybrid application" ResourceKey="HybridEnabled">Hybrid Enabled? </Label>
|
<Label Class="col-sm-3" For="hybrid" HelpText="Specifies if the site can be integrated with an external .NET MAUI hybrid application" ResourceKey="Hybrid">Hybrid? </Label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<select id="hybridenabled" class="form-select" @bind="@_hybridenabled" required>
|
<select id="hybrid" class="form-select" @bind="@_hybrid" required>
|
||||||
<option value="True">@SharedLocalizer["Yes"]</option>
|
<option value="True">@SharedLocalizer["Yes"]</option>
|
||||||
<option value="False">@SharedLocalizer["No"]</option>
|
<option value="False">@SharedLocalizer["No"]</option>
|
||||||
</select>
|
</select>
|
||||||
|
@ -414,9 +419,9 @@
|
||||||
private int _aliasid = -1;
|
private int _aliasid = -1;
|
||||||
private string _aliasname;
|
private string _aliasname;
|
||||||
private string _defaultalias;
|
private string _defaultalias;
|
||||||
private string _runtime = "";
|
private string _rendermode = RenderModes.InteractiveServer;
|
||||||
private string _prerender = "";
|
private string _prerender = "True";
|
||||||
private string _hybridenabled = "";
|
private string _hybrid = "False";
|
||||||
private string _tenant = string.Empty;
|
private string _tenant = string.Empty;
|
||||||
private string _database = string.Empty;
|
private string _database = string.Empty;
|
||||||
private string _connectionstring = string.Empty;
|
private string _connectionstring = string.Empty;
|
||||||
|
@ -500,9 +505,9 @@
|
||||||
await GetAliases();
|
await GetAliases();
|
||||||
|
|
||||||
// hosting model
|
// hosting model
|
||||||
_runtime = site.Runtime;
|
_rendermode = site.RenderMode;
|
||||||
_prerender = site.RenderMode.Replace(_runtime, "");
|
_prerender = site.Prerender.ToString();
|
||||||
_hybridenabled = site.HybridEnabled.ToString();
|
_hybrid = site.Hybrid.ToString();
|
||||||
|
|
||||||
// database
|
// database
|
||||||
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
|
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
|
||||||
|
@ -640,11 +645,11 @@
|
||||||
// hosting model
|
// hosting model
|
||||||
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
|
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
|
||||||
{
|
{
|
||||||
if (site.Runtime != _runtime || site.RenderMode != _runtime + _prerender || site.HybridEnabled != bool.Parse(_hybridenabled))
|
if (site.RenderMode != _rendermode || site.Prerender != bool.Parse(_prerender) || site.Hybrid != bool.Parse(_hybrid))
|
||||||
{
|
{
|
||||||
site.Runtime = _runtime;
|
site.RenderMode = _rendermode;
|
||||||
site.RenderMode = _runtime + _prerender;
|
site.Prerender = bool.Parse(_prerender);
|
||||||
site.HybridEnabled = bool.Parse(_hybridenabled);
|
site.Hybrid = bool.Parse(_hybrid);
|
||||||
reload = true; // needs to be reloaded on serve
|
reload = true; // needs to be reloaded on serve
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,20 +71,13 @@ else
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<Label Class="col-sm-3" For="runtime" HelpText="The runtime hosting model" ResourceKey="Runtime">Runtime: </Label>
|
<Label Class="col-sm-3" For="rendermode" HelpText="The default render mode for the site" ResourceKey="Rendermode">Render Mode: </Label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<select id="runtime" class="form-select" @bind="@_runtime" required>
|
<select id="rendermode" class="form-select" @bind="@_rendermode" required>
|
||||||
<option value="Server">@SharedLocalizer["BlazorServer"]</option>
|
<option value="@RenderModes.StaticServer">@SharedLocalizer[@RenderModes.StaticServer]</option>
|
||||||
<option value="WebAssembly">@SharedLocalizer["BlazorWebAssembly"]</option>
|
<option value="@RenderModes.InteractiveServer">@SharedLocalizer[@RenderModes.InteractiveServer]</option>
|
||||||
</select>
|
<option value="@RenderModes.InteractiveWebAssembly">@SharedLocalizer[@RenderModes.InteractiveWebAssembly]</option>
|
||||||
</div>
|
<option value="@RenderModes.InteractiveAuto">@SharedLocalizer[@RenderModes.InteractiveAuto]</option>
|
||||||
</div>
|
|
||||||
<div class="row mb-1 align-items-center">
|
|
||||||
<Label Class="col-sm-3" For="prerender" HelpText="Specifies if the site should be prerendered (for search crawlers, etc...)" ResourceKey="Prerender">Prerender? </Label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<select id="prerender" class="form-select" @bind="@_prerender" required>
|
|
||||||
<option value="Prerendered">@SharedLocalizer["Yes"]</option>
|
|
||||||
<option value="">@SharedLocalizer["No"]</option>
|
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -201,8 +194,7 @@ else
|
||||||
private string _themetype = "-";
|
private string _themetype = "-";
|
||||||
private string _containertype = "-";
|
private string _containertype = "-";
|
||||||
private string _sitetemplatetype = "-";
|
private string _sitetemplatetype = "-";
|
||||||
private string _runtime = "Server";
|
private string _rendermode = RenderModes.InteractiveServer;
|
||||||
private string _prerender = "Prerendered";
|
|
||||||
|
|
||||||
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host;
|
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host;
|
||||||
|
|
||||||
|
@ -399,8 +391,7 @@ else
|
||||||
config.DefaultContainer = _containertype;
|
config.DefaultContainer = _containertype;
|
||||||
config.DefaultAdminContainer = "";
|
config.DefaultAdminContainer = "";
|
||||||
config.SiteTemplate = _sitetemplatetype;
|
config.SiteTemplate = _sitetemplatetype;
|
||||||
config.Runtime = _runtime;
|
config.RenderMode = _rendermode;
|
||||||
config.RenderMode = _runtime + _prerender;
|
|
||||||
|
|
||||||
ShowProgressIndicator();
|
ShowProgressIndicator();
|
||||||
|
|
||||||
|
|
|
@ -277,16 +277,16 @@
|
||||||
<value>Hosting Model</value>
|
<value>Hosting Model</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Prerender.HelpText" xml:space="preserve">
|
<data name="Prerender.HelpText" xml:space="preserve">
|
||||||
<value>Specifies if the site should be prerendered (for search crawlers, etc...)</value>
|
<value>Specifies if the site supports prerendering</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Prerender.Text" xml:space="preserve">
|
<data name="Prerender.Text" xml:space="preserve">
|
||||||
<value>Prerender? </value>
|
<value>Prerender? </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Runtime.HelpText" xml:space="preserve">
|
<data name="RenderMode.HelpText" xml:space="preserve">
|
||||||
<value>The Blazor runtime hosting model for the site</value>
|
<value>The default render mode for the site</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Runtime.Text" xml:space="preserve">
|
<data name="RenderMode.Text" xml:space="preserve">
|
||||||
<value>Runtime: </value>
|
<value>Render Mode:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Browse" xml:space="preserve">
|
<data name="Browse" xml:space="preserve">
|
||||||
<value>Browse</value>
|
<value>Browse</value>
|
||||||
|
|
|
@ -223,16 +223,16 @@
|
||||||
<value>Error loading Database Configuration Control</value>
|
<value>Error loading Database Configuration Control</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Prerender.HelpText" xml:space="preserve">
|
<data name="Prerender.HelpText" xml:space="preserve">
|
||||||
<value>Specifies if the site should be prerendered (for search crawlers, etc...)</value>
|
<value>Specifies if the site supports prerendering</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Prerender.Text" xml:space="preserve">
|
<data name="Prerender.Text" xml:space="preserve">
|
||||||
<value>Prerender? </value>
|
<value>Prerender? </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Runtime.HelpText" xml:space="preserve">
|
<data name="RenderMode.HelpText" xml:space="preserve">
|
||||||
<value>The Blazor runtime hosting model</value>
|
<value>The default render mode for the site</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Runtime.Text" xml:space="preserve">
|
<data name="RenderMode.Text" xml:space="preserve">
|
||||||
<value>Runtime: </value>
|
<value>Render Mode: </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ConnectionString.HelpText" xml:space="preserve">
|
<data name="ConnectionString.HelpText" xml:space="preserve">
|
||||||
<value>Enter a complete connection string including all parameters and delimiters</value>
|
<value>Enter a complete connection string including all parameters and delimiters</value>
|
||||||
|
|
|
@ -312,14 +312,14 @@
|
||||||
<data name="Not Specified" xml:space="preserve">
|
<data name="Not Specified" xml:space="preserve">
|
||||||
<value>Not Specified</value>
|
<value>Not Specified</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlazorServer" xml:space="preserve">
|
<data name="InteractiveServer" xml:space="preserve">
|
||||||
<value>Blazor Server</value>
|
<value>Interactive Server Rendering</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlazorWebAssembly" xml:space="preserve">
|
<data name="InteractiveWebAssembly" xml:space="preserve">
|
||||||
<value>Blazor WebAssembly</value>
|
<value>Interactive WebAssembly Rendering</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="BlazorHybrid" xml:space="preserve">
|
<data name="StaticServer" xml:space="preserve">
|
||||||
<value>Blazor Hybrid</value>
|
<value>Static Server Rendering</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Settings" xml:space="preserve">
|
<data name="Settings" xml:space="preserve">
|
||||||
<value>Settings</value>
|
<value>Settings</value>
|
||||||
|
@ -441,4 +441,7 @@
|
||||||
<data name="Message.EffectiveExpiryDateError" xml:space="preserve">
|
<data name="Message.EffectiveExpiryDateError" xml:space="preserve">
|
||||||
<value>Effective Date cannot be after Expiry Date.</value>
|
<value>Effective Date cannot be after Expiry Date.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="InteractiveAuto" xml:space="preserve">
|
||||||
|
<value>Interactive Auto Rendering</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -16,7 +16,7 @@
|
||||||
<div style="@_display">
|
<div style="@_display">
|
||||||
<CascadingAuthenticationState>
|
<CascadingAuthenticationState>
|
||||||
<CascadingValue Value="@PageState">
|
<CascadingValue Value="@PageState">
|
||||||
<SiteRouter Runtime="@Runtime" RenderMode="@RenderMode" VisitorId="@VisitorId" OnStateChange="@ChangeState" />
|
<SiteRouter Runtime="Web" RenderMode="@RenderMode" VisitorId="@VisitorId" OnStateChange="@ChangeState" />
|
||||||
</CascadingValue>
|
</CascadingValue>
|
||||||
</CascadingAuthenticationState>
|
</CascadingAuthenticationState>
|
||||||
</div>
|
</div>
|
||||||
|
@ -34,9 +34,6 @@
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public string AntiForgeryToken { get; set; }
|
public string AntiForgeryToken { get; set; }
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public string Runtime { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public string RenderMode { get; set; }
|
public string RenderMode { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ namespace Oqtane.UI
|
||||||
public bool EditMode { get; set; }
|
public bool EditMode { get; set; }
|
||||||
public DateTime LastSyncDate { get; set; }
|
public DateTime LastSyncDate { get; set; }
|
||||||
public Shared.Runtime Runtime { get; set; }
|
public Shared.Runtime Runtime { get; set; }
|
||||||
|
public string RenderMode { get; set; }
|
||||||
public int VisitorId { get; set; }
|
public int VisitorId { get; set; }
|
||||||
public string RemoteIPAddress { get; set; }
|
public string RemoteIPAddress { get; set; }
|
||||||
public string ReturnUrl { get; set; }
|
public string ReturnUrl { get; set; }
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
using Microsoft.AspNetCore.Components.Web;
|
using Microsoft.AspNetCore.Components.Web;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Oqtane.Shared;
|
||||||
|
|
||||||
namespace Oqtane.Client.Utilities
|
namespace Oqtane.UI
|
||||||
{
|
{
|
||||||
public static class RenderModes
|
public static class RenderMode
|
||||||
{
|
{
|
||||||
public static IComponentRenderMode GetInteractiveRenderMode(string interactiveRenderMode, bool prerender)
|
public static IComponentRenderMode GetInteractiveRenderMode(string interactiveRenderMode, bool prerender)
|
||||||
{
|
{
|
||||||
switch (interactiveRenderMode)
|
switch (interactiveRenderMode)
|
||||||
{
|
{
|
||||||
case "InteractiveServer":
|
case RenderModes.InteractiveServer:
|
||||||
return new InteractiveServerRenderMode(prerender);
|
return new InteractiveServerRenderMode(prerender);
|
||||||
case "InteractiveWebAssembly":
|
case RenderModes.InteractiveWebAssembly:
|
||||||
return new InteractiveWebAssemblyRenderMode(prerender);
|
return new InteractiveWebAssemblyRenderMode(prerender);
|
||||||
case "InteractiveAuto":
|
case RenderModes.InteractiveAuto:
|
||||||
return new InteractiveAutoRenderMode(prerender);
|
return new InteractiveAutoRenderMode(prerender);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
|
@ -1,11 +0,0 @@
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace Oqtane.UI
|
|
||||||
{
|
|
||||||
[Obsolete("This enum is deprecated and will be removed in the upcoming major release, please use Oqtane.Shared.Runtime instead.")]
|
|
||||||
public enum Runtime
|
|
||||||
{
|
|
||||||
Server,
|
|
||||||
WebAssembly
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -100,7 +100,6 @@
|
||||||
var editmode = false;
|
var editmode = false;
|
||||||
var refresh = false;
|
var refresh = false;
|
||||||
var lastsyncdate = DateTime.MinValue;
|
var lastsyncdate = DateTime.MinValue;
|
||||||
var runtime = (Shared.Runtime)Enum.Parse(typeof(Shared.Runtime), Runtime);
|
|
||||||
_error = "";
|
_error = "";
|
||||||
|
|
||||||
Route route = new Route(_absoluteUri, SiteState.Alias.Path);
|
Route route = new Route(_absoluteUri, SiteState.Alias.Path);
|
||||||
|
@ -286,7 +285,8 @@
|
||||||
Action = action,
|
Action = action,
|
||||||
EditMode = editmode,
|
EditMode = editmode,
|
||||||
LastSyncDate = lastsyncdate,
|
LastSyncDate = lastsyncdate,
|
||||||
Runtime = runtime,
|
Runtime = Shared.Runtime.Hybrid,
|
||||||
|
RenderMode = RenderMode,
|
||||||
VisitorId = VisitorId,
|
VisitorId = VisitorId,
|
||||||
RemoteIPAddress = SiteState.RemoteIPAddress,
|
RemoteIPAddress = SiteState.RemoteIPAddress,
|
||||||
ReturnUrl = returnurl,
|
ReturnUrl = returnurl,
|
||||||
|
@ -425,7 +425,7 @@
|
||||||
{
|
{
|
||||||
var typename = Constants.ErrorModule;
|
var typename = Constants.ErrorModule;
|
||||||
|
|
||||||
if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(Runtime)))
|
if (module.ModuleDefinition != null && (module.ModuleDefinition.Runtimes == "" || module.ModuleDefinition.Runtimes.Contains(RenderMode)))
|
||||||
{
|
{
|
||||||
typename = module.ModuleDefinition.ControlTypeTemplate;
|
typename = module.ModuleDefinition.ControlTypeTemplate;
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
@using Microsoft.Net.Http.Headers
|
@using Microsoft.Net.Http.Headers
|
||||||
@using Microsoft.Extensions.Primitives
|
@using Microsoft.Extensions.Primitives
|
||||||
@using Oqtane.Client
|
@using Oqtane.Client
|
||||||
@using Oqtane.Client.Utilities
|
@using Oqtane.UI
|
||||||
@using Oqtane.Repository
|
@using Oqtane.Repository
|
||||||
@using Oqtane.Infrastructure
|
@using Oqtane.Infrastructure
|
||||||
@using Oqtane.Security
|
@using Oqtane.Security
|
||||||
|
@ -47,26 +47,26 @@
|
||||||
@((MarkupString)_styleSheets)
|
@((MarkupString)_styleSheets)
|
||||||
<link id="app-stylesheet-page" />
|
<link id="app-stylesheet-page" />
|
||||||
<link id="app-stylesheet-module" />
|
<link id="app-stylesheet-module" />
|
||||||
@if (_renderMode == "Interactive")
|
@if (_renderMode == RenderModes.StaticServer)
|
||||||
{
|
{
|
||||||
<Head @rendermode="@RenderModes.GetInteractiveRenderMode((_renderMode + _interactiveRenderMode), _prerender.Contains("Prerendered"))" />
|
<Head />
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<Head />
|
<Head @rendermode="@RenderMode.GetInteractiveRenderMode((_renderMode), _prerender)" />
|
||||||
}
|
}
|
||||||
@((MarkupString)_headResources)
|
@((MarkupString)_headResources)
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@if (string.IsNullOrEmpty(_message))
|
@if (string.IsNullOrEmpty(_message))
|
||||||
{
|
{
|
||||||
@if (_renderMode == "Interactive")
|
@if (_renderMode == RenderModes.StaticServer)
|
||||||
{
|
{
|
||||||
<Routes AntiForgeryToken="@_antiForgeryToken" Runtime="@_interactiveRenderMode" RenderMode="@_prerender" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" @rendermode="@RenderModes.GetInteractiveRenderMode((_renderMode + _interactiveRenderMode), _prerender.Contains("Prerendered"))" />
|
<Routes AntiForgeryToken="@_antiForgeryToken" RenderMode="@_renderMode" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" />
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<Routes AntiForgeryToken="@_antiForgeryToken" Runtime="@_interactiveRenderMode" RenderMode="@_prerender" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" />
|
<Routes AntiForgeryToken="@_antiForgeryToken" RenderMode="@_renderMode" VisitorId="@_visitorId" RemoteIPAddress="@_remoteIPAddress" AuthorizationToken="@_authorizationToken" @rendermode="@RenderMode.GetInteractiveRenderMode((_renderMode), _prerender)" />
|
||||||
}
|
}
|
||||||
|
|
||||||
<script src="js/interop.js"></script>
|
<script src="js/interop.js"></script>
|
||||||
|
@ -90,9 +90,8 @@
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private string _renderMode = "Interactive";
|
private string _renderMode = RenderModes.InteractiveServer;
|
||||||
private string _interactiveRenderMode = "Server";
|
private bool _prerender = true;
|
||||||
private string _prerender = "Prerendered";
|
|
||||||
private int _visitorId = -1;
|
private int _visitorId = -1;
|
||||||
private string _remoteIPAddress = "";
|
private string _remoteIPAddress = "";
|
||||||
private string _authorizationToken = "";
|
private string _authorizationToken = "";
|
||||||
|
@ -128,16 +127,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
var site = SiteRepository.GetSite(alias.SiteId);
|
var site = SiteRepository.GetSite(alias.SiteId);
|
||||||
if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && site.Runtime != "Hybrid")
|
if (site != null && (!site.IsDeleted || url.Contains("admin/site")) && !site.Hybrid)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(site.Runtime))
|
_renderMode = site.RenderMode;
|
||||||
{
|
_prerender = site.Prerender;
|
||||||
_interactiveRenderMode = site.Runtime;
|
|
||||||
}
|
|
||||||
if (!string.IsNullOrEmpty(site.RenderMode))
|
|
||||||
{
|
|
||||||
_prerender = site.RenderMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
Route route = new Route(url, alias.Path);
|
Route route = new Route(url, alias.Path);
|
||||||
var page = PageRepository.GetPage(route.PagePath, site.SiteId);
|
var page = PageRepository.GetPage(route.PagePath, site.SiteId);
|
||||||
|
@ -186,7 +179,7 @@
|
||||||
ManageStyleSheets(resources, alias, theme.ThemeName);
|
ManageStyleSheets(resources, alias, theme.ThemeName);
|
||||||
|
|
||||||
// scripts
|
// scripts
|
||||||
if (_interactiveRenderMode == "InteractiveServer")
|
if (_renderMode == RenderModes.InteractiveServer)
|
||||||
{
|
{
|
||||||
_reconnectScript = CreateReconnectScript();
|
_reconnectScript = CreateReconnectScript();
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,7 +119,7 @@ namespace Oqtane.Controllers
|
||||||
var assemblyList = new List<ClientAssembly>();
|
var assemblyList = new List<ClientAssembly>();
|
||||||
|
|
||||||
var site = _sites.GetSite(alias.SiteId);
|
var site = _sites.GetSite(alias.SiteId);
|
||||||
if (site != null && (site.Runtime == "WebAssembly" || site.HybridEnabled))
|
if (site != null && (site.RenderMode == "InteractiveWebAssembly" || site.Hybrid))
|
||||||
{
|
{
|
||||||
var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
|
var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ namespace Oqtane.Controllers
|
||||||
private byte[] GetZIP(string list, Alias alias)
|
private byte[] GetZIP(string list, Alias alias)
|
||||||
{
|
{
|
||||||
var site = _sites.GetSite(alias.SiteId);
|
var site = _sites.GetSite(alias.SiteId);
|
||||||
if (site != null && (site.Runtime == "WebAssembly" || site.HybridEnabled))
|
if (site != null && (site.RenderMode == "InteractiveWebAssembly" || site.Hybrid))
|
||||||
{
|
{
|
||||||
var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
|
var binFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
|
||||||
|
|
||||||
|
|
|
@ -212,7 +212,7 @@ namespace Oqtane.Controllers
|
||||||
site = _sites.UpdateSite(site);
|
site = _sites.UpdateSite(site);
|
||||||
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, site.SiteId, SyncEventActions.Update);
|
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, site.SiteId, SyncEventActions.Update);
|
||||||
string action = SyncEventActions.Refresh;
|
string action = SyncEventActions.Refresh;
|
||||||
if (current.Runtime != site.Runtime || current.RenderMode != site.RenderMode)
|
if (current.RenderMode != site.RenderMode)
|
||||||
{
|
{
|
||||||
action = SyncEventActions.Reload;
|
action = SyncEventActions.Reload;
|
||||||
}
|
}
|
||||||
|
|
|
@ -556,9 +556,9 @@ namespace Oqtane.Infrastructure
|
||||||
DefaultContainerType = (!string.IsNullOrEmpty(install.DefaultContainer)) ? install.DefaultContainer : Constants.DefaultContainer,
|
DefaultContainerType = (!string.IsNullOrEmpty(install.DefaultContainer)) ? install.DefaultContainer : Constants.DefaultContainer,
|
||||||
AdminContainerType = (!string.IsNullOrEmpty(install.DefaultAdminContainer)) ? install.DefaultAdminContainer : Constants.DefaultAdminContainer,
|
AdminContainerType = (!string.IsNullOrEmpty(install.DefaultAdminContainer)) ? install.DefaultAdminContainer : Constants.DefaultAdminContainer,
|
||||||
SiteTemplateType = install.SiteTemplate,
|
SiteTemplateType = install.SiteTemplate,
|
||||||
Runtime = (!string.IsNullOrEmpty(install.Runtime)) ? install.Runtime : _configManager.GetSection("Runtime").Value,
|
|
||||||
RenderMode = (!string.IsNullOrEmpty(install.RenderMode)) ? install.RenderMode : _configManager.GetSection("RenderMode").Value,
|
RenderMode = (!string.IsNullOrEmpty(install.RenderMode)) ? install.RenderMode : _configManager.GetSection("RenderMode").Value,
|
||||||
HybridEnabled = false
|
Prerender = true,
|
||||||
|
Hybrid = false
|
||||||
};
|
};
|
||||||
site = sites.AddSite(site);
|
site = sites.AddSite(site);
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ using Oqtane.Repository;
|
||||||
namespace Oqtane.Migrations.Tenant
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
|
// note that the following migration was actually for version 5.0.2 (ie. "Tenant.05.00.02.01")
|
||||||
[Migration("Tenant.05.01.00.01")]
|
[Migration("Tenant.05.01.00.01")]
|
||||||
public class AddPageEffectiveExpiryDate : MultiDatabaseMigration
|
public class AddPageEffectiveExpiryDate : MultiDatabaseMigration
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,7 @@ using Oqtane.Repository;
|
||||||
namespace Oqtane.Migrations.Tenant
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
|
// note that the following migration was actually for version 5.0.2 (ie. "Tenant.05.00.02.02")
|
||||||
[Migration("Tenant.05.01.00.02")]
|
[Migration("Tenant.05.01.00.02")]
|
||||||
public class AddPageModuleEffectiveExpiryDate : MultiDatabaseMigration
|
public class AddPageModuleEffectiveExpiryDate : MultiDatabaseMigration
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,6 +7,7 @@ using Oqtane.Repository;
|
||||||
namespace Oqtane.Migrations.Tenant
|
namespace Oqtane.Migrations.Tenant
|
||||||
{
|
{
|
||||||
[DbContext(typeof(TenantDBContext))]
|
[DbContext(typeof(TenantDBContext))]
|
||||||
|
// note that the following migration was actually for version 5.0.2 (ie. "Tenant.05.00.02.03")
|
||||||
[Migration("Tenant.05.01.00.03")]
|
[Migration("Tenant.05.01.00.03")]
|
||||||
public class AddProfileAutocomplete : MultiDatabaseMigration
|
public class AddProfileAutocomplete : MultiDatabaseMigration
|
||||||
{
|
{
|
||||||
|
|
39
Oqtane.Server/Migrations/Tenant/05010004_AddSitePrerender.cs
Normal file
39
Oqtane.Server/Migrations/Tenant/05010004_AddSitePrerender.cs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Oqtane.Databases.Interfaces;
|
||||||
|
using Oqtane.Migrations.EntityBuilders;
|
||||||
|
using Oqtane.Repository;
|
||||||
|
using Oqtane.Shared;
|
||||||
|
|
||||||
|
namespace Oqtane.Migrations.Tenant
|
||||||
|
{
|
||||||
|
[DbContext(typeof(TenantDBContext))]
|
||||||
|
[Migration("Tenant.05.01.00.04")]
|
||||||
|
public class AddSitePrerender : MultiDatabaseMigration
|
||||||
|
{
|
||||||
|
public AddSitePrerender(IDatabase database) : base(database)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||||
|
|
||||||
|
siteEntityBuilder.UpdateColumn("RenderMode", $"'{RenderModes.InteractiveServer}'");
|
||||||
|
|
||||||
|
siteEntityBuilder.AddBooleanColumn("Prerender", true);
|
||||||
|
siteEntityBuilder.UpdateColumn("Prerender", "1", "bool", "");
|
||||||
|
|
||||||
|
siteEntityBuilder.AddBooleanColumn("Hybrid", true);
|
||||||
|
siteEntityBuilder.UpdateColumn("Hybrid", "0", "bool", "");
|
||||||
|
|
||||||
|
siteEntityBuilder.DropColumn("Runtime");
|
||||||
|
siteEntityBuilder.DropColumn("HybridEnabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
// not implemented
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,8 +2,7 @@ namespace Oqtane.Shared
|
||||||
{
|
{
|
||||||
public enum Runtime
|
public enum Runtime
|
||||||
{
|
{
|
||||||
Server,
|
Web,
|
||||||
WebAssembly,
|
|
||||||
Hybrid
|
Hybrid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,19 +69,19 @@ namespace Oqtane.Models
|
||||||
public string SiteGuid { get; set; }
|
public string SiteGuid { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The hosting model for the site (ie. Server or WebAssembly ).
|
/// The default render mode for the site (ie. Static,InteractiveServer,InteractiveWebAssembly,InteractiveAuto)
|
||||||
/// </summary>
|
|
||||||
public string Runtime { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The render mode for the site (ie. Server, ServerPrerendered, WebAssembly, WebAssemblyPrerendered ).
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string RenderMode { get; set; }
|
public string RenderMode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If the site supports prerendering (only applies to Interactive rendering)
|
||||||
|
/// </summary>
|
||||||
|
public bool Prerender { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Indicates if a site can be integrated with an external .NET MAUI hybrid application
|
/// Indicates if a site can be integrated with an external .NET MAUI hybrid application
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool HybridEnabled { get; set; }
|
public bool Hybrid { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Keeps track of site configuration changes and is used by the ISiteMigration interface
|
/// Keeps track of site configuration changes and is used by the ISiteMigration interface
|
||||||
|
|
|
@ -17,7 +17,6 @@ namespace Oqtane.Shared
|
||||||
public string DefaultTheme { get; set; }
|
public string DefaultTheme { get; set; }
|
||||||
public string DefaultContainer { get; set; }
|
public string DefaultContainer { get; set; }
|
||||||
public string DefaultAdminContainer { get; set; }
|
public string DefaultAdminContainer { get; set; }
|
||||||
public string Runtime { get; set; }
|
|
||||||
public string RenderMode { get; set; }
|
public string RenderMode { get; set; }
|
||||||
public bool Register { get; set; }
|
public bool Register { get; set; }
|
||||||
}
|
}
|
||||||
|
|
8
Oqtane.Shared/Shared/RenderModes.cs
Normal file
8
Oqtane.Shared/Shared/RenderModes.cs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
namespace Oqtane.Shared {
|
||||||
|
public class RenderModes {
|
||||||
|
public const string StaticServer = "StaticServer";
|
||||||
|
public const string InteractiveServer = "InteractiveServer";
|
||||||
|
public const string InteractiveWebAssembly = "InteractiveWebAssembly";
|
||||||
|
public const string InteractiveAuto = "InteractiveAuto";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user