diff --git a/Oqtane.Client/App.razor b/Oqtane.Client/App.razor new file mode 100644 index 00000000..90e4917c --- /dev/null +++ b/Oqtane.Client/App.razor @@ -0,0 +1,16 @@ +@using Oqtane.Shared +@using Oqtane.Client.Shared + + + + + +@functions { + private PageState PageState { get; set; } + + private void ChangeState(PageState pagestate) + { + PageState = pagestate; + StateHasChanged(); + } +} diff --git a/Oqtane.Client/Modules/Admin/Admin/Index.razor b/Oqtane.Client/Modules/Admin/Admin/Index.razor new file mode 100644 index 00000000..62d3242f --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Admin/Index.razor @@ -0,0 +1,34 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Modules +@using Oqtane.Services +@using Oqtane.Models; +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IPageService PageService +@inject IUserService UserService + + +

+ +@functions { + List pages; + + protected override void OnInit() + { + // display list of pages which are children of current page + pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).ToList(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor new file mode 100644 index 00000000..e3d1ff74 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -0,0 +1,49 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Shared +@using Oqtane.Modules +@using Microsoft.JSInterop +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IJSRuntime jsRuntime +@inject IUserService UserService + +
+ @((MarkupString)Message) +
+ + +
+
+ + +
+ + Cancel +
+ +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Anonymous; } } + + public string Message { get; set; } = "
Use host/host For Demo Access
"; + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; + + private async Task Login() + { + List users = await UserService.GetUsersAsync(); + User user = users.Where(item => item.Username == Username).FirstOrDefault(); + if (user != null) + { + var interop = new Interop(jsRuntime); + await interop.SetCookie("user", user.UserId.ToString(), 7); + UriHelper.NavigateTo(PageState.Alias, true); + } + else + { + Message = "
User Does Not Exist
"; + } + } +} diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor new file mode 100644 index 00000000..d951481c --- /dev/null +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -0,0 +1,41 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject IModuleDefinitionService ModuleDefinitionService + +@if (moduledefinitions == null) +{ +

Loading...

