Compare commits
62 Commits
56d54b5dea
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 46150d3a69 | |||
| 85834466f1 | |||
| 7da6f554a8 | |||
| dc0395c7d3 | |||
| 026aebd5ad | |||
| 3974fcfb91 | |||
| 410e7e23b7 | |||
| 6655cdeee7 | |||
| 1f7a0819fc | |||
| 73f29cea08 | |||
| b63d8330f7 | |||
| ad7aabd9e0 | |||
| 7680fae30b | |||
| 9e9b25ae6f | |||
| cf3f6e647b | |||
| c0ea4a094e | |||
| 1bc78306b8 | |||
| 826717c47f | |||
| a5964a68f8 | |||
| 424fdd248a | |||
| 7ca2f82ad7 | |||
| fd20f8ca7d | |||
| 5d4f141580 | |||
| 2baa295e1f | |||
| b8d2210cc5 | |||
| 8b5d5a05e4 | |||
| 02d6e2f5e9 | |||
| 22d245972c | |||
| c95ee06449 | |||
| df5c5480d8 | |||
| e641189c9d | |||
| 071d2f5e35 | |||
| ff4941d38c | |||
| 4b2fe6d551 | |||
| b02232855d | |||
| f5e8984ab8 | |||
| 2ac56f9672 | |||
| e464b9ecab | |||
| 720a99991f | |||
| 80f44c3931 | |||
| db48f05686 | |||
| e90621c2fd | |||
| 2246847145 | |||
| 3d10256b9f | |||
| 1f71062691 | |||
| 831512a64b | |||
| 8f203b2ba1 | |||
| d320476084 | |||
| e28f74b354 | |||
| 764192891c | |||
| b653a00238 | |||
| 25776b3b00 | |||
| cacbe6979e | |||
| e820457176 | |||
| 38ff4e3e89 | |||
| 65ab4bcf05 | |||
| 0bb95ee9a6 | |||
| f084aedb0b | |||
| 079ced6af7 | |||
| 730bff71ef | |||
| 01d8b383e1 | |||
| 83ee8c3ae4 |
@@ -25,7 +25,7 @@ jobs:
|
||||
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_CALM_MUD_04916B210 }}
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
action: "upload"
|
||||
app_location: "IGP"
|
||||
app_location: "Web"
|
||||
api_location: ""
|
||||
output_location: "./wwwroot"
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_NICE_COAST_0F8B08010 }}
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
action: "upload"
|
||||
app_location: "IGP"
|
||||
app_location: "Web"
|
||||
api_location: ""
|
||||
output_location: "./wwwroot"
|
||||
|
||||
|
||||
@@ -137,6 +137,7 @@ DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
publish_release/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
@@ -264,3 +265,6 @@ __pycache__/
|
||||
|
||||
**/.vs/
|
||||
.DS_Store
|
||||
|
||||
|
||||
publish_release/
|
||||
@@ -0,0 +1 @@
|
||||
3.0
|
||||
Vendored
+3
-3
@@ -7,7 +7,7 @@
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/IGP/IGP.csproj",
|
||||
"${workspaceFolder}/Web/Web.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
@@ -19,7 +19,7 @@
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"${workspaceFolder}/IGP/IGP.csproj",
|
||||
"${workspaceFolder}/Web/Web.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
@@ -33,7 +33,7 @@
|
||||
"watch",
|
||||
"run",
|
||||
"--project",
|
||||
"${workspaceFolder}/IGP/IGP.csproj"
|
||||
"${workspaceFolder}/Web/Web.csproj"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<RootNamespace>IGP.Calculator.Cli</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Services\Services.csproj" />
|
||||
<ProjectReference Include="..\Model\Model.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
+155
@@ -0,0 +1,155 @@
|
||||
using IGP.Calculator.Cli.Services;
|
||||
using Model.Entity;
|
||||
using Model.Entity.Data;
|
||||
using Services.Immortal;
|
||||
using Services.Website;
|
||||
|
||||
var faction = DataType.FACTION_QRath;
|
||||
var immortal = DataType.IMMORTAL_Orzum;
|
||||
var attackTime = 1500;
|
||||
var entityNames = new List<string>();
|
||||
|
||||
for (var i = 0; i < args.Length; i++)
|
||||
switch (args[i].ToLower())
|
||||
{
|
||||
case "--faction" when i + 1 < args.Length:
|
||||
var f = args[++i].ToLower();
|
||||
faction = f switch
|
||||
{
|
||||
"qrath" => DataType.FACTION_QRath,
|
||||
"aru" => DataType.FACTION_Aru,
|
||||
_ => throw new Exception($"Unknown faction '{args[i]}'. Use QRath or Aru.")
|
||||
};
|
||||
immortal = f switch
|
||||
{
|
||||
"qrath" => DataType.IMMORTAL_Orzum,
|
||||
"aru" => DataType.IMMORTAL_Mala,
|
||||
_ => immortal
|
||||
};
|
||||
break;
|
||||
case "--immortal" when i + 1 < args.Length:
|
||||
var im = args[++i];
|
||||
immortal = im switch
|
||||
{
|
||||
nameof(DataType.IMMORTAL_Orzum) => DataType.IMMORTAL_Orzum,
|
||||
nameof(DataType.IMMORTAL_Ajari) => DataType.IMMORTAL_Ajari,
|
||||
nameof(DataType.IMMORTAL_Atzlan) => DataType.IMMORTAL_Atzlan,
|
||||
nameof(DataType.IMMORTAL_Mala) => DataType.IMMORTAL_Mala,
|
||||
nameof(DataType.IMMORTAL_Xol) => DataType.IMMORTAL_Xol,
|
||||
_ => throw new Exception($"Unknown immortal '{im}'.")
|
||||
};
|
||||
break;
|
||||
case "--attack-time" or "-a" when i + 1 < args.Length:
|
||||
attackTime = int.Parse(args[++i]);
|
||||
break;
|
||||
default:
|
||||
entityNames.Add(args[i]);
|
||||
break;
|
||||
}
|
||||
|
||||
var toastService = new ToastService();
|
||||
var storageService = new NullStorageService();
|
||||
var timingService = new TimingService(storageService);
|
||||
timingService.SetAttackTime(attackTime);
|
||||
var buildOrderService = new BuildOrderService(toastService, timingService);
|
||||
var economyService = new EconomyService();
|
||||
|
||||
buildOrderService.Reset(faction);
|
||||
economyService.Calculate(buildOrderService, timingService, 0);
|
||||
|
||||
Console.WriteLine($"Faction: {(faction == DataType.FACTION_QRath ? "Q'Rath" : "Aru")}");
|
||||
Console.WriteLine($"Immortal: {immortal.Replace("IMMORTAL_", "")}");
|
||||
Console.WriteLine($"Attack Time: {attackTime}s");
|
||||
Console.WriteLine(new string('-', 50));
|
||||
|
||||
foreach (var name in entityNames)
|
||||
{
|
||||
if (name.StartsWith("wait ", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var seconds = int.Parse(name[5..]);
|
||||
buildOrderService.AddWait(seconds);
|
||||
economyService.Calculate(buildOrderService, timingService, buildOrderService.GetLastRequestInterval());
|
||||
Console.WriteLine($" Wait {seconds}s -> now at interval {buildOrderService.GetLastRequestInterval()}");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (name.StartsWith("waitto ", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var interval = int.Parse(name[7..]);
|
||||
buildOrderService.AddWaitTo(interval);
|
||||
economyService.Calculate(buildOrderService, timingService, buildOrderService.GetLastRequestInterval());
|
||||
Console.WriteLine($" Wait to {interval}s -> now at interval {buildOrderService.GetLastRequestInterval()}");
|
||||
continue;
|
||||
}
|
||||
|
||||
var entity = FindEntity(name, faction, immortal);
|
||||
if (entity == null)
|
||||
{
|
||||
Console.WriteLine($" ERROR: '{name}' not found for this faction/immortal.");
|
||||
continue;
|
||||
}
|
||||
|
||||
var beforeInterval = buildOrderService.GetLastRequestInterval();
|
||||
var added = buildOrderService.Add(entity, economyService);
|
||||
if (added)
|
||||
{
|
||||
economyService.Calculate(buildOrderService, timingService, buildOrderService.GetLastRequestInterval());
|
||||
var startedAt = buildOrderService.GetLastRequestInterval();
|
||||
var production = entity.Production();
|
||||
var completedAt = production != null ? startedAt + production.BuildTime : startedAt;
|
||||
var cost = production != null
|
||||
? $" [{production.Alloy}a/{production.Ether}e/{production.Pyre}p, {production.BuildTime}s]"
|
||||
: "";
|
||||
Console.WriteLine($" {entity.GetName(),-25} start={startedAt,4}s done={completedAt,4}s{cost}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($" ERROR: Could not add '{name}'.");
|
||||
var toasts = toastService.GetToasts();
|
||||
if (toasts.Count > 0)
|
||||
{
|
||||
var lastToast = toasts[0];
|
||||
Console.WriteLine($" Reason: {lastToast.Title} - {lastToast.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine(new string('-', 50));
|
||||
|
||||
var lastInterval = buildOrderService.GetLastRequestInterval();
|
||||
var finalEconomy = economyService.GetEconomy(timingService.GetAttackTime());
|
||||
var lastEconomy = economyService.GetEconomy(lastInterval);
|
||||
|
||||
Console.WriteLine($"Army Attacking At: {timingService.GetAttackTime()}s");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine($"At attack time ({timingService.GetAttackTime()}s):");
|
||||
Console.WriteLine($" Alloy: {finalEconomy.Alloy,10:F1}");
|
||||
Console.WriteLine($" Ether: {finalEconomy.Ether,10:F1}");
|
||||
Console.WriteLine($" Pyre: {finalEconomy.Pyre,10:F1}");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine($"At last build action ({lastInterval}s):");
|
||||
Console.WriteLine($" Alloy: {lastEconomy.Alloy,10:F1}");
|
||||
Console.WriteLine($" Ether: {lastEconomy.Ether,10:F1}");
|
||||
Console.WriteLine($" Pyre: {lastEconomy.Pyre,10:F1}");
|
||||
|
||||
static EntityModel? FindEntity(string name, string faction, string immortal)
|
||||
{
|
||||
var candidates = EntityModel.GetList()
|
||||
.Where(e => e.Info()?.Name?.Equals(name, StringComparison.OrdinalIgnoreCase) == true)
|
||||
.Where(e => e.Faction()?.Faction == faction)
|
||||
.ToList();
|
||||
|
||||
if (candidates.Count == 0)
|
||||
candidates = EntityModel.GetList()
|
||||
.Where(e => e.Info()?.Name?.Equals(name, StringComparison.OrdinalIgnoreCase) == true)
|
||||
.Where(e => e.Faction() == null || e.Faction()!.Faction == DataType.FACTION_Neutral)
|
||||
.ToList();
|
||||
|
||||
if (candidates.Count == 0) return null;
|
||||
if (candidates.Count == 1) return candidates[0];
|
||||
|
||||
var vanguardMatch = candidates.FirstOrDefault(e => e.VanguardAdded()?.ImmortalId == immortal);
|
||||
if (vanguardMatch != null) return vanguardMatch;
|
||||
|
||||
return candidates.FirstOrDefault(e => e.VanguardAdded() == null);
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using Services;
|
||||
|
||||
namespace IGP.Calculator.Cli.Services;
|
||||
|
||||
public class NullStorageService : IStorageService
|
||||
{
|
||||
private readonly Dictionary<string, object?> _store = new();
|
||||
|
||||
public void Subscribe(Action action)
|
||||
{
|
||||
}
|
||||
|
||||
public void Unsubscribe(Action action)
|
||||
{
|
||||
}
|
||||
|
||||
public T GetValue<T>(string forKey)
|
||||
{
|
||||
if (_store.TryGetValue(forKey, out var value) && value is T typed)
|
||||
return typed;
|
||||
return default!;
|
||||
}
|
||||
|
||||
public void SetValue<T>(string key, T value)
|
||||
{
|
||||
_store[key] = value;
|
||||
}
|
||||
|
||||
public Task Load()
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Razor">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>Components</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
@@ -15,17 +16,17 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<SupportedPlatform Include="browser" />
|
||||
<SupportedPlatform Include="browser"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Markdig" Version="0.28.1" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="6.0.8" />
|
||||
<PackageReference Include="Microsoft.Extensions.Localization" Version="7.0.0-preview.7.22376.6" />
|
||||
<PackageReference Include="Markdig" Version="0.28.1"/>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="8.0.14"/>
|
||||
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.14"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Inputs\" />
|
||||
<Folder Include="Inputs\"/>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -33,6 +34,6 @@
|
||||
<ProjectReference Include="..\Services\Services.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Remove="Inputs\" />
|
||||
<None Remove="Inputs\"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -13,15 +13,14 @@
|
||||
overflow-x: scroll;
|
||||
}
|
||||
|
||||
.code::-webkit-scrollbar {
|
||||
height: 0;
|
||||
background: transparent;
|
||||
}
|
||||
.code::-webkit-scrollbar {
|
||||
height: 0;
|
||||
background: transparent;
|
||||
}
|
||||
</style>
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -22,7 +22,7 @@
|
||||
}
|
||||
|
||||
.devOnlyTitle {
|
||||
background-color: rgba(20,20,20,0.75);
|
||||
background-color: rgba(20, 20, 20, 0.75);
|
||||
padding: 10px;
|
||||
color: orange;
|
||||
font-weight: bolder;
|
||||
@@ -30,14 +30,14 @@
|
||||
}
|
||||
|
||||
.devOnlyContent {
|
||||
background-color: rgba(20,20,20,0.75);
|
||||
background-color: rgba(20, 20, 20, 0.75);
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
|
||||
.devOnlyTitleContainer {
|
||||
background: repeating-linear-gradient( 45deg, blue, blue 50px, orange 51px, orange 100px);
|
||||
background: repeating-linear-gradient(45deg, blue, blue 50px, orange 51px, orange 100px);
|
||||
margin-right: auto;
|
||||
padding: 10px;
|
||||
border-left: 6px dashed orange;
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
.devOnlyContentContainer {
|
||||
border: 6px dashed orange;
|
||||
background: repeating-linear-gradient( 45deg, blue, blue 50px, orange 51px, orange 100px);
|
||||
background: repeating-linear-gradient(45deg, blue, blue 50px, orange 51px, orange 100px);
|
||||
box-shadow: 5px 5px 5px blue;
|
||||
padding: 20px;
|
||||
}
|
||||
@@ -58,11 +58,9 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Inject]
|
||||
NavigationManager NavigationManager { get; set; } = default!;
|
||||
[Inject] NavigationManager NavigationManager { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
bool isOnDev;
|
||||
|
||||
|
||||
@@ -69,10 +69,8 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public string Title { get; set; } = default!;
|
||||
[Parameter] public string Title { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -18,9 +18,9 @@
|
||||
width: 520px;
|
||||
max-width: 93vw;
|
||||
bottom: 100%;
|
||||
|
||||
|
||||
margin-top: 60px;
|
||||
|
||||
|
||||
margin-left: -60px;
|
||||
margin-bottom: 36px;
|
||||
|
||||
@@ -30,18 +30,18 @@
|
||||
padding-top: 20px;
|
||||
white-space: break-spaces;
|
||||
z-index: 2147483647;
|
||||
|
||||
|
||||
background-color: var(--info-secondary);
|
||||
border: 1px solid var(--info-secondary-border);
|
||||
border: 1px solid var(--info-secondary-border);
|
||||
border-radius: 2px;
|
||||
|
||||
box-shadow: 0 3px 8px rgba(0,0,0,0.5);
|
||||
|
||||
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
|
||||
.tooltipWrapper:hover .tooltipContent {
|
||||
visibility: visible;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@media only screen and (max-width: 1025px) {
|
||||
@@ -55,13 +55,10 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public string InfoText { get; set; } = default!;
|
||||
[Parameter] public string InfoText { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public int? Margin { get; set; }
|
||||
[Parameter] public int? Margin { get; set; }
|
||||
|
||||
}
|
||||
@@ -55,7 +55,7 @@
|
||||
flex-wrap: wrap;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 12px;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.makingofItem {
|
||||
@@ -70,13 +70,13 @@
|
||||
.makingOfContainer summary {
|
||||
font-weight: bold;
|
||||
padding: 12px;
|
||||
background-color: rgba(0,0,0, 0.1);
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.shownCode {
|
||||
visibility: hidden;
|
||||
padding: 12px;
|
||||
background-color: rgba(0,0,0, 0.1);
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.makingOfContainer details[open] .shownCode {
|
||||
@@ -97,20 +97,15 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Title { get; set; } = default!;
|
||||
[Parameter] public RenderFragment Title { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Description { get; set; } = default!;
|
||||
[Parameter] public RenderFragment Description { get; set; } = default!;
|
||||
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Example { get; set; } = default!;
|
||||
[Parameter] public RenderFragment Example { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Usage { get; set; } = default!;
|
||||
[Parameter] public RenderFragment Usage { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Code { get; set; } = default!;
|
||||
[Parameter] public RenderFragment Code { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -9,24 +9,22 @@
|
||||
<style>
|
||||
.makingOfSection {
|
||||
width: 100%;
|
||||
background-color: rgba(0,0,0, 0.1);
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
padding: 25px;
|
||||
border-radius: 8px;
|
||||
border: 2px black dashed;
|
||||
}
|
||||
|
||||
.makingOfSection > summary {
|
||||
font-size: 3.4em;
|
||||
}
|
||||
.makingOfSection > summary {
|
||||
font-size: 3.4em;
|
||||
}
|
||||
</style>
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string Title { get; set; } = default!;
|
||||
[Parameter] public string Title { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
|
||||
}
|
||||
@@ -15,7 +15,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -18,10 +18,8 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public string Title { get; set; } = default!;
|
||||
[Parameter] public string Title { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -52,13 +52,10 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? Title { get; set; }
|
||||
[Parameter] public RenderFragment? Title { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? Message { get; set; }
|
||||
[Parameter] public RenderFragment? Message { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string Type { get; set; } = SeverityType.Warning;
|
||||
[Parameter] public string Type { get; set; } = SeverityType.Warning;
|
||||
|
||||
}
|
||||
@@ -19,7 +19,7 @@ else
|
||||
}
|
||||
|
||||
<style>
|
||||
.toastContainer {
|
||||
.toastContainer {
|
||||
border: 4px solid;
|
||||
border-radius: 4px;
|
||||
padding: 16px;
|
||||
@@ -29,7 +29,7 @@ else
|
||||
width: 250px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
.@SeverityType.Warning.ToLower() {
|
||||
background-color: var(--severity-warning-color);
|
||||
border-color: var(--severity-warning-border-color);
|
||||
@@ -58,11 +58,10 @@ else
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public ToastModel? Toast { get; set; } = default!;
|
||||
[Parameter] public ToastModel? Toast { get; set; }
|
||||
|
||||
private float removalTime = 1300;
|
||||
private float fadeoutTime = 1200;
|
||||
private readonly float removalTime = 1300;
|
||||
private readonly float fadeoutTime = 1200;
|
||||
|
||||
private float Opacity()
|
||||
{
|
||||
|
||||
@@ -51,20 +51,15 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string Label { get; set; } = "";
|
||||
[Parameter] public string Label { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public string Info { get; set; } = "";
|
||||
[Parameter] public string Info { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool ReadOnly { get; set; }
|
||||
[Parameter] public bool ReadOnly { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool Value { get; set; }
|
||||
[Parameter] public bool Value { get; set; }
|
||||
|
||||
private string labelId = "";
|
||||
|
||||
|
||||
@@ -35,23 +35,18 @@
|
||||
</style>
|
||||
|
||||
@code {
|
||||
|
||||
//TODO Clean up
|
||||
[Parameter]
|
||||
public string Label { get; set; } = default!;
|
||||
[Parameter] public string Label { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public string Info { get; set; } = default!;
|
||||
[Parameter] public string Info { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? Display { get; set; }
|
||||
[Parameter] public RenderFragment? Display { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool? ReadOnly { get; set; }
|
||||
[Parameter] public bool? ReadOnly { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string? Value { get; set; }
|
||||
[Parameter] public string? Value { get; set; }
|
||||
|
||||
}
|
||||
@@ -2,11 +2,11 @@
|
||||
<div class="escapeCodeContainer">
|
||||
<textarea style="background-color: #2C2E33; width: 100%; border:3px solid #A8ADB9; border-radius:1px; padding: 8px;"
|
||||
rows="8"
|
||||
@onchange="OnChange" />
|
||||
@onchange="OnChange"/>
|
||||
|
||||
<textarea style="background-color: #2C2E33; width: 100%; border:3px solid #A8ADB9; border-radius:1px; padding: 8px;"
|
||||
rows="8"
|
||||
@bind="Output" />
|
||||
@bind="Output"/>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
}
|
||||
<div>
|
||||
<input readonly="@MemoryQuestion.IsRevealed"
|
||||
class="formTextInput @(MemoryQuestion.IsRevealed ? "revealed" : IsSubmitted == false ? "guess" : int.Parse(guess ?? string.Empty) == MemoryQuestion.Answer ? "correct" : "wrong")"
|
||||
class="formTextInput @(MemoryQuestion.IsRevealed ? "revealed" : !IsSubmitted ? "guess" : int.Parse(guess ?? string.Empty) == MemoryQuestion.Answer ? "correct" : "wrong")"
|
||||
placeholder="guess..."
|
||||
type="number"
|
||||
value="@guess"
|
||||
@@ -73,20 +73,15 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string Label { get; set; } = "";
|
||||
[Parameter] public string Label { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public string Info { get; set; } = "";
|
||||
[Parameter] public string Info { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<AnswerEventArgs> OnChange { get; set; } = default!;
|
||||
[Parameter] public EventCallback<AnswerEventArgs> OnChange { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MemoryQuestionModel MemoryQuestion { get; set; } = default!;
|
||||
[Parameter] public MemoryQuestionModel MemoryQuestion { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public bool IsSubmitted { get; set; }
|
||||
[Parameter] public bool IsSubmitted { get; set; }
|
||||
|
||||
|
||||
private string? guess = "";
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
}
|
||||
@@ -38,17 +38,13 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? FormLabelComponent { get; set; }
|
||||
[Parameter] public RenderFragment? FormLabelComponent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string Id { get; set; } = default!;
|
||||
[Parameter] public string Id { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? FormInfoComponent { get; set; }
|
||||
[Parameter] public RenderFragment? FormInfoComponent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
|
||||
void OnInputChanged(ChangeEventArgs changeEventArgs)
|
||||
{
|
||||
@@ -73,16 +69,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
[Parameter]
|
||||
public bool ReadOnly { get; set; } = false;
|
||||
[Parameter] public bool ReadOnly { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int Value { get; set; } = 0;
|
||||
[Parameter] public int Value { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int Min { get; set; } = 0;
|
||||
[Parameter] public int Min { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int Max { get; set; } = 2048;
|
||||
[Parameter] public int Max { get; set; } = 2048;
|
||||
|
||||
}
|
||||
@@ -17,16 +17,12 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? FormLabelComponent { get; set; }
|
||||
[Parameter] public RenderFragment? FormLabelComponent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? FormInfoComponent { get; set; }
|
||||
[Parameter] public RenderFragment? FormInfoComponent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
|
||||
}
|
||||
@@ -11,7 +11,7 @@
|
||||
type="text"
|
||||
rows="@Rows"
|
||||
value="@Value"
|
||||
@onchange="OnChange" />
|
||||
@onchange="OnChange"/>
|
||||
</div>
|
||||
@if (Info != "")
|
||||
{
|
||||
@@ -56,32 +56,23 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? FormLabelComponent { get; set; }
|
||||
[Parameter] public RenderFragment? FormLabelComponent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? FormInfoComponent { get; set; }
|
||||
[Parameter] public RenderFragment? FormInfoComponent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool? ReadOnly { get; set; }
|
||||
[Parameter] public bool? ReadOnly { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string? Value { get; set; }
|
||||
[Parameter] public string? Value { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int Rows { get; set; } = 4;
|
||||
[Parameter] public int Rows { get; set; } = 4;
|
||||
|
||||
[Parameter]
|
||||
public string Label { get; set; } = "";
|
||||
[Parameter] public string Label { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public string Info { get; set; } = "";
|
||||
[Parameter] public string Info { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public string Placeholder { get; set; } = "";
|
||||
[Parameter] public string Placeholder { get; set; } = "";
|
||||
|
||||
private string labelId = "";
|
||||
|
||||
|
||||
@@ -52,34 +52,25 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string Id { get; set; } = "";
|
||||
[Parameter] public string Id { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public string Label { get; set; } = "";
|
||||
[Parameter] public string Label { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public string Info { get; set; } = "";
|
||||
[Parameter] public string Info { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public string Placeholder { get; set; } = "";
|
||||
[Parameter] public string Placeholder { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ChangeEventArgs> OnInput { get; set; }
|
||||
[Parameter] public EventCallback<ChangeEventArgs> OnInput { get; set; }
|
||||
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback OnFocus { get; set; }
|
||||
[Parameter] public EventCallback OnFocus { get; set; }
|
||||
|
||||
|
||||
[Parameter]
|
||||
public bool ReadOnly { get; set; }
|
||||
[Parameter] public bool ReadOnly { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string Value { get; set; } = "";
|
||||
[Parameter] public string Value { get; set; } = "";
|
||||
|
||||
private string labelId = "";
|
||||
|
||||
|
||||
@@ -44,74 +44,69 @@
|
||||
font-size: 0.8rem;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
|
||||
.switch {
|
||||
position: relative;
|
||||
width: 60px;
|
||||
height: 34px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
top: 4px;
|
||||
position: relative;
|
||||
width: 60px;
|
||||
height: 34px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
top: 4px;
|
||||
}
|
||||
|
||||
.switch input {
|
||||
opacity: 0;
|
||||
|
||||
.switch input {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
|
||||
.slider {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: var(--paper-border);
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
border-radius: 34px;
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: var(--paper-border);
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
border-radius: 34px;
|
||||
}
|
||||
|
||||
|
||||
.slider:before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
height: 26px;
|
||||
width: 26px;
|
||||
left: 4px;
|
||||
bottom: 4px;
|
||||
background-color: white;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
border-radius: 50%;
|
||||
position: absolute;
|
||||
content: "";
|
||||
height: 26px;
|
||||
width: 26px;
|
||||
left: 4px;
|
||||
bottom: 4px;
|
||||
background-color: white;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
|
||||
.checked + .slider {
|
||||
background-color: #7838df;
|
||||
}
|
||||
|
||||
.checked + .slider:before {
|
||||
-webkit-transform: translateX(26px);
|
||||
-ms-transform: translateX(26px);
|
||||
transform: translateX(26px);
|
||||
}
|
||||
|
||||
background-color: #7838df;
|
||||
}
|
||||
|
||||
.checked + .slider:before {
|
||||
-webkit-transform: translateX(26px);
|
||||
-ms-transform: translateX(26px);
|
||||
transform: translateX(26px);
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string Label { get; set; } = "";
|
||||
[Parameter] public string Label { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public string Info { get; set; } = "";
|
||||
[Parameter] public string Info { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
[Parameter] public EventCallback<ChangeEventArgs> OnChange { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool ReadOnly { get; set; }
|
||||
[Parameter] public bool ReadOnly { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool Value { get; set; }
|
||||
[Parameter] public bool Value { get; set; }
|
||||
|
||||
private string labelId = "";
|
||||
|
||||
|
||||
@@ -37,10 +37,8 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? InfoQuestionComponent { get; set; }
|
||||
[Parameter] public RenderFragment? InfoQuestionComponent { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? InfoAnswerComponent { get; set; }
|
||||
[Parameter] public RenderFragment? InfoAnswerComponent { get; set; }
|
||||
|
||||
}
|
||||
@@ -19,31 +19,28 @@
|
||||
background-color: var(--secondary);
|
||||
}
|
||||
|
||||
.@MyButtonType.Primary.ToString().ToLower():hover {
|
||||
background-color: var(--primary-hover);
|
||||
border-color: var(--primary-border-hover);
|
||||
color: white;
|
||||
}
|
||||
.@MyButtonType.Primary.ToString().ToLower():hover {
|
||||
background-color: var(--primary-hover);
|
||||
border-color: var(--primary-border-hover);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.@MyButtonType.Secondary.ToString().ToLower():hover {
|
||||
background-color: var(--secondary-hover);
|
||||
border-color: var(--secondary-border-hover);
|
||||
color: white;
|
||||
}
|
||||
.@MyButtonType.Secondary.ToString().ToLower():hover {
|
||||
background-color: var(--secondary-hover);
|
||||
border-color: var(--secondary-border-hover);
|
||||
color: white;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<EventArgs> OnClick { get; set; } = default!;
|
||||
[Parameter] public EventCallback<EventArgs> OnClick { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MyButtonType MyButtonType { get; set; } = default!;
|
||||
[Parameter] public MyButtonType MyButtonType { get; set; }
|
||||
|
||||
private void ButtonClicked(EventArgs eventArgs)
|
||||
{
|
||||
|
||||
@@ -7,76 +7,75 @@
|
||||
{
|
||||
styleClass = "selected";
|
||||
}
|
||||
|
||||
<button @onclick="@(e => OnChangeChoice(choice))" class="groupChoiceButton @styleClass">@choice</button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
|
||||
.groupButtonContainerContainer {
|
||||
margin: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
justify-items: flex-start;
|
||||
}
|
||||
.groupButtonContainer {
|
||||
display: flex;
|
||||
background-color: var(--background);
|
||||
gap: 2px;
|
||||
margin-right: auto;
|
||||
border-radius: 8px;
|
||||
}
|
||||
.groupButtonContainerContainer {
|
||||
margin: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
justify-items: flex-start;
|
||||
}
|
||||
|
||||
.groupChoiceButton {
|
||||
background-color: var(--primary);
|
||||
color: white;
|
||||
padding: 12px;
|
||||
border: 1px solid var(--primary);
|
||||
}
|
||||
.groupButtonContainer {
|
||||
display: flex;
|
||||
background-color: var(--background);
|
||||
gap: 2px;
|
||||
margin-right: auto;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.groupChoiceButton:hover {
|
||||
background-color: var(--primary-hover);
|
||||
border-color: var(--primary-border-hover);
|
||||
}
|
||||
.groupChoiceButton {
|
||||
background-color: var(--primary);
|
||||
color: white;
|
||||
padding: 12px;
|
||||
border: 1px solid var(--primary);
|
||||
}
|
||||
|
||||
.selected {
|
||||
background-color: var(--secondary);
|
||||
color: white;
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
}
|
||||
.groupChoiceButton:hover {
|
||||
background-color: var(--primary-hover);
|
||||
border-color: var(--primary-border-hover);
|
||||
}
|
||||
|
||||
.selected:hover {
|
||||
background-color: var(--secondary-hover);
|
||||
border-color: var(--secondary-border-hover);
|
||||
}
|
||||
.selected {
|
||||
background-color: var(--secondary);
|
||||
color: white;
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.selected:hover {
|
||||
background-color: var(--secondary-hover);
|
||||
border-color: var(--secondary-border-hover);
|
||||
}
|
||||
|
||||
|
||||
.groupButtonContainer .groupChoiceButton:first-child {
|
||||
border-top-left-radius: 8px;
|
||||
border-bottom-left-radius: 8px;
|
||||
}
|
||||
.groupButtonContainer .groupChoiceButton:first-child {
|
||||
border-top-left-radius: 8px;
|
||||
border-bottom-left-radius: 8px;
|
||||
}
|
||||
|
||||
|
||||
.groupButtonContainer .groupChoiceButton:last-child {
|
||||
border-top-right-radius: 8px;
|
||||
border-bottom-right-radius: 8px;
|
||||
}
|
||||
.groupButtonContainer .groupChoiceButton:last-child {
|
||||
border-top-right-radius: 8px;
|
||||
border-bottom-right-radius: 8px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string Choice { get; set; } = default!;
|
||||
[Parameter] public string Choice { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public List<string> Choices { get; set; } = default!;
|
||||
[Parameter] public List<string> Choices { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<string> OnClick { get; set; }
|
||||
[Parameter] public EventCallback<string> OnClick { get; set; }
|
||||
|
||||
|
||||
protected override void OnInitialized()
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
width: 200px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
.codeLinkButton:hover {
|
||||
color: white;
|
||||
background-color: var(--info-hover);
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string Href { get; set; } = "";
|
||||
[Parameter] public string Href { get; set; } = "";
|
||||
|
||||
}
|
||||
@@ -13,7 +13,7 @@
|
||||
width: 180px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
.editLinkButton:hover {
|
||||
color: white;
|
||||
background-color: var(--info-hover);
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string Href { get; set; } = "";
|
||||
[Parameter] public string Href { get; set; } = "";
|
||||
|
||||
}
|
||||
@@ -14,10 +14,9 @@ else
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public string EntityId { get; set; } = default!;
|
||||
[Parameter] public string EntityId { get; set; } = default!;
|
||||
|
||||
private EntityModel Entity => DATA.Get()[EntityId];
|
||||
private EntityModel Entity => EntityData.Get()[EntityId];
|
||||
|
||||
void EntityLabelClicked()
|
||||
{
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
border-color: var(--primary);
|
||||
background-color: var(--primary);
|
||||
}
|
||||
|
||||
|
||||
.linkButtonContainer:hover {
|
||||
background-color: var(--primary-hover);
|
||||
border-color: var(--primary-border-hover);
|
||||
@@ -24,12 +24,10 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
|
||||
[Parameter]
|
||||
public string Href { get; set; } = "";
|
||||
[Parameter] public string Href { get; set; } = "";
|
||||
|
||||
|
||||
}
|
||||
@@ -26,30 +26,28 @@
|
||||
border-radius: 8px;
|
||||
font-weight: 800;
|
||||
width: 350px;
|
||||
|
||||
|
||||
padding: 5px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
.searchHotkey {
|
||||
padding: 4px;
|
||||
background-color: rgba(255,255,255,0.05);
|
||||
border: 2px solid rgba(255,255,255,0.25);
|
||||
background-color: rgba(255, 255, 255, 0.05);
|
||||
border: 2px solid rgba(255, 255, 255, 0.25);
|
||||
border-radius: 4px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public string Id { get; set; } = default!;
|
||||
[Parameter] public string Id { get; set; } = default!;
|
||||
|
||||
private string _userAgent = "";
|
||||
|
||||
|
||||
@@ -16,24 +16,22 @@
|
||||
padding: 5px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
|
||||
.searchIcon {
|
||||
font-size: 28px;
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
text-align: center;
|
||||
margin: auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public string Id { get; set; } = default!;
|
||||
[Parameter] public string Id { get; set; } = default!;
|
||||
|
||||
private void ButtonClicked(EventArgs eventArgs)
|
||||
{
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
}
|
||||
@@ -23,7 +23,6 @@
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@media only screen and (min-width: 1024px) {
|
||||
.lrg_container {
|
||||
margin-top: 50px;
|
||||
@@ -34,7 +33,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
}
|
||||
@@ -23,7 +23,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@media only screen and (min-width: 1024px) {
|
||||
@@media only screen and (min-width: 1024px) {
|
||||
.med_container {
|
||||
margin-top: 50px;
|
||||
}
|
||||
@@ -33,7 +33,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
}
|
||||
@@ -29,7 +29,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
}
|
||||
@@ -21,7 +21,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
<style scoped>
|
||||
.layoutWithSidebar {
|
||||
display: grid;
|
||||
|
||||
|
||||
gap: 16px;
|
||||
width: 65%;
|
||||
min-width: 1000px;
|
||||
@@ -18,15 +18,15 @@
|
||||
margin-right: auto;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 30px;
|
||||
|
||||
grid-template-columns: 412px 1fr;
|
||||
|
||||
grid-template-columns: 412px 1fr;
|
||||
}
|
||||
|
||||
|
||||
.layoutSidebar {
|
||||
background: var(--paper);
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
|
||||
.layoutContent {
|
||||
}
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@media only screen and (min-width: 1024px) {
|
||||
.layoutWithSidebar {
|
||||
margin-top: 50px;
|
||||
@@ -50,10 +49,8 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Sidebar { get; set; } = default!;
|
||||
[Parameter] public RenderFragment Sidebar { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Content { get; set; } = default!;
|
||||
[Parameter] public RenderFragment Content { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -21,7 +21,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment? ChildContent { get; set; }
|
||||
[Parameter] public RenderFragment? ChildContent { get; set; }
|
||||
|
||||
}
|
||||
@@ -3,11 +3,9 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Inject]
|
||||
protected HttpClient Http { get; set; } = default!;
|
||||
[Inject] protected HttpClient Http { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public string MarkdownFileName { get; set; } = default!;
|
||||
[Parameter] public string MarkdownFileName { get; set; } = default!;
|
||||
|
||||
private string MarkdownText { get; set; } = "";
|
||||
|
||||
|
||||
@@ -60,13 +60,13 @@
|
||||
height: 100vh;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
|
||||
.clickOffBackground.clickOffVisible {
|
||||
visibility:visible;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.sectionButton {
|
||||
cursor: pointer;
|
||||
cursor: pointer;
|
||||
padding: 12px;
|
||||
position: relative;
|
||||
z-index: 50000;
|
||||
@@ -78,7 +78,7 @@
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 40px;
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.menuHeader {
|
||||
@@ -87,30 +87,30 @@
|
||||
width: 100%;
|
||||
padding-top: 12px;
|
||||
padding-bottom: 12px;
|
||||
|
||||
|
||||
padding-left: 24px;
|
||||
padding-right: 24px;
|
||||
|
||||
|
||||
display: flex;
|
||||
background-color: var(--accent);
|
||||
|
||||
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
.sectionNavs {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
gap: 16px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.sectionNav {
|
||||
display: flex;
|
||||
.sectionNav {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.websiteTitle {
|
||||
font-weight: bold;
|
||||
@@ -119,11 +119,11 @@
|
||||
}
|
||||
|
||||
.navMenuPosition {
|
||||
position: relative;
|
||||
top: 18px;
|
||||
left: calc(-50% + -330px / 2);
|
||||
width: 0;
|
||||
height: 0;
|
||||
position: relative;
|
||||
top: 18px;
|
||||
left: calc(-50% + -330px / 2);
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.navMenuContainer {
|
||||
@@ -142,7 +142,7 @@
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
|
||||
.sectionButtonSelected {
|
||||
box-shadow: 0 2px 3px black;
|
||||
background-color: var(--info);
|
||||
@@ -166,11 +166,9 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public List<WebSectionModel> WebSections { get; set; } = default!;
|
||||
[Parameter] public List<WebSectionModel> WebSections { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public List<WebPageModel> WebPages { get; set; } = default!;
|
||||
[Parameter] public List<WebPageModel> WebPages { get; set; } = default!;
|
||||
|
||||
|
||||
protected override void OnInitialized()
|
||||
|
||||
@@ -12,7 +12,9 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
<NavLink target="@Links.GetTarget(Page.Href)" @onclick="() => { NavigationService.ChangeNavigationState(NavigationStateType.Default); NavigationService.ChangeNavigationSectionId(-1); }" href="@Page.Href" class="desktopNavLink">
|
||||
<NavLink target="@Links.GetTarget(Page.Href)"
|
||||
@onclick="() => { NavigationService.ChangeNavigationState(NavigationStateType.Default); NavigationService.ChangeNavigationSectionId(-1); }"
|
||||
href="@Page.Href" class="desktopNavLink">
|
||||
<div class="navName">
|
||||
@Page.Name
|
||||
</div>
|
||||
@@ -35,26 +37,26 @@ else
|
||||
height: 60px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
|
||||
|
||||
background-color: var(--primary);
|
||||
border: 1px solid var(--primary);
|
||||
}
|
||||
|
||||
.desktopNavLink:first-of-type {
|
||||
|
||||
.desktopNavLink:first-of-type {
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
|
||||
|
||||
.desktopNavLink:last-of-type {
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
}
|
||||
|
||||
.desktopNavLink:hover {
|
||||
color: #8EC3FF;
|
||||
background-color: var(--primary-hover);
|
||||
border-color: var(--primary-border-hover);
|
||||
}
|
||||
|
||||
.desktopNavLink:hover {
|
||||
color: #8EC3FF;
|
||||
background-color: var(--primary-hover);
|
||||
border-color: var(--primary-border-hover);
|
||||
}
|
||||
|
||||
.navSelected {
|
||||
background-color: var(--primary-hover);
|
||||
@@ -65,10 +67,9 @@ else
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public WebPageModel Page { get; set; } = default!;
|
||||
[Parameter] public WebPageModel Page { get; set; } = default!;
|
||||
|
||||
bool isOnPage = false;
|
||||
bool isOnPage;
|
||||
|
||||
protected override Task OnParametersSetAsync()
|
||||
{
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
<DesktopNavLinkComponent Page=childPage></DesktopNavLinkComponent>
|
||||
}
|
||||
</div>
|
||||
@@ -18,13 +19,12 @@
|
||||
position: relative;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public WebSectionModel Section { get; set; } = default!;
|
||||
[Parameter] public WebSectionModel Section { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -2,7 +2,8 @@
|
||||
<div class="mobileNavSectionsContainer">
|
||||
@foreach (var webSection in WebSections)
|
||||
{
|
||||
<div class="mobileNavSectionButton" @onclick="() => OnSectionClicked(webSection)" @onclick:preventDefault="true" @onclick:stopPropagation="true">
|
||||
<div class="mobileNavSectionButton" @onclick="() => OnSectionClicked(webSection)"
|
||||
@onclick:preventDefault="true" @onclick:stopPropagation="true">
|
||||
<div class="mobileNavSectionButtonText">
|
||||
<i class="fa-solid @webSection.Icon" style="font-size: 28px;"></i>
|
||||
</div>
|
||||
@@ -11,7 +12,8 @@
|
||||
<SearchIconButtonComponent/>
|
||||
</div>
|
||||
|
||||
<div class="fullPageButton @(selectedSection != null)" @onclick="OnPageClicked" @onclick:stopPropagation="false" @onclick:preventDefault="false">
|
||||
<div class="fullPageButton @(selectedSection != null)" @onclick="OnPageClicked" @onclick:stopPropagation="false"
|
||||
@onclick:preventDefault="false">
|
||||
</div>
|
||||
|
||||
@if (selectedSection != null)
|
||||
@@ -27,7 +29,9 @@
|
||||
{
|
||||
continue;
|
||||
}
|
||||
<div class="mobileNavPageButton" @onclick="() => OnPageLinkClicked(webPage)" @onclick:preventDefault="true" @onclick:stopPropagation="true">
|
||||
|
||||
<div class="mobileNavPageButton" @onclick="() => OnPageLinkClicked(webPage)"
|
||||
@onclick:preventDefault="true" @onclick:stopPropagation="true">
|
||||
<div class="mobileNavPageButtonText">
|
||||
@webPage.Name
|
||||
</div>
|
||||
@@ -45,7 +49,7 @@
|
||||
height: 100vh;
|
||||
bottom: 0;
|
||||
display: none;
|
||||
background-color: rgba(0,0,0,0.6);
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
|
||||
.fullPageButton.True {
|
||||
@@ -53,11 +57,9 @@
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.mobileFooter {
|
||||
position: fixed;
|
||||
background-color: rgba(0,0,0,1);
|
||||
background-color: rgba(0, 0, 0, 1);
|
||||
width: 100vw;
|
||||
bottom: 0;
|
||||
display: none;
|
||||
@@ -109,10 +111,10 @@
|
||||
}
|
||||
|
||||
|
||||
.mobileNavPageButton:hover {
|
||||
background-color: var(--primary-hover);
|
||||
border-color: var(--primary-border-hover);
|
||||
}
|
||||
.mobileNavPageButton:hover {
|
||||
background-color: var(--primary-hover);
|
||||
border-color: var(--primary-border-hover);
|
||||
}
|
||||
|
||||
|
||||
.mobileNavSectionButton:hover {
|
||||
@@ -143,11 +145,9 @@
|
||||
|
||||
@code {
|
||||
#if NO_SQL
|
||||
[Parameter]
|
||||
public List<WebSectionModel> WebSections { get; set; } = default!;
|
||||
[Parameter] public List<WebSectionModel> WebSections { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public List<WebPageModel> WebPages { get; set; } = default!;
|
||||
[Parameter] public List<WebPageModel> WebPages { get; set; } = default!;
|
||||
|
||||
#else
|
||||
[Parameter]
|
||||
@@ -157,8 +157,7 @@
|
||||
public DbSet<WebPageModel> WebPages { get; set; }
|
||||
#endif
|
||||
|
||||
[Inject]
|
||||
public NavigationManager NavigationManager { get; set; } = default!;
|
||||
[Inject] public NavigationManager NavigationManager { get; set; } = default!;
|
||||
|
||||
|
||||
private WebSectionModel? selectedSection;
|
||||
|
||||
@@ -17,7 +17,8 @@
|
||||
</div>
|
||||
|
||||
|
||||
<div class="fullPageButton @navOpen" @onclick="OnNavClicked" @onclick:stopPropagation="false" @onclick:preventDefault="false">
|
||||
<div class="fullPageButton @navOpen" @onclick="OnNavClicked" @onclick:stopPropagation="false"
|
||||
@onclick:preventDefault="false">
|
||||
</div>
|
||||
|
||||
|
||||
@@ -40,6 +41,7 @@
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
<NavLink href="@webPage.Href" class="tabletNavItem" @onclick="OnPageClicked">
|
||||
@webPage.Name
|
||||
</NavLink>
|
||||
@@ -58,12 +60,12 @@
|
||||
height: 100vh;
|
||||
bottom: 0;
|
||||
display: none;
|
||||
background-color: rgba(0,0,0,0.6);
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
|
||||
.fullPageButton.True {
|
||||
display: block;
|
||||
}
|
||||
.fullPageButton.True {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.tablet {
|
||||
display: none;
|
||||
@@ -71,7 +73,7 @@
|
||||
|
||||
.tabletNav {
|
||||
position: fixed;
|
||||
background-color: rgba(30,30,30,0.98);
|
||||
background-color: rgba(30, 30, 30, 0.98);
|
||||
display: none;
|
||||
height: 100vh;
|
||||
padding: 32px;
|
||||
@@ -81,12 +83,12 @@
|
||||
gap: 22px;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
|
||||
.tabletButtons {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.tabletNavItem {
|
||||
padding: 8px;
|
||||
@@ -108,7 +110,7 @@
|
||||
top: 0;
|
||||
display: flex;
|
||||
background-color: var(--accent);
|
||||
border-bottom: 4px solid rgba(0,0,0,0.95);
|
||||
border-bottom: 4px solid rgba(0, 0, 0, 0.95);
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
@@ -125,16 +127,16 @@
|
||||
|
||||
.tabletButton {
|
||||
border: 2px solid black;
|
||||
background-color: rgba(0,0,0,0.3);
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
width: 80px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.tabletButton:hover {
|
||||
background-color: rgba(0,0,0,0.7);
|
||||
}
|
||||
.tabletButton:hover {
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
|
||||
|
||||
@@media only screen and (max-width: 1025px) {
|
||||
@@ -153,11 +155,9 @@
|
||||
@code {
|
||||
|
||||
#if NO_SQL
|
||||
[Parameter]
|
||||
public List<WebSectionModel> WebSections { get; set; } = default!;
|
||||
[Parameter] public List<WebSectionModel> WebSections { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public List<WebPageModel> WebPages { get; set; } = default!;
|
||||
[Parameter] public List<WebPageModel> WebPages { get; set; } = default!;
|
||||
|
||||
#else
|
||||
[Parameter]
|
||||
|
||||
@@ -5,14 +5,11 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public WebDeploymentType DeploymentType { get; set; }
|
||||
[Parameter] public WebDeploymentType DeploymentType { get; set; }
|
||||
|
||||
[Inject]
|
||||
public NavigationManager MyNavigationManager { get; set; } = default!;
|
||||
[Inject] public NavigationManager MyNavigationManager { get; set; } = default!;
|
||||
|
||||
bool isDisplayable;
|
||||
|
||||
|
||||
@@ -11,11 +11,9 @@ else
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
[Inject]
|
||||
public NavigationManager MyNavigationManager { get; set; } = default!;
|
||||
[Inject] public NavigationManager MyNavigationManager { get; set; } = default!;
|
||||
|
||||
bool isDisplayable;
|
||||
|
||||
|
||||
@@ -1,31 +1,6 @@
|
||||
@inject IVariableService VariableService
|
||||
|
||||
<div class="footerContainer" xmlns="http://www.w3.org/1999/html">
|
||||
<div class="footerSocials">
|
||||
|
||||
<a class="footerIcon" href="https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/discussions" target="_blank">
|
||||
<i class="fa-brands fa-github"></i>
|
||||
</a>
|
||||
|
||||
<a class="footerIcon" href="mailto:igpfanreference@jonathanmccaffrey.com" target="_blank">
|
||||
<i class="fa-solid fa-envelope"></i>
|
||||
</a>
|
||||
|
||||
<a class="footerIcon" href="https://discord.gg/uMq8bMGeeN" target="_blank">
|
||||
<i class="fa-brands fa-discord"></i>
|
||||
</a>
|
||||
<a class="footerIcon" href="https://www.youtube.com/channel/UCQx88d5C12yp4l7uszNYrdQ" target="_blank">
|
||||
<i class="fa-brands fa-youtube"></i>
|
||||
</a>
|
||||
<a class="footerIcon" href="https://www.twitch.tv/jonathanmccaffrey" target="_blank">
|
||||
<i class="fa-brands fa-twitch"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="footerContainer" xmlns="http://www.w3.org/1999/html">
|
||||
<div class="footerDivider"></div>
|
||||
|
||||
<div class="footerLastUpdated">Website updated <a href="https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/commits/main"><b>@VariableService.Variables["LastUpdated"]</b></a></div>
|
||||
|
||||
|
||||
<div class="footerDisclaimer">
|
||||
This website is fan-made and not affiliated with <b>SunSpear Games</b> in any way.
|
||||
</div>
|
||||
@@ -36,19 +11,18 @@
|
||||
.footerIcon {
|
||||
font-size: 24px;
|
||||
padding: 8px;
|
||||
background-color: rgba(255,255,255,0.05);
|
||||
border: 2px solid rgba(255,255,255,0.1);
|
||||
background-color: rgba(255, 255, 255, 0.05);
|
||||
border: 2px solid rgba(255, 255, 255, 0.1);
|
||||
border-radius: 6px;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
.footerIcon:hover {
|
||||
|
||||
.footerIcon:hover {
|
||||
color: #8fc5ff;
|
||||
background-color: rgba(200,200,255,0.1);
|
||||
border: 2px solid rgba(140,140,255,0.4);
|
||||
background-color: rgba(200, 200, 255, 0.1);
|
||||
border: 2px solid rgba(140, 140, 255, 0.4);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.footerContainer {
|
||||
width: 100%;
|
||||
@@ -59,7 +33,7 @@
|
||||
padding-bottom: 102px;
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
|
||||
.footerSocials {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
@@ -67,24 +41,24 @@
|
||||
justify-content: center;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
|
||||
.footerDivider {
|
||||
background-color: rgba(255,255,255,0.12);
|
||||
background-color: rgba(255, 255, 255, 0.12);
|
||||
height: 1px;
|
||||
width: 128px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.footerLastUpdated {
|
||||
text-align: center;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
|
||||
.footerDisclaimer {
|
||||
text-align: center;
|
||||
margin: auto;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
@@ -10,10 +10,8 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Dividee { get; set; } = default!;
|
||||
[Parameter] public RenderFragment Dividee { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment Divider { get; set; } = default!;
|
||||
[Parameter] public RenderFragment Divider { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
<div style="display:flex; flex-direction:column; align-items:center;padding-right: 12px;padding-left: 4px; font-family:monospace">
|
||||
<div
|
||||
style="display:flex; flex-direction:column; align-items:center;padding-right: 12px;padding-left: 4px; font-family:monospace">
|
||||
<div style="height: 0px;display:flex; flex-direction:row; ">
|
||||
<div style="font-size: 18px; height: 0px;">
|
||||
∑
|
||||
@@ -12,13 +13,10 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment LoopEnd { get; set; } = default!;
|
||||
[Parameter] public RenderFragment LoopEnd { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment LoopStart { get; set; } = default!;
|
||||
[Parameter] public RenderFragment LoopStart { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment IndexSymbol { get; set; } = default!;
|
||||
[Parameter] public RenderFragment IndexSymbol { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
u {
|
||||
text-decoration-color: inherit;
|
||||
text-decoration-thickness:1px;
|
||||
text-decoration-thickness: 1px;
|
||||
}
|
||||
|
||||
.spoiler:hover {
|
||||
@@ -22,7 +22,6 @@
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public RenderFragment ChildContent { get; set; } = default!;
|
||||
[Parameter] public RenderFragment ChildContent { get; set; } = default!;
|
||||
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<DefineConstants>TRACE;</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<DefineConstants>TRACE;</DefineConstants>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.8" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Model\Model.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -1,36 +0,0 @@
|
||||
#if NO_SQL
|
||||
#else
|
||||
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Model;
|
||||
using Model.Doc;
|
||||
using Model.Git;
|
||||
using Model.Notes;
|
||||
using Model.Website;
|
||||
using Model.Work.Tasks;
|
||||
|
||||
namespace Contexts;
|
||||
|
||||
public class DatabaseContext : DbContext
|
||||
{
|
||||
public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options)
|
||||
{
|
||||
Database.EnsureCreated();
|
||||
}
|
||||
|
||||
public DbSet<AgileSprintModel> AgileSprintModels { get; set; } = default!;
|
||||
public DbSet<AgileTaskModel> AgileTaskModels { get; set; } = default!;
|
||||
public DbSet<GitChangeModel> GitChangeModels { get; set; } = default!;
|
||||
public DbSet<GitPatchModel> GitPatchModels { get; set; } = default!;
|
||||
public DbSet<WebPageModel> WebPageModels { get; set; } = default!;
|
||||
public DbSet<WebSectionModel> WebSectionModels { get; set; } = default!;
|
||||
public DbSet<DocContentModel> DocContentModels { get; set; } = default!;
|
||||
public DbSet<DocConnectionModel> DocConnectionModels { get; set; } = default!;
|
||||
public DbSet<DocSectionModel> DocSectionModels { get; set; } = default!;
|
||||
public DbSet<NoteContentModel> NoteContentModels { get; set; } = default!;
|
||||
public DbSet<NoteConnectionModel> NoteConnectionModels { get; set; } = default!;
|
||||
public DbSet<NoteSectionModel> NoteSectionModels { get; set; } = default!;
|
||||
public DbSet<Variable> Variables { get; set; } = default!;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,9 @@
|
||||
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
|
||||
WORKDIR /src
|
||||
COPY . .
|
||||
RUN dotnet publish Web/Web.csproj -c Release -o /app/publish
|
||||
|
||||
FROM nginx:alpine AS final
|
||||
WORKDIR /usr/share/nginx/html
|
||||
COPY --from=build /app/publish/wwwroot ./
|
||||
COPY nginx.conf /etc/nginx/nginx.conf
|
||||
@@ -0,0 +1,107 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.32112.339
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Services", "Services\Services.csproj", "{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web", "Web\Web.csproj", "{4A54E237-4FF6-4459-91D9-9249AE3E72E0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CLI", "CLI\CLI.csproj", "{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Components", "Components\Components.csproj", "{C0ACFFEB-8098-4119-9C28-3A4D671C2514}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F4D758C2-349F-49F2-86E2-7DAB2B53BB61}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4F56F39D-D34C-4987-8C3F-3A8E03A2D7E6}.Release|x86.Build.0 = Release|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Release|x64.Build.0 = Release|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{4A54E237-4FF6-4459-91D9-9249AE3E72E0}.Release|x86.Build.0 = Release|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Release|x64.Build.0 = Release|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F8A23FFE-7FCC-4C28-B5CF-DBE435284AFA}.Release|x86.Build.0 = Release|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Release|x64.Build.0 = Release|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{C0ACFFEB-8098-4119-9C28-3A4D671C2514}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1460CB4C-7E8E-41F0-8DF2-174C69A3E366}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {19100811-B909-4D20-9AE0-2EB579A55B3A}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,95 +0,0 @@
|
||||
@inject IVariableService VariableService
|
||||
@inject IStorageService StorageService
|
||||
@inject IPermissionService PermissionService
|
||||
|
||||
|
||||
<Router AppAssembly="@typeof(App).Assembly">
|
||||
<Found Context="routeData">
|
||||
@if (isLoaded)
|
||||
{
|
||||
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)"/>
|
||||
<FocusOnNavigate RouteData="@routeData" Selector="h1"/>
|
||||
}
|
||||
</Found>
|
||||
<NotFound>
|
||||
<PageTitle>Not found</PageTitle>
|
||||
<LayoutView Layout="@typeof(MainLayout)">
|
||||
<p role="alert">Sorry, there's nothing at this address.</p>
|
||||
</LayoutView>
|
||||
</NotFound>
|
||||
</Router>
|
||||
|
||||
<EntityDialogPortal/>
|
||||
<ToastPortal/>
|
||||
<SearchPortal/>
|
||||
<ConfirmationDialogPortal/>
|
||||
|
||||
|
||||
@if (PermissionService.GetIsDataCollectionEnabled())
|
||||
{
|
||||
<NavigationTracker />
|
||||
}
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
a {
|
||||
color: white;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: white;
|
||||
text-decoration: underline;
|
||||
text-decoration-color: #8fc5ff;
|
||||
text-decoration-thickness: 3px;
|
||||
}
|
||||
|
||||
|
||||
:root {
|
||||
--severity-warning-color: #2a2000;
|
||||
--severity-warning-border-color: #755c13;
|
||||
--severity-error-color: #290102;
|
||||
--severity-error-border-color: #4C2C33;
|
||||
--severity-information-color: #030129;
|
||||
--severity-information-border-color: #2c3a4c;
|
||||
--severity-success-color: #042901;
|
||||
--severity-success-border-color: #2E4C2C;
|
||||
|
||||
--accent: #432462;
|
||||
--primary: #4308a3;
|
||||
--primary-border: #2c0b62;
|
||||
--primary-hover: #5e00f7;
|
||||
--primary-border-hover: #a168ff;
|
||||
--background: #161618;
|
||||
--secondary: #23133e;
|
||||
--secondary-hover: #2a0070;
|
||||
--secondary-border-hover: #a168ff;
|
||||
--paper: #252526;
|
||||
--paper-border: #151516;
|
||||
|
||||
--paper-hover: #52366f;
|
||||
--paper-border-hover: #653497;
|
||||
|
||||
--info: #451376;
|
||||
--info-border: #210b36;
|
||||
|
||||
--dialog-border-color: black;
|
||||
--dialog-border-width: 2px;
|
||||
--dialog-radius: 6px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@code {
|
||||
private bool isLoaded = false;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await VariableService.Load();
|
||||
await StorageService.Load();
|
||||
isLoaded = true;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
}
|
||||
Binary file not shown.
@@ -1,115 +0,0 @@
|
||||
@using Services.Website
|
||||
@implements IDisposable;
|
||||
@inject IMyDialogService MyDialogService
|
||||
@inject IJSRuntime JsRuntime
|
||||
|
||||
|
||||
@inject NavigationManager NavigationManager
|
||||
|
||||
@if (MyDialogService.IsVisible)
|
||||
{
|
||||
<div class="confirmDialogBackground" onclick="@CloseDialog">
|
||||
<div class="confirmDialogContainer"
|
||||
@onclick:preventDefault="true"
|
||||
@onclick:stopPropagation="true">
|
||||
|
||||
<div class="confirmDialogHeader">
|
||||
@MyDialogService.GetDialogContents().Title
|
||||
</div>
|
||||
<div class="confirmDialogBody">
|
||||
@MyDialogService.GetDialogContents().Message
|
||||
</div>
|
||||
|
||||
<div class="confirmDialogFooter">
|
||||
<ButtonComponent MyButtonType="MyButtonType.Secondary" OnClick="MyDialogService.GetDialogContents().OnCancel">
|
||||
Cancel
|
||||
</ButtonComponent>
|
||||
<ButtonComponent MyButtonType="MyButtonType.Primary" OnClick="MyDialogService.GetDialogContents().OnConfirm">
|
||||
@MyDialogService.GetDialogContents().ConfirmButtonLabel
|
||||
</ButtonComponent>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.pageContents * {
|
||||
filter: blur(2px);
|
||||
}
|
||||
|
||||
.confirmDialogBackground {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
}
|
||||
|
||||
|
||||
.confirmDialogContainer {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
margin-top: 64px;
|
||||
width: 800px;
|
||||
height: 600px;
|
||||
|
||||
background-color: var(--background);
|
||||
border-width: var(--dialog-border-width);
|
||||
border-style: solid;
|
||||
border-color: var(--dialog-border-color);
|
||||
border-radius: var(--dialog-radius);
|
||||
|
||||
padding: 8px;
|
||||
|
||||
|
||||
box-shadow: 1px 2px 2px black;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
}
|
||||
|
||||
.confirmDialogHeader {
|
||||
font-size: 1.4em;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
.confirmDialogBody {
|
||||
padding: 12px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.confirmDialogFooter {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
justify-content: flex-end;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
</style>
|
||||
}
|
||||
|
||||
|
||||
@code {
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
base.OnInitialized();
|
||||
|
||||
MyDialogService.Subscribe(StateHasChanged);
|
||||
}
|
||||
|
||||
void IDisposable.Dispose()
|
||||
{
|
||||
MyDialogService.Unsubscribe(StateHasChanged);
|
||||
}
|
||||
|
||||
|
||||
public void CloseDialog()
|
||||
{
|
||||
MyDialogService.Hide();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
-67
@@ -1,67 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.32112.339
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IGP", "IGP.csproj", "{172D35E4-8E7B-40D1-96D6-BE2A2043CFCA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "..\Model\Model.csproj", "{77395F7A-BE93-470C-9F10-F48FFA445B63}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components", "..\Components\Components.csproj", "{0419E7CD-0971-4A56-A61F-C090DF60FAF6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Contexts", "..\Contexts\Contexts.csproj", "{F7775F3A-E541-4292-B45F-A18C65637E33}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Services", "..\Services\Services.csproj", "{621178C8-4E8B-478E-80E5-7478F0E7B67E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IGP_Convert", "..\IGP_Convert\IGP_Convert.csproj", "{82F1848E-4BF6-4B16-A9DD-574AF566712B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAutomation", "..\TestAutomation\TestAutomation.csproj", "{8B49D038-D013-460D-9C4F-817CAFFEB06F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Playground", "..\Playground\Playground.csproj", "{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{172D35E4-8E7B-40D1-96D6-BE2A2043CFCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{172D35E4-8E7B-40D1-96D6-BE2A2043CFCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{172D35E4-8E7B-40D1-96D6-BE2A2043CFCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{172D35E4-8E7B-40D1-96D6-BE2A2043CFCA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{77395F7A-BE93-470C-9F10-F48FFA445B63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{77395F7A-BE93-470C-9F10-F48FFA445B63}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{77395F7A-BE93-470C-9F10-F48FFA445B63}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{77395F7A-BE93-470C-9F10-F48FFA445B63}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0419E7CD-0971-4A56-A61F-C090DF60FAF6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F7775F3A-E541-4292-B45F-A18C65637E33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F7775F3A-E541-4292-B45F-A18C65637E33}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F7775F3A-E541-4292-B45F-A18C65637E33}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F7775F3A-E541-4292-B45F-A18C65637E33}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{621178C8-4E8B-478E-80E5-7478F0E7B67E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{621178C8-4E8B-478E-80E5-7478F0E7B67E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{621178C8-4E8B-478E-80E5-7478F0E7B67E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{621178C8-4E8B-478E-80E5-7478F0E7B67E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{82F1848E-4BF6-4B16-A9DD-574AF566712B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{82F1848E-4BF6-4B16-A9DD-574AF566712B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{82F1848E-4BF6-4B16-A9DD-574AF566712B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{82F1848E-4BF6-4B16-A9DD-574AF566712B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8B49D038-D013-460D-9C4F-817CAFFEB06F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8B49D038-D013-460D-9C4F-817CAFFEB06F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8B49D038-D013-460D-9C4F-817CAFFEB06F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8B49D038-D013-460D-9C4F-817CAFFEB06F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7DAA5F32-CF40-4A5B-B4FD-410D1F2BC3D7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {19100811-B909-4D20-9AE0-2EB579A55B3A}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,63 +0,0 @@
|
||||
@if (StyleType.Equals("Plain"))
|
||||
{
|
||||
<div>
|
||||
<b id="entityName">@Entity?.Info().Name</b>
|
||||
@if (Entity?.Info().Descriptive != DescriptiveType.None)
|
||||
{
|
||||
<span>, @Entity?.Info().Descriptive.Replace("_", " ")</span>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="entityHeader">
|
||||
<div id="entityName" class="entityHeaderText">
|
||||
@Entity?.Info().Name
|
||||
</div>
|
||||
<div style="font-size:1.4rem;">
|
||||
<b>@Entity?.EntityType.Replace("_", " ")</b>
|
||||
@if (Entity?.Info().Descriptive != DescriptiveType.None)
|
||||
{
|
||||
<span>
|
||||
<b>:</b> @Entity!.Info().Descriptive.Replace("_", " ")
|
||||
</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.entityHeader {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 4px;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 22px;
|
||||
width: 100%;
|
||||
margin-left: -6px;
|
||||
}
|
||||
|
||||
.entityHeaderText {
|
||||
font-size: 2rem;
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
@@media only screen and (max-width: 1025px) {
|
||||
.entityHeader {
|
||||
flex-direction: column;
|
||||
justify-content: normal;
|
||||
margin-left: 4px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
}
|
||||
|
||||
@code {
|
||||
|
||||
[CascadingParameter]
|
||||
public EntityModel? Entity { get; set; } = default!;
|
||||
|
||||
|
||||
[CascadingParameter]
|
||||
public string StyleType { get; set; } = "Detailed";
|
||||
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
@inject HttpClient httpClient
|
||||
|
||||
@if (content == null)
|
||||
{
|
||||
<LoadingComponent/>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="doc">
|
||||
<div class="docHeader">
|
||||
<div class="docTitle">@docFrontMatter.Title</div>
|
||||
<div class="docDates">
|
||||
<div class="docDateUpdated"><b>Updated</b>: @docFrontMatter.UpdatedDate.ToString("MM/dd/yyyy")</div>
|
||||
<div class="docDateCreated"><b>Created</b>: @docFrontMatter.CreatedDate.ToString("MM/dd/yyyy")</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="docContent">@((MarkupString)Markdown.ToHtml(content, Pipeline))</div>
|
||||
<div class="docFooter">
|
||||
<LinkButtonComponent Href="@GitUrl">
|
||||
Edit on GitHub <i class="fa-brands fa-github" style="font-size: 24px; margin-left: 5px;"></i>
|
||||
</LinkButtonComponent>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
<style>
|
||||
.docTitle {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.docHeader {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.docDates {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.docFooter {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
th {
|
||||
padding: 8px;
|
||||
border: 1px solid gray;
|
||||
}
|
||||
td {
|
||||
padding: 8px;
|
||||
border: 1px solid gray;
|
||||
}
|
||||
</style>
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public DocContentModel DocContentModel { get; set; } = default!;
|
||||
|
||||
DocFrontMatterModel docFrontMatter = null!;
|
||||
private string? content;
|
||||
|
||||
private string Filepath => $"content/docs/{DocContentModel.Content}.md";
|
||||
private string GitUrl => $"{Project.GitResourcesUrl}/{Filepath}";
|
||||
private MarkdownPipeline Pipeline => MarkdownFiles.Pipeline;
|
||||
|
||||
private async Task<DocFrontMatterModel> LoadContent()
|
||||
{
|
||||
content = await MarkdownFiles.LoadMarkdown(httpClient, Filepath);
|
||||
|
||||
return docFrontMatter =
|
||||
await MarkdownFiles.LoadFrontMatter<DocFrontMatterModel>(httpClient, Filepath);
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
await LoadContent();
|
||||
}
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await LoadContent();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
<div class="noteNavContainer">
|
||||
@foreach (var note in Notes)
|
||||
{
|
||||
if (note.Parent == null)
|
||||
{
|
||||
<NavLink class="noteNavButton" href="@note.GetNoteLink()">@note.Name</NavLink>
|
||||
<NoteInnerNavComponent Note="@note"/>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.noteNavContainer {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.noteNavButton a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.noteNavButton a:hover {
|
||||
color: white;
|
||||
background-color: var(--primary-hover);
|
||||
|
||||
}
|
||||
|
||||
.noteNavButton {
|
||||
padding: 8px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public List<NoteContentModel> Notes { get; set; } = default!;
|
||||
|
||||
[Parameter]
|
||||
public List<NoteConnectionModel> Connections { get; set; } = default!;
|
||||
|
||||
}
|
||||
Binary file not shown.
@@ -1,31 +0,0 @@
|
||||
---
|
||||
title: Cheat Sheet
|
||||
summary: Handy links or quick information on this project.
|
||||
created_date: 2022-04-11
|
||||
updated_date: 2022-04-11
|
||||
---
|
||||
|
||||
# Overview
|
||||
|
||||
This document will contain quick reference information on this project.
|
||||
|
||||
## Dev Team
|
||||
|
||||
| Name | Role | Discord |
|
||||
|--------------------|------------|------------------------|
|
||||
| Jonathan McCaffrey | Maintainer | JonathanMcCaffrey#3544 |
|
||||
|
||||
## Project Links
|
||||
|
||||
| Name | Purpose | Link |
|
||||
|------------|-------------------------------------------------------------------|----------------------------------------------------------------|
|
||||
| Production | Customer facing version of website. `main` branch. | https://www.igpfanreference.com/ |
|
||||
| Develop | Development/testing version of website. `develop` branch. | https://calm-mud-04916b210.1.azurestaticapps.net/ |
|
||||
| GitRepo | Where all the dev work goes. | https://github.com/JonathanMcCaffrey/IGP-Fan-Reference |
|
||||
| CI | Deployment CI logs. See if a new build has successfully released. | https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/actions |
|
||||
|
||||
## Educational Links
|
||||
|
||||
| Name | Purpose | Link |
|
||||
|--------|---------------------------------------|----------------------------------------------------------------|
|
||||
| Blazor | Getting started information on Blazor | https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor |
|
||||
@@ -1,103 +0,0 @@
|
||||
---
|
||||
title: Project Data
|
||||
summary: Using data in this project.
|
||||
created_date: 2022-04-11
|
||||
updated_date: 2022-04-11
|
||||
---
|
||||
|
||||
# Overview
|
||||
|
||||
This document will contain general information on data in this project.
|
||||
|
||||
## General Note
|
||||
|
||||
This project is a work in progress. As such, most of the data in the website doesn't follow the document. Ideally, this
|
||||
will be fixed over time.
|
||||
|
||||
## SQL
|
||||
|
||||
Relational data is stored in a local SQL database.
|
||||
|
||||
This data is converted into JSON so it can be handled by Blazor WASM.
|
||||
|
||||
<i>Currently, Blazor WASM has a bug that prevents SQL from being used in production. Although, given SQL doesn't seem to
|
||||
provide much, aside from increased build times and load times, it might just be best to use the design principals of
|
||||
SQL, and it's interface, without using the actual technology in production.</i>
|
||||
|
||||
The data is then loaded in by a Service, via it's load method.
|
||||
|
||||
```csharp
|
||||
// Using Component
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await AgileService.Load();
|
||||
}
|
||||
```
|
||||
|
||||
```csharp
|
||||
// Loading Service
|
||||
public async Task Load()
|
||||
{
|
||||
if (isLoaded) return;
|
||||
AgileSprintModels =
|
||||
(await httpClient.GetFromJsonAsync<AgileSprintModel[]>("generated/AgileSprintModels.json")
|
||||
?? Array.Empty<AgileSprintModel>()).ToList();
|
||||
AgileTaskModels =
|
||||
(await httpClient.GetFromJsonAsync<AgileTaskModel[]>("generated/AgileTaskModels.json")
|
||||
?? Array.Empty<AgileTaskModel>()).ToList();
|
||||
SortSql();
|
||||
isLoaded = true;
|
||||
NotifyDataChanged();
|
||||
}
|
||||
```
|
||||
|
||||
We create a `SortSql()` method to handle adjusting the data to match what SQL would of given us.
|
||||
|
||||
```csharp
|
||||
private void SortSql()
|
||||
{
|
||||
foreach (var agileTask in AgileTaskModels!)
|
||||
{
|
||||
if (agileTask.AgileSprintModelId != null)
|
||||
{
|
||||
SprintById(agileTask.AgileSprintModelId.Value)?.AgileTaskModels.Add(agileTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
We could also create indexes, or whatever other functionality we lose by SQL not working in production.
|
||||
|
||||
Then it's only a matter of using said data.
|
||||
|
||||
```csharp
|
||||
@if (!agileService.IsLoaded())
|
||||
{
|
||||
<LoadingComponent/>
|
||||
}
|
||||
else
|
||||
{
|
||||
<LayoutMediumContentComponent>
|
||||
<WebsiteTitleComponent>Agile</WebsiteTitleComponent>
|
||||
<div class="agileViewContainer">
|
||||
@foreach (var sprint in agileService.AgileSprintModels!
|
||||
.OrderBy(e => e.EndDate).Reverse())
|
||||
{
|
||||
<details class="sprintDisplayContainer @sprint.GetSprintType().ToLower()"
|
||||
open="@(sprint.GetSprintType() == SprintType.Current)">
|
||||
<summary class="sprintSummary">
|
||||
<div class="sprintTitle">@sprint.Name</div>
|
||||
```
|
||||
|
||||
## Localized Strings
|
||||
|
||||
Localized strings are handled in the Localizations.resx file.
|
||||
|
||||
Most text isn't using localized strings yet. And English is the only plan of support in the short term, and probably in
|
||||
the long term as well.
|
||||
|
||||
## Markdown Files
|
||||
|
||||
Documents and Notes are markdown files located in the `wwwroot/content` folder.
|
||||
|
||||
Navigation to these pages is handled via the SQL data.
|
||||
@@ -1,93 +0,0 @@
|
||||
---
|
||||
title: Setup
|
||||
summary: Get set up on developing this web project.
|
||||
created_date: 3/30/2022
|
||||
updated_date: 4/7/2022
|
||||
---
|
||||
|
||||
# Overview
|
||||
|
||||
This document will contain general setup notes for the project.
|
||||
|
||||
## Prerequisite
|
||||
|
||||
To understand content in this document, it is recommended to have some software development experience. Particularly
|
||||
using GitHub and Visual Studio.
|
||||
|
||||
- [GitHub Documentation](https://docs.github.com/en/get-started)
|
||||
|
||||
- [Visual Studio Documentation](https://visualstudio.microsoft.com/vs/getting-started/)
|
||||
|
||||
To make updates to this website, it is recommended to understand HTML/CSS and C#.
|
||||
|
||||
- [C# Documentation](https://docs.microsoft.com/en-us/dotnet/csharp/)
|
||||
- [Mozilla's HTML Documentation](https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started)
|
||||
- [W3SCHOOLS' HTML Documentation](https://www.w3schools.com/html/)
|
||||
|
||||
Further, you should understand the product and clients this website is for. So it is recommended to play "Immortal:
|
||||
Gates of Pyre".
|
||||
|
||||
- [IGP Website](https://gatesofpyre.com/)
|
||||
- **Please Note:** This product currently has restricted access with it is in a pre-alpha state. If you are not
|
||||
aware or interested in IGP, I recommend to wait for product release. Otherwise, check out their discord for steps
|
||||
of getting access.
|
||||
|
||||
## Installation
|
||||
|
||||
Download and install Visual Studio preview.
|
||||
|
||||
**Note:** Visual Studio Preview currently doesn't work on Mac for this project. Use a PC, or Rider.
|
||||
|
||||
[https://visualstudio.microsoft.com/vs/preview/](https://visualstudio.microsoft.com/vs/preview/)
|
||||
|
||||
When installing, ensure you have selected "Workloads | **ASP.NET and web development**" and "Individual components | **
|
||||
.NET WebAssembly build tools**".
|
||||
|
||||
## Download Project
|
||||
|
||||
Get this project from GitHub.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/JonathanMcCaffrey/IGP-Fan-Reference.git
|
||||
```
|
||||
|
||||
## Project Tree
|
||||
|
||||
```
|
||||
C:.
|
||||
├───.github
|
||||
│ └───workflows # Workflows to deploy website
|
||||
├───Components # Components used be website
|
||||
├───Contexts
|
||||
├───IGP
|
||||
│ ├───Pages # Website pages
|
||||
│ └───wwwroot
|
||||
│ ├───css
|
||||
│ ├───generated # Files generated by IGP_Convert. Do not edit
|
||||
│ ├───image
|
||||
│ └───javascript
|
||||
├───IGP_Convert # Converts SQL into JSON for Blazor Wasm
|
||||
├───Model # Data models
|
||||
└───Services # Web services
|
||||
```
|
||||
|
||||
## Running
|
||||
|
||||
- Open `IGP/IGP.sln`.
|
||||
- Click the green RUN button in Visual Studio.
|
||||
- A local copy of the IGP Website should have launched on your machine.
|
||||
|
||||
## Publishing
|
||||
|
||||
Code committed to the `main` branch will automatically be deployed to [production](https://www.igpfanreference.com/).
|
||||
|
||||
Code committed to the `develop` branch will automatically be deployed
|
||||
to [development](https://calm-mud-04916b210.1.azurestaticapps.net/).
|
||||
|
||||
_This is handle via the files in `.github/workflow`. Look into
|
||||
these [GitHub Actions Documents](https://docs.github.com/en/actions) if curious about how this CI system works._
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Nothing that some good internet searches cannot resolved. But you can also contact the project maintainer
|
||||
on [Discord](https://discord.gg/uMq8bMGeeN).
|
||||
@@ -1 +0,0 @@
|
||||
[{"Id":0,"Name":"Easy Tasks","Description":"General tasks that I can grab when too tired to program","StartDate":null,"EndDate":null,"Notes":null,"AgileTaskModels":[]},{"Id":1,"Name":"Agile Sprint","Description":"Changelogs and sprint views were going to be pushed till later, but I am feeling inspired by the IGP Content Creators\u0027 minimum weekly lifecycle requirement. So I am going to focus on agile-related tasks, and handle roadmap tasks after this initial sprint. All weekly sprints will release on Sunday, starting next Sunday.","StartDate":"2022-02-14T00:00:00","EndDate":"2022-02-20T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":2,"Name":"SQL Update","Description":"The SQL update is big enough to be a full sprint in of itself, and I spent less time this week for development. Will just extend sprint by 2 week, and remove all non SQL tasks from the sprint.","StartDate":"2022-02-20T00:00:00","EndDate":"2022-03-27T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":3,"Name":"Database Page","Description":"Improvements to the Database page","StartDate":"2022-03-27T00:00:00","EndDate":"2022-04-03T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":4,"Name":"Branding","Description":"Improve streaming branding around the website","StartDate":"2022-04-03T00:00:00","EndDate":"2022-04-10T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":5,"Name":"Calculators","Description":"Improve Calculators","StartDate":"2022-04-10T00:00:00","EndDate":"2022-04-24T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":6,"Name":"Infrastructure Misc","Description":"Localization, Analytics, and Test Automation","StartDate":"2022-04-24T00:00:00","EndDate":"2022-05-08T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":7,"Name":"Damage Calculator and Lists","Description":"Sort unit data by damage output. Select a attack and defense unit to see hits to kill.","StartDate":"2022-05-08T00:00:00","EndDate":"2022-05-22T00:00:00","Notes":null,"AgileTaskModels":[]},{"Id":8,"Name":"More Test Automation and CI","Description":"More test automation work. Integrate into CI","StartDate":"2022-05-22T00:00:00","EndDate":"2022-06-05T00:00:00","Notes":null,"AgileTaskModels":[]}]
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
[{"Id":1,"ParentId":null,"DocSectionModelId":1,"Href":"setup","DocumentationModels":[],"Parent":null,"PageOrder":0,"CreatedDate":"2022-03-30T00:00:00","UpdatedDate":"2022-04-07T00:00:00","Name":"Development Setup","Description":"Get set up on developing this web project.","Content":"setup"},{"Id":2,"ParentId":null,"DocSectionModelId":1,"Href":"project-data","DocumentationModels":[],"Parent":null,"PageOrder":0,"CreatedDate":"2022-04-11T00:00:00","UpdatedDate":"2022-04-11T00:00:00","Name":"Project Data","Description":"Using data in this project.","Content":"project-data"},{"Id":3,"ParentId":null,"DocSectionModelId":1,"Href":"cheat-sheet","DocumentationModels":[],"Parent":null,"PageOrder":0,"CreatedDate":"2022-04-11T00:00:00","UpdatedDate":"2022-04-11T00:00:00","Name":"Cheat Sheet","Description":"Handy links or quick information on this project.","Content":"cheat-sheet"}]
|
||||
@@ -1 +0,0 @@
|
||||
[{"Id":1,"Name":"Start","DocumentationModels":[]}]
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
[{"Id":1,"Name":"Database UX Patch","Date":"2022-03-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":2,"Name":"Thrum Stats Hotfix","Date":"2022-03-12T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":3,"Name":"Memory Tester Patch","Date":"2022-03-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":4,"Name":"Hide Pyre Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":5,"Name":"Stream Patch 1","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":6,"Name":"Agile UI Hotfix","Date":"2022-02-20T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":7,"Name":"Armor Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":8,"Name":"Home Page Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":9,"Name":"Mobile Menu Hotfix 2","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":10,"Name":"Mobile Menu Hotfix","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":11,"Name":"Mobile Menu Patch","Date":"2022-02-19T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":12,"Name":"0.0.6.8375a Patch","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":13,"Name":"Google Tracking Hotfix","Date":"2022-02-18T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":14,"Name":"Privacy Policy Patch","Date":"2022-02-17T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":15,"Name":"Home Page Quick Hotfix","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":16,"Name":"Early Agile Patch","Date":"2022-02-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":17,"Name":"Form Text Rendering Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":18,"Name":"Reducing Timing Interval Hotfix","Date":"2022-02-15T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":19,"Name":"Changelog Patch","Date":"2022-02-14T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":20,"Name":"SQL Patch","Date":"2022-03-26T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":21,"Name":"Stream Patch 2","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":22,"Name":"0.0.6.8900a Patch","Date":"2022-03-30T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":23,"Name":"Database Links Patch","Date":"2022-04-01T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":24,"Name":"Open Source Patch","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":25,"Name":"Stream Patch 3","Date":"2022-04-03T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":26,"Name":"Notes/Docs Patch","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":27,"Name":"Stream Patch 4","Date":"2022-04-10T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":28,"Name":"Passive Patch","Date":"2022-04-12T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":29,"Name":"0.0.6.9121a Patch","Date":"2022-04-13T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":30,"Name":"Stream Patch 5","Date":"2022-04-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":31,"Name":"BuildCalc Hotfix","Date":"2022-04-13T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":32,"Name":"Search Patch","Date":"2022-04-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":33,"Name":"Search Hotfix","Date":"2022-04-16T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":34,"Name":"Stream Patch 6","Date":"2022-04-17T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":35,"Name":"v0.0.6.9201a Patch","Date":"2022-04-18T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":36,"Name":"Build Calc Free Money Hotfix","Date":"2022-04-18T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":37,"Name":"BuildCalc Pyre Patch","Date":"2022-04-24T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":38,"Name":"Stream Patch 7","Date":"2022-04-24T00:00:00","GitChangeModels":[],"Important":"False"},{"Id":39,"Name":"v0.0.6.9513a Patch","Date":"2022-04-28T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":40,"Name":"v0.0.6.9553a Patch","Date":"2022-04-29T00:00:00","GitChangeModels":[],"Important":"True"},{"Id":41,"Name":"Stream Patch 8","Date":"2022-04-29T00:00:00","GitChangeModels":[],"Important":"False"}]
|
||||
@@ -1 +0,0 @@
|
||||
[{"Id":1,"ParentId":null,"NoteSectionModelId":3,"Href":"holdout","CreatedDate":"2022-02-18T00:00:00","UpdatedDate":"2022-02-18T00:00:00","Name":"Coop Holdout, Some distant place (Nuath)","Description":"First coop test map in pre-alpha.","Content":"coop/holdout","LoadedContent":null,"IsHidden":"False","IsPreAlpha":"True","NoteContentModels":[],"Parent":null,"PageOrder":0},{"Id":2,"ParentId":null,"NoteSectionModelId":2,"Href":"hotkeys","CreatedDate":"2022-04-13T00:00:00","UpdatedDate":"2022-04-13T00:00:00","Name":"Custom HotKey Setup","Description":"Customize your hotkeys in the pre-alpha.","Content":"settings/hotkeys","LoadedContent":null,"IsHidden":"False","IsPreAlpha":"True","NoteContentModels":[],"Parent":null,"PageOrder":0},{"Id":3,"ParentId":null,"NoteSectionModelId":1,"Href":"armor-types","CreatedDate":"2022-04-13T00:00:00","UpdatedDate":"2022-04-13T00:00:00","Name":"Armor Types","Description":"Heavy, Medium, and Light. What does it mean?","Content":"the-basics/armor-types","LoadedContent":null,"IsHidden":"False","IsPreAlpha":"True","NoteContentModels":[],"Parent":null,"PageOrder":0}]
|
||||
@@ -1 +0,0 @@
|
||||
[{"Id":1,"Name":"The Basics","NoteContentModels":[]},{"Id":2,"Name":"Game Settings","NoteContentModels":[]},{"Id":3,"Name":"PVE Content","NoteContentModels":[]}]
|
||||
@@ -1 +0,0 @@
|
||||
[{"Key":"GamePatch","Value":"0.0.6.10097a"},{"Key":"LastUpdated","Value":"August 27, 2022"}]
|
||||
@@ -1 +0,0 @@
|
||||
[{"Id":1,"WebSectionModelId":2,"Name":"Database","Description":"Database of game information","Href":"database","IsPrivate":"False"},{"Id":2,"WebSectionModelId":1,"Name":"Build Calculator","Description":"Build order calculator for determining army timings","Href":"build-calculator","IsPrivate":"False"},{"Id":3,"WebSectionModelId":1,"Name":"Harass Calculator","Description":"Alloy harassment calculator","Href":"harass-calculator","IsPrivate":"False"},{"Id":4,"WebSectionModelId":1,"Name":"Memory Tester","Description":"Testing memory","Href":"memory-tester","IsPrivate":"False"},{"Id":5,"WebSectionModelId":1,"Name":"Comparion Charts","Description":"Ecnomy charts to compare build orders","Href":"comparison-charts","IsPrivate":"True"},{"Id":6,"WebSectionModelId":2,"Name":"Notes","Description":"General player notes","Href":"notes","IsPrivate":"False"},{"Id":7,"WebSectionModelId":2,"Name":"Key Mapping","Description":"General key mapping info","Href":"keymapping","IsPrivate":"True"},{"Id":8,"WebSectionModelId":4,"Name":"Milestones","Description":"Link to Milestones on GitHub","Href":"https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/milestones","IsPrivate":"False"},{"Id":9,"WebSectionModelId":4,"Name":"Commits","Description":"Link to Commits on GitHub","Href":"https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/commits/main","IsPrivate":"False"},{"Id":10,"WebSectionModelId":4,"Name":"Tasks","Description":"Link to Tasks on GitHub","Href":"https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/projects/3","IsPrivate":"False"},{"Id":11,"WebSectionModelId":4,"Name":"Code","Description":"Link to Code on GitHub","Href":"https://github.com/JonathanMcCaffrey/IGP-Fan-Reference","IsPrivate":"False"},{"Id":12,"WebSectionModelId":2,"Name":"Documentation","Description":"Explaining how to use this website","Href":"documentation","IsPrivate":"True"},{"Id":13,"WebSectionModelId":3,"Name":"About","Description":"Answering general questions on the website","Href":"about","IsPrivate":"False"},{"Id":14,"WebSectionModelId":3,"Name":"Contact","Description":"My contact info","Href":"contact","IsPrivate":"False"},{"Id":15,"WebSectionModelId":3,"Name":"Streams","Description":"Stream info","Href":"streams","IsPrivate":"False"},{"Id":16,"WebSectionModelId":4,"Name":"Wiki","Description":"Link to Wiki on GitHub","Href":"https://github.com/JonathanMcCaffrey/IGP-Fan-Reference/wiki","IsPrivate":"False"},{"Id":17,"WebSectionModelId":5,"Name":"Permissions","Description":"Permission Settings","Href":"permissions","IsPrivate":"False"},{"Id":18,"WebSectionModelId":5,"Name":"Data Collection","Description":"Data Collection Settings","Href":"data-collection","IsPrivate":"True"},{"Id":19,"WebSectionModelId":5,"Name":"Storage","Description":"Storage Settings","Href":"storage","IsPrivate":"False"},{"Id":20,"WebSectionModelId":1,"Name":"Economy Comparison","Description":"Compare economies","Href":"economy-comparison","IsPrivate":"False"}]
|
||||
@@ -1 +0,0 @@
|
||||
[{"Id":1,"Name":"Tools","Description":"Tools Stuff","Order":1,"IsPrivate":"False","Icon":"fa-screwdriver-wrench","OnlyIcon":false,"WebPageModels":[]},{"Id":2,"Name":"Resources","Description":"Resources Stuff","Order":2,"IsPrivate":"False","Icon":"fa-toolbox","OnlyIcon":false,"WebPageModels":[]},{"Id":3,"Name":"General","Description":"About Stuff","Order":3,"IsPrivate":"False","Icon":"fa-circle-info","OnlyIcon":false,"WebPageModels":[]},{"Id":4,"Name":"Development","Description":"Development Stuff","Order":4,"IsPrivate":"False","Icon":"fa-code","OnlyIcon":false,"WebPageModels":[]},{"Id":5,"Name":"Settings","Description":"Settings Stuff","Order":5,"IsPrivate":"False","Icon":"fa-gear","OnlyIcon":false,"WebPageModels":[]}]
|
||||
@@ -1,28 +0,0 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Contexts\Contexts.csproj" />
|
||||
<ProjectReference Include="..\Model\Model.csproj" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="6.0.8" />
|
||||
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.8" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.8" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.8" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.8">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -1,34 +0,0 @@
|
||||
using System.Text.Json;
|
||||
using Contexts;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
var webProjectName = "IGP";
|
||||
var projectPath = $"{Environment.CurrentDirectory}/../../../..";
|
||||
var webPath = $"{projectPath}/{webProjectName}/wwwroot/generated";
|
||||
|
||||
var options = new DbContextOptionsBuilder<DatabaseContext>();
|
||||
options.UseSqlite($"Filename={projectPath}/{webProjectName}/Database.db");
|
||||
|
||||
// Load our database
|
||||
using (var db = new DatabaseContext(options.Options))
|
||||
{
|
||||
// And save data in format Blazor Wasm can use
|
||||
File.WriteAllTextAsync($"{webPath}/GitPatchModels.json", JsonSerializer.Serialize(db.GitPatchModels));
|
||||
File.WriteAllTextAsync($"{webPath}/GitChangeModels.json", JsonSerializer.Serialize(db.GitChangeModels));
|
||||
File.WriteAllTextAsync($"{webPath}/AgileSprintModels.json", JsonSerializer.Serialize(db.AgileSprintModels));
|
||||
File.WriteAllTextAsync($"{webPath}/AgileTaskModels.json", JsonSerializer.Serialize(db.AgileTaskModels));
|
||||
File.WriteAllTextAsync($"{webPath}/WebSectionModels.json", JsonSerializer.Serialize(db.WebSectionModels));
|
||||
File.WriteAllTextAsync($"{webPath}/WebPageModels.json", JsonSerializer.Serialize(db.WebPageModels));
|
||||
|
||||
File.WriteAllTextAsync($"{webPath}/DocContentModels.json", JsonSerializer.Serialize(db.DocContentModels));
|
||||
File.WriteAllTextAsync($"{webPath}/DocConnectionModels.json", JsonSerializer.Serialize(db.DocConnectionModels));
|
||||
File.WriteAllTextAsync($"{webPath}/DocSectionModels.json", JsonSerializer.Serialize(db.DocSectionModels));
|
||||
|
||||
File.WriteAllTextAsync($"{webPath}/NoteContentModels.json", JsonSerializer.Serialize(db.NoteContentModels));
|
||||
File.WriteAllTextAsync($"{webPath}/NoteConnectionModels.json", JsonSerializer.Serialize(db.NoteConnectionModels));
|
||||
File.WriteAllTextAsync($"{webPath}/NoteSectionModels.json", JsonSerializer.Serialize(db.NoteSectionModels));
|
||||
|
||||
// Set date variable
|
||||
db.Variables.Find("LastUpdated")!.Value = $"{DateTime.Now:MMMM dd, yyyy}";
|
||||
File.WriteAllTextAsync($"{webPath}/Variables.json", JsonSerializer.Serialize(db.Variables));
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using Model.Work.Tasks.Enums;
|
||||
|
||||
namespace Model.Work.Tasks;
|
||||
|
||||
public class AgileSprintModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; } = "Add name...";
|
||||
public string Description { get; set; } = "Add description...";
|
||||
|
||||
public DateTime? StartDate { get; set; } = null;
|
||||
public DateTime? EndDate { get; set; } = null;
|
||||
|
||||
public string Notes { get; set; } = "Add notes...";
|
||||
|
||||
[NotMapped] public virtual ICollection<AgileTaskModel> AgileTaskModels { get; set; } = new List<AgileTaskModel>();
|
||||
|
||||
|
||||
public string GetSprintType()
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
|
||||
if (StartDate == null || EndDate == null) return SprintType.Planned;
|
||||
|
||||
if (DateTime.Compare(now, EndDate.GetValueOrDefault()) > 0) return SprintType.Completed;
|
||||
if (DateTime.Compare(now, StartDate.GetValueOrDefault()) >= 0) return SprintType.Current;
|
||||
|
||||
return SprintType.Planned;
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
using System;
|
||||
using Model.Work.Tasks.Enums;
|
||||
|
||||
namespace Model.Work.Tasks;
|
||||
|
||||
public class AgileTaskModel
|
||||
{
|
||||
public int Id { get; set; } = 1;
|
||||
public int? AgileSprintModelId { get; set; } = null;
|
||||
public string Name { get; set; } = "Add name...";
|
||||
public string Description { get; set; } = "Add description...";
|
||||
public string Notes { get; set; } = "Add notes...";
|
||||
public string Status { get; set; } = StatusType.Fun_Idea;
|
||||
public string Priority { get; set; } = PriorityType.Medium;
|
||||
public string Task { get; set; } = TaskType.Feature;
|
||||
|
||||
public int OrderPriority => Status == StatusType.In_Progress ? 1
|
||||
: Status == StatusType.Todo ? 2
|
||||
: Status == StatusType.Done ? 3
|
||||
: Status == StatusType.Canceled ? 4
|
||||
: Status == StatusType.To_Test ? 2
|
||||
: Status == StatusType.Fun_Idea ? 5 : 6;
|
||||
|
||||
public DateTime? Created { get; set; } = null;
|
||||
public DateTime? Finished { get; set; } = null;
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
namespace Model.Work.Tasks.Enums;
|
||||
|
||||
public class PriorityType
|
||||
{
|
||||
public const string Blocker = "Blocker";
|
||||
public const string High = "High";
|
||||
public const string Medium = "Medium";
|
||||
public const string Low = "Low";
|
||||
public const string None = "None";
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
namespace Model.Work.Tasks.Enums;
|
||||
|
||||
public class ProjectType
|
||||
{
|
||||
public const string Management = "Management";
|
||||
public const string Immortal = "Management";
|
||||
public const string Food = "Management";
|
||||
public const string Job = "Management";
|
||||
public const string Time = "Management";
|
||||
public const string Maintence = "Management";
|
||||
public const string Website = "Management";
|
||||
public const string Tasks = "Management";
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace Model.Work.Tasks.Enums;
|
||||
|
||||
public class SprintType
|
||||
{
|
||||
public const string Current = "Current";
|
||||
public const string Planned = "Planned";
|
||||
public const string Completed = "Completed";
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
namespace Model.Work.Tasks.Enums;
|
||||
|
||||
public class StatusType
|
||||
{
|
||||
public const string In_Progress = "In_Progress";
|
||||
public const string Todo = "Todo";
|
||||
public const string To_Test = "To_Test";
|
||||
public const string Done = "Done";
|
||||
public const string Canceled = "Canceled";
|
||||
public const string Fun_Idea = "Fun_Idea";
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
namespace Model.Work.Tasks.Enums;
|
||||
|
||||
public class TaskType
|
||||
{
|
||||
public const string Feature = "Feature";
|
||||
public const string Bug = "Bug";
|
||||
public const string Document = "Document";
|
||||
}
|
||||
@@ -25,6 +25,7 @@ public class BuildOrderModel
|
||||
public int CurrentSupplyUsed { get; set; } = 0;
|
||||
public Dictionary<int, List<EntityModel>> StartedOrders { get; set; } = new();
|
||||
public Dictionary<int, List<EntityModel>> CompletedOrders { get; set; } = new();
|
||||
public Dictionary<int, List<EntityModel>> DepletedOrders { get; set; } = new();
|
||||
public Dictionary<string, int> UniqueCompletedTimes { get; set; } = new();
|
||||
public Dictionary<string, int> UniqueCompletedCount { get; set; } = new();
|
||||
public Dictionary<int, int> SupplyCountTimes { get; set; } = new();
|
||||
@@ -47,7 +48,7 @@ public class BuildOrderModel
|
||||
new List<EntityModel>
|
||||
{
|
||||
EntityModel.Get(DataType.STARTING_Bastion),
|
||||
EntityModel.Get(DataType.STARTING_TownHall_Aru)
|
||||
EntityModel.Get(factionStartingTownHall)
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -58,7 +59,7 @@ public class BuildOrderModel
|
||||
new List<EntityModel>
|
||||
{
|
||||
EntityModel.Get(DataType.STARTING_Bastion),
|
||||
EntityModel.Get(DataType.STARTING_TownHall_Aru)
|
||||
EntityModel.Get(factionStartingTownHall)
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -68,7 +69,7 @@ public class BuildOrderModel
|
||||
DataType.STARTING_Bastion, 0
|
||||
},
|
||||
{
|
||||
DataType.STARTING_TownHall_Aru, 0
|
||||
factionStartingTownHall, 0
|
||||
}
|
||||
};
|
||||
UniqueCompletedCount = new Dictionary<string, int>
|
||||
@@ -77,7 +78,7 @@ public class BuildOrderModel
|
||||
DataType.STARTING_Bastion, 1
|
||||
},
|
||||
{
|
||||
DataType.STARTING_TownHall_Aru, 1
|
||||
factionStartingTownHall, 1
|
||||
}
|
||||
};
|
||||
SupplyCountTimes = new Dictionary<int, int>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user