+} +else +{ + + + + + + + + @foreach (var moduledefinition in moduledefinitions) + { + + + + } + +
Name
@moduledefinition.Name
+} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + List moduledefinitions; + + protected override async Task OnInitAsync() + { + moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor new file mode 100644 index 00000000..94e16974 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor @@ -0,0 +1,115 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject ISkinService SkinService +@inject IModuleService ModuleService +@inject IPageModuleService PageModuleService + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Edit; } } + + Dictionary containers = new Dictionary(); + string title; + string containertype; + string viewpermissions; + string editpermissions; + string pageid; + + protected override async Task OnInitAsync() + { + title = ModuleState.Title; + List Skins = await SkinService.GetSkinsAsync(); + foreach (Skin skin in Skins) + { + foreach (string container in skin.ContainerControls.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + containers.Add(container, skin.Name + " - " + @Utilities.GetTypeNameClass(container)); + } + } + containertype = ModuleState.ContainerType; + viewpermissions = ModuleState.ViewPermissions; + editpermissions = ModuleState.EditPermissions; + pageid = ModuleState.PageId.ToString(); + } + + private async Task SaveModule() + { + Module module = ModuleState; + module.ViewPermissions = viewpermissions; + module.EditPermissions = editpermissions; + await ModuleService.UpdateModuleAsync(module); + + PageModule pagemodule = new PageModule(); + pagemodule.PageModuleId = ModuleState.PageModuleId; + pagemodule.PageId = Int32.Parse(pageid); + pagemodule.ModuleId = ModuleState.ModuleId; + pagemodule.Title = title; + pagemodule.Pane = ModuleState.Pane; + pagemodule.Order = ModuleState.Order; + pagemodule.ContainerType = containertype; + await PageModuleService.UpdatePageModuleAsync(pagemodule); + + UriHelper.NavigateTo(NavigateUrl(true)); + } +} diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor new file mode 100644 index 00000000..4ada70e9 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -0,0 +1,187 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IPageService PageService +@inject ISkinService SkinService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } + + Dictionary skins = new Dictionary(); + Dictionary panelayouts = new Dictionary(); + + string name; + string path; + string parentid; + string order = ""; + string isnavigation = "True"; + string skintype; + string layouttype = ""; + string icon = ""; + string viewpermissions = "All Users"; + string editpermissions = "Administrators"; + + protected override async Task OnInitAsync() + { + List Skins = await SkinService.GetSkinsAsync(); + foreach (Skin skin in Skins) + { + foreach (string skincontrol in skin.SkinControls.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + skins.Add(skincontrol, skin.Name + " - " + @Utilities.GetTypeNameClass(skincontrol)); + } + foreach (string panelayout in skin.PaneLayouts.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + panelayouts.Add(panelayout, skin.Name + " - " + @Utilities.GetTypeNameClass(panelayout)); + } + } + } + + private async Task SavePage() + { + Page p = new Page(); + p.SiteId = PageState.Page.SiteId; + if (string.IsNullOrEmpty(parentid)) + { + p.ParentId = null; + } + else + { + p.ParentId = Int32.Parse(parentid); + } + p.Name = name; + p.Path = path; + p.Order = (order == null ? 1 : Int32.Parse(order)); + p.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); + p.SkinType = skintype; + p.LayoutType = (layouttype == null ? "" : layouttype); + p.Icon = (icon == null ? "" : icon); + Type type; + if (!string.IsNullOrEmpty(layouttype)) + { + type = Type.GetType(layouttype); + } + else + { + type = Type.GetType(skintype); + } + System.Reflection.PropertyInfo property = type.GetProperty("Panes"); + p.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); + p.ViewPermissions = viewpermissions; + p.EditPermissions = editpermissions; + await PageService.AddPageAsync(p); + StateHasChanged(); + UriHelper.NavigateTo(NavigateUrl(path, true)); + } +} diff --git a/Oqtane.Client/Modules/Admin/Pages/Delete.razor b/Oqtane.Client/Modules/Admin/Pages/Delete.razor new file mode 100644 index 00000000..7a76fa3f --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Pages/Delete.razor @@ -0,0 +1,173 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IPageService PageService +@inject ISkinService SkinService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } + + Dictionary skins = new Dictionary(); + Dictionary panelayouts = new Dictionary(); + + int PageId; + string name; + string path; + string parentid; + string order; + string isnavigation; + string skintype; + string layouttype; + string icon; + string viewpermissions; + string editpermissions; + + protected override async Task OnInitAsync() + { + List Skins = await SkinService.GetSkinsAsync(); + foreach (Skin skin in Skins) + { + foreach (string skincontrol in skin.SkinControls.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + skins.Add(skincontrol, skin.Name + " - " + @Utilities.GetTypeNameClass(skincontrol)); + } + foreach (string panelayout in skin.PaneLayouts.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + panelayouts.Add(panelayout, skin.Name + " - " + @Utilities.GetTypeNameClass(panelayout)); + } + } + + PageId = Int32.Parse(PageState.QueryString["id"]); + Page p = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); + if (p != null) + { + name = p.Name; + path = p.Path; + + order = p.Order.ToString(); + isnavigation = p.IsNavigation.ToString(); + skintype = p.SkinType; + layouttype = p.LayoutType; + icon = p.Icon; + viewpermissions = p.ViewPermissions; + editpermissions = p.EditPermissions; + } + } + + private async Task DeletePage() + { + await PageService.DeletePageAsync(Int32.Parse(PageState.QueryString["id"])); + UriHelper.NavigateTo(PageState.Alias); + } +} diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor new file mode 100644 index 00000000..814ff3d7 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -0,0 +1,210 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Shared +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IPageService PageService +@inject ISkinService SkinService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } + + Dictionary skins = new Dictionary(); + Dictionary panelayouts = new Dictionary(); + + int PageId; + string name; + string path; + string parentid; + string order; + string isnavigation; + string skintype; + string layouttype; + string icon; + string viewpermissions; + string editpermissions; + + protected override async Task OnInitAsync() + { + List Skins = await SkinService.GetSkinsAsync(); + foreach (Skin skin in Skins) + { + foreach (string skincontrol in skin.SkinControls.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + skins.Add(skincontrol, skin.Name + " - " + @Utilities.GetTypeNameClass(skincontrol)); + } + foreach (string panelayout in skin.PaneLayouts.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)) + { + panelayouts.Add(panelayout, skin.Name + " - " + @Utilities.GetTypeNameClass(panelayout)); + } + } + + PageId = Int32.Parse(PageState.QueryString["id"]); + Page p = PageState.Pages.Where(item => item.PageId == PageId).FirstOrDefault(); + if (p != null) + { + name = p.Name; + path = p.Path; + if (p.ParentId == null) + { + parentid = ""; + } + else + { + parentid = p.ParentId.ToString(); + } + order = p.Order.ToString(); + isnavigation = p.IsNavigation.ToString(); + skintype = p.SkinType; + layouttype = p.LayoutType; + icon = p.Icon; + viewpermissions = p.ViewPermissions; + editpermissions = p.EditPermissions; + } + } + + private async Task SavePage() + { + Page p = PageState.Page; + p.PageId = Int32.Parse(PageState.QueryString["id"]); + if (string.IsNullOrEmpty(parentid)) + { + p.ParentId = null; + } + else + { + p.ParentId = Int32.Parse(parentid); + } + p.Name = name; + p.Path = path; + p.Order = (order == null ? 1 : Int32.Parse(order)); + p.IsNavigation = (isnavigation == null ? true : Boolean.Parse(isnavigation)); + p.SkinType = skintype; + p.LayoutType = (layouttype == null ? "" : layouttype); + p.Icon = (icon == null ? "" : icon); + Type type; + if (!string.IsNullOrEmpty(layouttype)) + { + type = Type.GetType(layouttype); + } + else + { + type = Type.GetType(skintype); + } + System.Reflection.PropertyInfo property = type.GetProperty("Panes"); + p.Panes = (string)property.GetValue(Activator.CreateInstance(type), null); + p.ViewPermissions = viewpermissions; + p.EditPermissions = editpermissions; + await PageService.UpdatePageAsync(p); + UriHelper.NavigateTo(NavigateUrl(path)); + } +} diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor new file mode 100644 index 00000000..b34495ae --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor @@ -0,0 +1,40 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject IPageService PageService + +@if (PageState.Pages == null) +{ +

Loading...

+} +else +{ + + + + + + + + + + @foreach (var p in PageState.Pages) + { + + + + + + + } + +
PathName
@p.Path@p.Name
+ +} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Register/Index.razor b/Oqtane.Client/Modules/Admin/Register/Index.razor new file mode 100644 index 00000000..5d4dfbeb --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Register/Index.razor @@ -0,0 +1,29 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Shared +@using Oqtane.Modules +@using Microsoft.JSInterop +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject IJSRuntime jsRuntime + + +
+
+ + +
+
+ + +
+ + Cancel +
+ +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Anonymous; } } + + public string Username { get; set; } = ""; + public string Password { get; set; } = ""; +} diff --git a/Oqtane.Client/Modules/Admin/Sites/Add.razor b/Oqtane.Client/Modules/Admin/Sites/Add.razor new file mode 100644 index 00000000..5baa85dd --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Sites/Add.razor @@ -0,0 +1,46 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Models +@using Oqtane.Services +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject ISiteService SiteService + + + + + + + + + + +
+ + + +
+ + + +
+ +Cancel + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + string name; + string alias; + + private async Task SaveSite() + { + Site site = new Site(); + site.Name = name; + site.Logo = ""; + await SiteService.AddSiteAsync(site); + StateHasChanged(); + UriHelper.NavigateTo(NavigateUrl()); + } +} diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor new file mode 100644 index 00000000..6d3f665c --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor @@ -0,0 +1,42 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject ISiteService SiteService + +@if (sites == null) +{ +

Loading...

+} +else +{ + + + + + + + + @foreach (var site in sites) + { + + + + } + +
Name
@site.Name
+ +} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + List sites; + + protected override async Task OnInitAsync() + { + sites = await SiteService.GetSitesAsync(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Skins/Index.razor b/Oqtane.Client/Modules/Admin/Skins/Index.razor new file mode 100644 index 00000000..c3815cc4 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Skins/Index.razor @@ -0,0 +1,41 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject ISkinService SkinService + +@if (Skins == null) +{ +

Loading...

+} +else +{ + + + + + + + + @foreach (var Skin in Skins) + { + + + + } + +
Name
@Skin.Name
+} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + List Skins; + + protected override async Task OnInitAsync() + { + Skins = await SkinService.GetSkinsAsync(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor new file mode 100644 index 00000000..6be55798 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -0,0 +1,41 @@ +@using Oqtane.Services +@using Oqtane.Models +@using Oqtane.Modules +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase + +@inject IUserService UserService + +@if (Users == null) +{ +

Loading...

+} +else +{ + + + + + + + + @foreach (var User in Users) + { + + + + } + +
Name
@User.Username
+} + +@functions { + public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } + + List Users; + + protected override async Task OnInitAsync() + { + Users = await UserService.GetUsersAsync(); + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Controls/ActionLink.razor b/Oqtane.Client/Modules/Controls/ActionLink.razor new file mode 100644 index 00000000..baf34acc --- /dev/null +++ b/Oqtane.Client/Modules/Controls/ActionLink.razor @@ -0,0 +1,67 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Modules +@using Oqtane.Services +@using Oqtane.Shared +@inherits ModuleBase +@inject IUserService UserService + +@if (authorized) +{ + @text +} + +@functions { + [Parameter] + private string Action { get; set; } + + [Parameter] + private string Text { get; set; } // optional + + [Parameter] + private string Parameters { get; set; } // optional + + string text = ""; + string url = ""; + string parameters = ""; + bool authorized = false; + + protected override void OnInit() + { + text = Action; + if (!String.IsNullOrEmpty(Text)) + { + text = Text; + } + if (!String.IsNullOrEmpty(Parameters)) + { + parameters = Parameters; + } + url = EditUrl(Action, parameters); + + string typename = ModuleState.ModuleType.Replace(Utilities.GetTypeNameClass(ModuleState.ModuleType) + ",", Action + ","); + Type moduleType = Type.GetType(typename); + if (moduleType != null) + { + var moduleobject = Activator.CreateInstance(moduleType); + SecurityAccessLevelEnum SecurityAccessLevel = (SecurityAccessLevelEnum)moduleType.GetProperty("SecurityAccessLevel").GetValue(moduleobject, null); + switch (SecurityAccessLevel) + { + case SecurityAccessLevelEnum.Anonymous: + authorized = true; + break; + case SecurityAccessLevelEnum.View: + authorized = UserService.IsAuthorized(PageState.User, ModuleState.ViewPermissions); + break; + case SecurityAccessLevelEnum.Edit: + authorized = UserService.IsAuthorized(PageState.User, ModuleState.EditPermissions); + break; + case SecurityAccessLevelEnum.Admin: + authorized = UserService.IsAuthorized(PageState.User, Constants.AdminRole); + break; + case SecurityAccessLevelEnum.Host: + authorized = PageState.User.IsSuperUser; + break; + } + } + } +} diff --git a/Oqtane.Client/Modules/Counter/Index.razor b/Oqtane.Client/Modules/Counter/Index.razor new file mode 100644 index 00000000..b95a4406 --- /dev/null +++ b/Oqtane.Client/Modules/Counter/Index.razor @@ -0,0 +1,15 @@ +@using Oqtane.Modules +@inherits ModuleBase +Current count: @currentCount +
+ +

+ +@functions { + int currentCount = 0; + + void IncrementCount() + { + currentCount++; + } +} diff --git a/Oqtane.Client/Modules/Counter/Module.cs b/Oqtane.Client/Modules/Counter/Module.cs new file mode 100644 index 00000000..63973db1 --- /dev/null +++ b/Oqtane.Client/Modules/Counter/Module.cs @@ -0,0 +1,16 @@ +using Oqtane.Modules; + +namespace Oqtane.Client.Modules.Counter +{ + public class Module : IModule + { + public string Name { get { return "Counter"; } } + public string Description { get { return "Increments a counter"; } } + public string Version { get { return "1.0.0"; } } + public string Owner { get { return ""; } } + public string Url { get { return ""; } } + public string Contact { get { return ""; } } + public string License { get { return ""; } } + public string Dependencies { get { return ""; } } + } +} diff --git a/Oqtane.Client/Modules/HtmlText/Edit.razor b/Oqtane.Client/Modules/HtmlText/Edit.razor new file mode 100644 index 00000000..7c216f5a --- /dev/null +++ b/Oqtane.Client/Modules/HtmlText/Edit.razor @@ -0,0 +1,61 @@ +@using Microsoft.AspNetCore.Components.Routing +@using Oqtane.Modules +@using Oqtane.Client.Modules.HtmlText.Services +@using Oqtane.Shared.Modules.HtmlText.Models +@using System.Net.Http; +@using Oqtane.Client.Modules.Controls +@inherits ModuleBase +@inject IUriHelper UriHelper +@inject HttpClient http + +
+ + + +
+ + +