94 changed files with 794 additions and 2600 deletions
@ -0,0 +1,35 @@
|
||||
<a href="@Href" class="linkButtonContainer"> |
||||
@ChildContent |
||||
</a> |
||||
|
||||
<style> |
||||
.linkButtonContainer { |
||||
padding: 16px; |
||||
border: 1px solid; |
||||
border-radius: 8px; |
||||
font-weight: 800; |
||||
font-size: 1.2rem; |
||||
border-color: var(--primary); |
||||
background-color: var(--primary); |
||||
} |
||||
|
||||
.linkButtonContainer:hover { |
||||
background-color: var(--primary-hover); |
||||
border-color: var(--primary-border-hover); |
||||
color: white; |
||||
} |
||||
|
||||
</style> |
||||
|
||||
|
||||
@code { |
||||
|
||||
[Parameter] |
||||
public RenderFragment ChildContent { get; set; } = default!; |
||||
|
||||
|
||||
[Parameter] |
||||
public string Href { get; set; } = ""; |
||||
|
||||
|
||||
} |
||||
Binary file not shown.
@ -1,117 +0,0 @@
|
||||
@implements IDisposable; |
||||
@inject IAgileService AgileService; |
||||
|
||||
@layout PageLayout |
||||
@inherits BasePage |
||||
|
||||
@page "/agile" |
||||
|
||||
@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> |
||||
<div style="flex: 1; flex-grow: 1;"></div> |
||||
<div class="sprintDates"> |
||||
<div class="sprintStartDate"> |
||||
@if (sprint.StartDate != null) |
||||
{ |
||||
<b>Start: </b> |
||||
@sprint.StartDate.Value.ToString("dd/MM/yyyy") |
||||
} |
||||
</div> |
||||
<div class="sprintEndDate"> |
||||
@if (sprint.EndDate != null) |
||||
{ |
||||
<b>End: </b> |
||||
@sprint.EndDate.Value.ToString("dd/MM/yyyy") |
||||
} |
||||
|
||||
</div> |
||||
</div> |
||||
</summary> |
||||
<SprintComponent AgileSprint="sprint"></SprintComponent> |
||||
|
||||
</details> |
||||
} |
||||
|
||||
<details class="sprintDisplayContainer"> |
||||
<summary class="sprintSummary"> |
||||
<div class="sprintTitle">Backlog</div> |
||||
<div style="flex: 1; flex-grow: 1;"></div> |
||||
</summary> |
||||
<div> |
||||
<BacklogComponent Backlog=backlog></BacklogComponent> |
||||
</div> |
||||
</details> |
||||
</div> |
||||
|
||||
<ContentDividerComponent></ContentDividerComponent> |
||||
|
||||
<PaperComponent> |
||||
|
||||
<InfoBodyComponent> |
||||
<InfoQuestionComponent>What is Agile?</InfoQuestionComponent> |
||||
<InfoAnswerComponent> |
||||
Agile is a work methodology for determing task assignment and release deadlines. |
||||
<br/><br/> |
||||
My agile practice will be creating tasks in a backlog. Assigning them to weekly sprints. And completing all tasks in the allotted time frame. |
||||
<br/><br/> |
||||
Any unfinished tasks are moved into the next sprint, or the sprint will be extended by a week. |
||||
</InfoAnswerComponent> |
||||
</InfoBodyComponent> |
||||
</PaperComponent> |
||||
</LayoutMediumContentComponent> |
||||
} |
||||
|
||||
|
||||
@code { |
||||
private readonly List<AgileTaskModel> backlog = new(); |
||||
|
||||
protected override void OnInitialized() |
||||
{ |
||||
base.OnInitialized(); |
||||
|
||||
AgileService.Subscribe(HasChanged); |
||||
HasChanged(); |
||||
} |
||||
|
||||
void IDisposable.Dispose() |
||||
{ |
||||
AgileService.Unsubscribe(HasChanged); |
||||
} |
||||
|
||||
void HasChanged() |
||||
{ |
||||
if (!AgileService.IsLoaded()) return; |
||||
|
||||
backlog.Clear(); |
||||
|
||||
foreach (var task in AgileService.AgileTaskModels!) |
||||
{ |
||||
if (task.AgileSprintModelId == null) |
||||
{ |
||||
backlog.Add(task); |
||||
} |
||||
} |
||||
|
||||
StateHasChanged(); |
||||
} |
||||
|
||||
protected override async Task OnInitializedAsync() |
||||
{ |
||||
await AgileService.Load(); |
||||
} |
||||
|
||||
} |
||||
@ -1,66 +0,0 @@
|
||||
|
||||
.agileViewContainer { |
||||
display: flex; |
||||
gap: 12px; |
||||
flex-direction: column; |
||||
} |
||||
|
||||
.sprintDisplayContainer { |
||||
border: 4px solid var(--paper); |
||||
box-shadow: 0px 2px 12px rgba(0, 0, 0, 0.2); |
||||
border-radius: 2px; |
||||
padding: 25px; |
||||
margin: auto; |
||||
width: 100%; |
||||
background-color: var(--paper); |
||||
} |
||||
|
||||
@media only screen and (max-width: 1025px) { |
||||
.sprintDisplayContainer { |
||||
padding: 2px; |
||||
} |
||||
} |
||||
|
||||
.sprintSummary { |
||||
display: flex; |
||||
width: 100%; |
||||
} |
||||
|
||||
.sprintDisplayContainer.current { |
||||
border-color: #042901; |
||||
background-color: var(--paper); |
||||
} |
||||
|
||||
.sprintDisplayContainer.planned { |
||||
border-color: #2a2000; |
||||
background-color: var(--paper); |
||||
} |
||||
|
||||
.sprintDisplayContainer.completed { |
||||
border-color: #2a2000; |
||||
background-color: var(--paper); |
||||
} |
||||
|
||||
|
||||
details .sprintSummary::before { |
||||
content: "+"; |
||||
font-weight: bolder; |
||||
font-size: 1.5rem; |
||||
padding-right: 8px; |
||||
} |
||||
|
||||
details[open] .sprintSummary::before { |
||||
content: "-"; |
||||
} |
||||
|
||||
|
||||
.sprintTitle { |
||||
width: 400px; |
||||
font-size: 1.6rem; |
||||
font-weight: 800; |
||||
} |
||||
|
||||
.sprintDates { |
||||
width: 160px; |
||||
text-align: right; |
||||
} |
||||
@ -1,183 +0,0 @@
|
||||
<div class="sprintContainer"> |
||||
<div class="tasksContainer"> |
||||
@foreach (var task in Backlog) |
||||
{ |
||||
<div class="taskContainer @task.Status.ToLower()"> |
||||
<div class="taskName">@task.Name</div> |
||||
<div class="taskDetails"> |
||||
<LayoutRowComponent> |
||||
<LayoutColumnComponent> |
||||
<div class="taskType"> |
||||
<b>Type: </b>@task.Task.Replace("_", " ") |
||||
</div> |
||||
<div class="taskStatus"> |
||||
<b>Status: </b>@task.Status.Replace("_", " ") |
||||
</div> |
||||
<div class="taskPriority"> |
||||
<b>Priority: </b>@task.Priority |
||||
</div> |
||||
</LayoutColumnComponent> |
||||
<LayoutColumnComponent> |
||||
@if (task.Finished != null) |
||||
{ |
||||
<div class="taskFinished"> |
||||
<b>Finished: </b>@task.Finished |
||||
</div> |
||||
} |
||||
<div class="taskCreated"> |
||||
<b>Created: </b>@task.Created |
||||
</div> |
||||
</LayoutColumnComponent> |
||||
</LayoutRowComponent> |
||||
</div> |
||||
<div class="taskDescription"> |
||||
<b>Description: </b>@task.Description |
||||
</div> |
||||
<div class="taskNotes"> |
||||
<b>Notes: </b>@task.Notes |
||||
</div> |
||||
</div> |
||||
} |
||||
|
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<style> |
||||
.sprintContainer { |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 12px; |
||||
padding-top: 16px; |
||||
} |
||||
|
||||
|
||||
@@media only screen and (max-width: 1025px) { |
||||
.sprintContainer { |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 6px; |
||||
border: none; |
||||
margin-top: 12px; |
||||
box-shadow: none; |
||||
padding: 8px; |
||||
} |
||||
} |
||||
|
||||
.tasksContainer { |
||||
grid-area: tasks; |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 20px; |
||||
padding: 25px; |
||||
align-items: stretch; |
||||
justify-content: stretch; |
||||
justify-items: stretch; |
||||
} |
||||
|
||||
.taskContainer { |
||||
padding: 25px; |
||||
border: 1px dashed rgba(0,0,0,0.6); |
||||
box-shadow: 0px 2px 6px rgba(0,0,0,0.1); |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.taskContainer.@StatusType.In_Progress.ToLower() { |
||||
border-color: #030129; |
||||
background-color: #2c3a4c; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Todo.ToLower() { |
||||
border-color: #2a2000; |
||||
background-color: #ffbf0029; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.To_Test.ToLower() { |
||||
border-color: #030129; |
||||
background-color: #2c3a4c; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Canceled.ToLower() { |
||||
border-color: #290102; |
||||
background-color: #4C2C33; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Done.ToLower() { |
||||
border-color: #042901; |
||||
background-color: #2E4C2C; |
||||
} |
||||
|
||||
|
||||
.taskName { |
||||
font-weight: bold; |
||||
grid-area: name; |
||||
} |
||||
|
||||
.taskCreated { |
||||
grid-area: created; |
||||
} |
||||
|
||||
.taskFinished { |
||||
grid-area: finished; |
||||
} |
||||
|
||||
.taskStatus { |
||||
grid-area: status; |
||||
} |
||||
|
||||
.taskDescription { |
||||
margin-top: 10px; |
||||
grid-area: description; |
||||
} |
||||
|
||||
.taskNotes { |
||||
grid-area: notes; |
||||
} |
||||
|
||||
|
||||
@@media only screen and (max-width: 1025px) { |
||||
.tasksContainer { |
||||
padding: 0px; |
||||
margin-top: 12px; |
||||
padding-top: 12px; |
||||
border-top: 4px solid rgba(0,0,0,0.4) |
||||
} |
||||
|
||||
.taskContainer { |
||||
padding: 2px; |
||||
border: none; |
||||
box-shadow: none; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.In_Progress.ToLower() { |
||||
border-color: transparent; |
||||
background-color: transparent; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Todo.ToLower() { |
||||
border-color: transparent; |
||||
background-color: transparent; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Canceled.ToLower() { |
||||
border-color: transparent; |
||||
background-color: transparent; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Done.ToLower() { |
||||
border-color: transparent; |
||||
background-color: transparent; |
||||
} |
||||
} |
||||
|
||||
</style> |
||||
|
||||
@code { |
||||
|
||||
[Parameter] |
||||
public List<AgileTaskModel> Backlog { get; set; } = default!; |
||||
|
||||
} |
||||
@ -1,224 +0,0 @@
|
||||
<div class="sprintContainer"> |
||||
<div class="sprintStatus"> |
||||
<b>Status: </b>@AgileSprint.GetSprintType() |
||||
</div> |
||||
<div class="sprintDescription"> |
||||
<b>Description: </b>@AgileSprint.Description |
||||
</div> |
||||
<div class="sprintNotes"> |
||||
<b>Notes: </b>@AgileSprint.Notes |
||||
</div> |
||||
<div class="tasksContainer"> |
||||
@if (AgileSprint.AgileTaskModels.Count > 0) |
||||
{ |
||||
@foreach (var task in AgileSprint.AgileTaskModels.OrderBy(x => x.OrderPriority)) |
||||
{ |
||||
<div class="taskContainer @task.Status.ToLower() @task.Task.ToLower()"> |
||||
<div class="taskName">@task.Name</div> |
||||
<div class="taskDetails"> |
||||
<LayoutRowComponent> |
||||
<LayoutColumnComponent> |
||||
<div class="taskType"> |
||||
<b>Type: </b>@task.Task.Replace("_", " ") |
||||
</div> |
||||
<div class="taskStatus"> |
||||
<b>Status: </b>@task.Status.Replace("_", " ") |
||||
</div> |
||||
<div class="taskPriority"> |
||||
<b>Priority: </b>@task.Priority |
||||
</div> |
||||
|
||||
</LayoutColumnComponent> |
||||
<LayoutColumnComponent> |
||||
@if (task.Finished != null) |
||||
{ |
||||
<div class="taskFinished"> |
||||
<b>Finished: </b>@task.Finished.Value.ToString("dd/MM/yyyy") |
||||
</div> |
||||
} |
||||
<div class="taskCreated"> |
||||
<b>Created: </b>@task.Created!.Value.ToString("dd/MM/yyyy") |
||||
</div> |
||||
</LayoutColumnComponent> |
||||
</LayoutRowComponent> |
||||
</div> |
||||
<div class="taskDescription"> |
||||
<b>Description: </b>@task.Description |
||||
</div> |
||||
<div class="taskNotes"> |
||||
<b>Notes: </b>@task.Notes |
||||
</div> |
||||
</div> |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
<div>Add Tasks...</div> |
||||
} |
||||
</div> |
||||
</div> |
||||
|
||||
<style> |
||||
.sprintContainer { |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 12px; |
||||
padding-top: 16px; |
||||
} |
||||
|
||||
.sprintDescription { |
||||
grid-area: description; |
||||
} |
||||
|
||||
|
||||
|
||||
@@media only screen and (max-width: 1025px) { |
||||
.sprintContainer { |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 6px; |
||||
border: none; |
||||
margin-top: 12px; |
||||
box-shadow: none; |
||||
padding: 8px; |
||||
} |
||||
|
||||
.sprintStartDate { |
||||
text-align: left; |
||||
} |
||||
|
||||
.sprintEndDate { |
||||
text-align: left; |
||||
} |
||||
} |
||||
|
||||
.tasksContainer { |
||||
grid-area: tasks; |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 20px; |
||||
padding: 25px; |
||||
align-items: stretch; |
||||
justify-content: stretch; |
||||
justify-items: stretch; |
||||
} |
||||
|
||||
.taskContainer { |
||||
padding: 25px; |
||||
border: 1px dashed rgba(0,0,0,0.6); |
||||
box-shadow: 0px 2px 6px rgba(0,0,0,0.1); |
||||
} |
||||
|
||||
|
||||
.taskContainer.@StatusType.In_Progress.ToLower() { |
||||
border-color: #030129; |
||||
background-color: #2c3a4c; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Todo.ToLower() { |
||||
border-color: #2a2000; |
||||
background-color: #ffbf0029; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.To_Test.ToLower() { |
||||
border-color: #030129; |
||||
background-color: #2c3a4c; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Canceled.ToLower() { |
||||
border-color: #290102; |
||||
background-color: #4C2C33; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Done.ToLower() { |
||||
border-color: #042901; |
||||
background-color: #2E4C2C; |
||||
} |
||||
|
||||
|
||||
.taskContainer.@TaskType.Bug.ToLower() { |
||||
border-style: dotted; |
||||
border-width: 8px; |
||||
} |
||||
|
||||
.taskContainer.@TaskType.Document.ToLower() { |
||||
border-style: dashed; |
||||
border-width: 2px; |
||||
} |
||||
|
||||
.taskName { |
||||
font-weight: bold; |
||||
grid-area: name; |
||||
font-size: 1.2rem; |
||||
} |
||||
|
||||
.taskDetails { |
||||
font-size: 0.8rem; |
||||
} |
||||
|
||||
.taskCreated { |
||||
grid-area: created; |
||||
} |
||||
|
||||
.taskFinished { |
||||
grid-area: finished; |
||||
} |
||||
|
||||
.taskStatus { |
||||
grid-area: status; |
||||
} |
||||
|
||||
.taskDescription { |
||||
margin-top: 10px; |
||||
grid-area: description; |
||||
} |
||||
|
||||
.taskNotes { |
||||
grid-area: notes; |
||||
} |
||||
|
||||
|
||||
@@media only screen and (max-width: 1025px) { |
||||
.tasksContainer { |
||||
padding: 0px; |
||||
margin-top: 12px; |
||||
padding-top: 12px; |
||||
border-top: 4px solid rgba(0,0,0,0.4) |
||||
} |
||||
|
||||
.taskContainer { |
||||
padding: 2px; |
||||
border: none; |
||||
box-shadow: none; |
||||
} |
||||
|
||||
|
||||
.taskContainer.@StatusType.In_Progress.ToLower() { |
||||
border-color: transparent; |
||||
background-color: transparent; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Todo.ToLower() { |
||||
border-color: transparent; |
||||
background-color: transparent; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Canceled.ToLower() { |
||||
border-color: transparent; |
||||
background-color: transparent; |
||||
} |
||||
|
||||
.taskContainer.@StatusType.Done.ToLower() { |
||||
border-color: transparent; |
||||
background-color: transparent; |
||||
} |
||||
} |
||||
|
||||
</style> |
||||
|
||||
@code { |
||||
|
||||
[Parameter] |
||||
public AgileSprintModel AgileSprint { get; set; } = default!; |
||||
|
||||
} |
||||
@ -1,133 +0,0 @@
|
||||
@page "/changelog" |
||||
@implements IDisposable; |
||||
@inject IGitService GitService; |
||||
|
||||
@inherits BasePage |
||||
|
||||
@inject IDataCollectionService DataCollectionService |
||||
|
||||
|
||||
@layout PageLayout |
||||
|
||||
|
||||
@if (GitService.IsLoaded()) |
||||
{ |
||||
<LayoutMediumContentComponent> |
||||
<WebsiteTitleComponent>Change Log</WebsiteTitleComponent> |
||||
|
||||
<PaperComponent> |
||||
<FormLayoutComponent> |
||||
<FormCheckboxComponent Label="Show Important" |
||||
Info="Only show important patches. Like database updates to the latest game patch." |
||||
Value="@isViewImportant" |
||||
OnChange="OnChangeClicked"> |
||||
</FormCheckboxComponent> |
||||
</FormLayoutComponent> |
||||
</PaperComponent> |
||||
|
||||
<PaperComponent> |
||||
@foreach (var patch in Patches.OrderBy(x => x.Date).Reverse()) |
||||
{ |
||||
@if (!patch.Important.Equals("True") && isViewImportant) |
||||
{ |
||||
continue; |
||||
} |
||||
|
||||
var daysAgo = Math.Floor(DateTime.Now.Subtract(patch.Date).TotalDays); |
||||
|
||||
<div class="patchContainer"> |
||||
<div style="display: flex; justify-content: space-between;"> |
||||
<div style="font-size: 1.2rem; font-weight: bolder; margin-bottom:4px;"> |
||||
@patch.Name |
||||
</div> |
||||
<div> |
||||
@if (daysAgo == 0) |
||||
{ |
||||
<i>Today</i> |
||||
} |
||||
else if (daysAgo < 8) |
||||
{ |
||||
<i>@daysAgo days ago</i> |
||||
} |
||||
else |
||||
{ |
||||
<i>@patch.Date.ToString("dd/MM/yyyy")</i> |
||||
} |
||||
|
||||
</div> |
||||
</div> |
||||
<div> |
||||
@foreach (var change in Changes.FindAll(e => e.GitPatchModelId == patch.Id)) |
||||
{ |
||||
@if (!change.Important.Equals("True") && isViewImportant) |
||||
{ |
||||
continue; |
||||
} |
||||
|
||||
<div style="display: flex; justify-content: space-between; "> |
||||
<div> |
||||
<div> |
||||
<b> |
||||
<span>- @change.Name </span> |
||||
|
||||
@if (change.Commit != CommitType.None) |
||||
{ |
||||
<span>(@change.Commit)</span> |
||||
} |
||||
<span>: </span> |
||||
</b> @((MarkupString)change.Description) |
||||
</div> |
||||
</div> |
||||
</div> |
||||
} |
||||
</div> |
||||
</div> |
||||
} |
||||
|
||||
</PaperComponent> |
||||
</LayoutMediumContentComponent> |
||||
} |
||||
else |
||||
{ |
||||
<LoadingComponent/> |
||||
} |
||||
|
||||
|
||||
@code { |
||||
|
||||
private IEnumerable<GitPatchModel> Patches => GitService.GitPatchModels; |
||||
|
||||
private List<GitChangeModel> Changes => GitService.GitChangeModels; |
||||
|
||||
private bool isViewImportant = true; |
||||
|
||||
|
||||
protected override void OnInitialized() |
||||
{ |
||||
base.OnInitialized(); |
||||
GitService.Subscribe(HasChanged); |
||||
} |
||||
|
||||
void IDisposable.Dispose() |
||||
{ |
||||
GitService.Unsubscribe(HasChanged); |
||||
} |
||||
|
||||
|
||||
void OnChangeClicked(ChangeEventArgs changeEventArgs) |
||||
{ |
||||
isViewImportant = (bool)changeEventArgs.Value!; |
||||
StateHasChanged(); |
||||
} |
||||
|
||||
void HasChanged() |
||||
{ |
||||
StateHasChanged(); |
||||
} |
||||
|
||||
protected override async Task OnInitializedAsync() |
||||
{ |
||||
await GitService.Load(); |
||||
} |
||||
|
||||
} |
||||
@ -1,13 +0,0 @@
|
||||
.patchContainer { |
||||
padding: 16px; |
||||
} |
||||
|
||||
@media only screen and (max-width: 1025px) { |
||||
.patchContainer { |
||||
border: none; |
||||
padding-left: 8px; |
||||
padding-right: 8px; |
||||
padding-top: 16px; |
||||
padding-bottom: 16px; |
||||
} |
||||
} |
||||
@ -1,106 +0,0 @@
|
||||
@layout PageLayout |
||||
@inherits BasePage |
||||
@implements IDisposable |
||||
|
||||
@inject IToastService ToastService |
||||
|
||||
<div style="display:grid; gap: 8px;padding: 16px; height: 94vh; width: 90vw; margin: auto; margin-top: 32px; |
||||
grid-template-columns: 27% 25% 25% 23%; grid-template-rows: auto; |
||||
grid-template-areas: 'loader sand compare compare' ;"> |
||||
|
||||
|
||||
<div style="grid-area: loader; border: 2px solid black; padding: 20px;"> |
||||
Comparision Loader |
||||
<BuildLoaderComponent></BuildLoaderComponent> |
||||
</div> |
||||
|
||||
<div style="grid-area: sand; border: 2px solid black; padding: 20px;"> |
||||
Sand |
||||
<SandComponent></SandComponent> |
||||
</div> |
||||
|
||||
|
||||
<div style="grid-area: compare; border: 2px solid black; padding: 20px;"> |
||||
Comparision Charts |
||||
|
||||
</div> |
||||
|
||||
|
||||
</div> |
||||
|
||||
@code { |
||||
|
||||
[Inject] |
||||
IKeyService KeyService { get; set; } = default!; |
||||
|
||||
[Inject] |
||||
IImmortalSelectionService FilterService { get; set; } = default!; |
||||
|
||||
[Inject] |
||||
IBuildOrderService BuildOrderService { get; set; } = default!; |
||||
|
||||
[Inject] |
||||
IEconomyService EconomyService { get; set; } = default!; |
||||
|
||||
|
||||
[Inject] |
||||
ITimingService TimingService { get; set; } = default!; |
||||
|
||||
|
||||
Dictionary<int, List<EntityModel>> completedEntities = new(); |
||||
|
||||
|
||||
List<EntityModel> entities = EntityModel.GetListOnlyHotkey(); |
||||
|
||||
protected override void OnInitialized() |
||||
{ |
||||
base.OnInitialized(); |
||||
KeyService.Subscribe(HandleClick); |
||||
FilterService.Subscribe(StateHasChanged); |
||||
EconomyService.Subscribe(StateHasChanged); |
||||
TimingService.Subscribe(HandleTimingChanged); |
||||
EconomyService.Calculate(BuildOrderService, TimingService, 0); |
||||
} |
||||
|
||||
void IDisposable.Dispose() |
||||
{ |
||||
KeyService.Unsubscribe(HandleClick); |
||||
FilterService.Unsubscribe(StateHasChanged); |
||||
TimingService.Unsubscribe(StateHasChanged); |
||||
EconomyService.Unsubscribe(StateHasChanged); |
||||
} |
||||
|
||||
|
||||
protected void HandleTimingChanged() |
||||
{ |
||||
EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval()); |
||||
} |
||||
|
||||
protected void HandleClick() |
||||
{ |
||||
var hotkey = KeyService.GetHotkey(); |
||||
var hotkeyGroup = KeyService.GetHotkeyGroup(); |
||||
var isHoldSpace = KeyService.IsHoldingSpace(); |
||||
var faction = FilterService.GetFaction(); |
||||
var immortal = FilterService.GetImmortal(); |
||||
|
||||
if (hotkey == "`") |
||||
{ |
||||
BuildOrderService.RemoveLast(); |
||||
EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval()); |
||||
StateHasChanged(); |
||||
return; |
||||
} |
||||
|
||||
var entity = EntityModel.GetFrom(hotkey!, hotkeyGroup, isHoldSpace, faction, immortal); |
||||
if (entity == null) |
||||
{ |
||||
return; |
||||
} |
||||
if (BuildOrderService.Add(entity, EconomyService)) |
||||
{ |
||||
EconomyService.Calculate(BuildOrderService, TimingService, BuildOrderService.GetLastRequestInterval()); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -1,37 +0,0 @@
|
||||
@implements IDisposable |
||||
|
||||
|
||||
<div> |
||||
<Button Color="Color.Primary" @onclick="OnLoad">Load</Button> |
||||
<button @onclick="OnLoad">Load</button> |
||||
</div> |
||||
|
||||
<div> |
||||
<textarea @bind="buildData" @bind:event="oninput" |
||||
style="background-color: #36393F; width: 330px; height: 400px;"> |
||||
</textarea> |
||||
</div> |
||||
|
||||
@code { |
||||
string buildData = ""; |
||||
|
||||
[Inject] |
||||
IBuildComparisonService BuildComparisionService { get; set; } = default!; |
||||
|
||||
protected override void OnInitialized() |
||||
{ |
||||
base.OnInitialized(); |
||||
BuildComparisionService.Subscribe(StateHasChanged); |
||||
} |
||||
|
||||
void IDisposable.Dispose() |
||||
{ |
||||
BuildComparisionService.Unsubscribe(StateHasChanged); |
||||
} |
||||
|
||||
void OnLoad() |
||||
{ |
||||
BuildComparisionService.LoadJson(buildData); |
||||
} |
||||
|
||||
} |
||||
@ -1,25 +0,0 @@
|
||||
@implements IDisposable |
||||
|
||||
<div> |
||||
<textarea readonly style="background-color: #36393F; width: 330px; height: 400px;"> |
||||
@BuildComparisonService.AsJson() |
||||
</textarea> |
||||
</div> |
||||
|
||||
@code { |
||||
|
||||
[Inject] |
||||
IBuildComparisonService BuildComparisonService { get; set; } = default!; |
||||
|
||||
protected override void OnInitialized() |
||||
{ |
||||
base.OnInitialized(); |
||||
BuildComparisonService.Subscribe(StateHasChanged); |
||||
} |
||||
|
||||
void IDisposable.Dispose() |
||||
{ |
||||
BuildComparisonService.Unsubscribe(StateHasChanged); |
||||
} |
||||
|
||||
} |
||||
@ -1,117 +0,0 @@
|
||||
@layout PageLayout |
||||
@inherits BasePage |
||||
|
||||
@inject IDocumentationService DocumentationService |
||||
@implements IDisposable |
||||
|
||||
@page "/docs" |
||||
|
||||
@if (!DocumentationService.IsLoaded()) |
||||
{ |
||||
<LoadingComponent/> |
||||
} |
||||
else |
||||
{ |
||||
<LayoutMediumContentComponent> |
||||
<PaperComponent> |
||||
@foreach (var docSection in DocumentationService.DocSectionModels) |
||||
{ |
||||
<div class="docSectionContainer"> |
||||
<div class="docSectionTitle">@docSection.Name</div> |
||||
<div class="docContentContainer"> |
||||
@foreach (var docContent in docSection.DocumentationModels) |
||||
{ |
||||
<NavLink class="docContentLink" href="@docContent.GetDocLink()"> |
||||
<div class="docContentName">@docContent.Name</div> |
||||
<div class="docContentDescription">@docContent.Description</div> |
||||
</NavLink> |
||||
} |
||||
</div> |
||||
</div> |
||||
} |
||||
</PaperComponent> |
||||
</LayoutMediumContentComponent> |
||||
} |
||||
|
||||
<style> |
||||
.docSectionContainer { |
||||
width: 100%; |
||||
padding: 8px; |
||||
} |
||||
|
||||
.docSectionTitle { |
||||
font-size: 3rem; |
||||
font-weight: bold; |
||||
text-align: center; |
||||
margin-bottom: 32px; |
||||
} |
||||
|
||||
.docContentContainer { |
||||
display: grid; |
||||
gap: 12px; |
||||
grid-template-columns: 1fr 1fr; |
||||
} |
||||
|
||||
@@media only screen and (max-width: 1025px) { |
||||
.docContentContainer { |
||||
grid-template-columns: 1fr; |
||||
} |
||||
} |
||||
|
||||
.docContentName { |
||||
font-weight: bold; |
||||
font-size: 1.6rem; |
||||
} |
||||
|
||||
.docContentDescription { |
||||
font-weight: normal; |
||||
} |
||||
|
||||
|
||||
.docContentLink { |
||||
background-color: var(--paper); |
||||
border: 1px solid var(--paper-border); |
||||
border-radius: 2px; |
||||
padding-left: 12px; |
||||
padding-right: 12px; |
||||
padding-top: 24px; |
||||
padding-bottom: 24px; |
||||
color: white; |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 12px; |
||||
text-align: center; |
||||
margin-left: 12px; |
||||
margin-right: 12px; |
||||
} |
||||
|
||||
|
||||
.docContentLink:hover { |
||||
background-color: var(--paper-hover); |
||||
border-color: var(--paper-border-hover); |
||||
text-decoration: none; |
||||
box-shadow: 0 4px 6px rgba(0,0,0,0.6); |
||||
transform: translateY(-2px) scale(1.01); |
||||
} |
||||
</style> |
||||
|
||||
|
||||
@code { |
||||
|
||||
[Parameter] |
||||
public string? Text { get; set; } |
||||
|
||||
protected override void OnInitialized() |
||||
{ |
||||
base.OnInitialized(); |
||||
DocumentationService.Subscribe(StateHasChanged); |
||||
|
||||
DocumentationService.Load(); |
||||
} |
||||
|
||||
void IDisposable.Dispose() |
||||
{ |
||||
DocumentationService.Unsubscribe(StateHasChanged); |
||||
} |
||||
|
||||
} |
||||
@ -1,123 +0,0 @@
|
||||
@layout PageLayout |
||||
@inherits BasePage |
||||
|
||||
@inject IDocumentationService DocumentationService |
||||
|
||||
@implements IDisposable |
||||
|
||||
@page "/docs/{href1}/{href2?}/{href3?}/{href4?}/{href5?}" |
||||
|
||||
@if (!DocumentationService.IsLoaded()) |
||||
{ |
||||
<LoadingComponent/> |
||||
} |
||||
else |
||||
{ |
||||
<LayoutWithSidebarComponent> |
||||
<Sidebar> |
||||
<DocumentNavComponent |
||||
Connections="DocumentationService.DocConnectionModels" |
||||
Documents="DocumentationService.DocContentModels"/> |
||||
</Sidebar> |
||||
<Content> |
||||
<PaperComponent> |
||||
@foreach (var doc in DocumentationService.DocContentModels) |
||||
{ |
||||
if (!doc.Href.Equals(Href)) |
||||
{ |
||||
continue; |
||||
} |
||||
<DocumentComponent DocContentModel="doc"/> |
||||
} |
||||
</PaperComponent> |
||||
</Content> |
||||
</LayoutWithSidebarComponent> |
||||
} |
||||
|
||||
<style> |
||||
pre code { |
||||
color: white; |
||||
|
||||
} |
||||
|
||||
h1 { |
||||
display: block; |
||||
font-size: 2em; |
||||
margin-top: 0.67em; |
||||
margin-bottom: 0.67em; |
||||
margin-left: 0; |
||||
margin-right: 0; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
h2 { |
||||
display: block; |
||||
font-size: 1.5em; |
||||
margin-top: 0.83em; |
||||
margin-bottom: 0.83em; |
||||
margin-left: 0; |
||||
margin-right: 0; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
li { |
||||
display: list-item; |
||||
} |
||||
|
||||
p { |
||||
display: block; |
||||
margin-top: 1em; |
||||
margin-bottom: 1em; |
||||
margin-left: 0; |
||||
margin-right: 0; |
||||
} |
||||
|
||||
ul { |
||||
display: block; |
||||
list-style-type: disc; |
||||
margin-top: 1em; |
||||
margin-bottom: 1em; |
||||
margin-left: 0; |
||||
margin-right: 0; |
||||
padding-left: 40px; |
||||
} |
||||
|
||||
pre { |
||||
background: black; |
||||
padding: 2px; |
||||
} |
||||
</style> |
||||
|
||||
@code { |
||||
|
||||
[Parameter] |
||||
public string? Href1 { get; set; } |
||||
|
||||
[Parameter] |
||||
public string? Href2 { get; set; } |
||||
|
||||
[Parameter] |
||||
public string? Href3 { get; set; } |
||||
|
||||
[Parameter] |
||||
public string? Href4 { get; set; } |
||||
|
||||
[Parameter] |
||||
public string? Href5 { get; set; } |
||||
|
||||
private string Href => Href5 ?? Href4 ?? Href3 ?? Href2 ?? Href1 ?? ""; |
||||
|
||||
protected override void OnInitialized() |
||||
{ |
||||
base.OnInitialized(); |
||||
DocumentationService.Subscribe(StateHasChanged); |
||||
|
||||
DocumentationService.Load(); |
||||
} |
||||
|
||||
void IDisposable.Dispose() |
||||
{ |
||||
DocumentationService.Unsubscribe(StateHasChanged); |
||||
} |
||||
|
||||
} |
||||
@ -1,70 +0,0 @@
|
||||
@if (Document!.DocumentationModels.Count > 0) |
||||
{ |
||||
<div class="docInnerNavContainer"> |
||||
@foreach (var innerDoc in Document.DocumentationModels) |
||||
{ |
||||
var linkStyle = $"docInnerNavButton inner_{Layers}"; |
||||
<NavLink class="@linkStyle" href="@innerDoc.GetDocLink()">@innerDoc.Name</NavLink> |
||||
<DocumentInnerNavComponent Document="@innerDoc" Layers="@IncrementLayers()"/> |
||||
} |
||||
</div> |
||||
} |
||||
|
||||
<style> |
||||
|
||||
.docInnerNavContainer { |
||||
display: flex; |
||||
flex-direction: column; |
||||
} |
||||
|
||||
.docInnerNavButton a { |
||||
color: white; |
||||
} |
||||
|
||||
.docInnerNavButton a:hover { |
||||
color: white; |
||||
} |
||||
|
||||
.docInnerNavButton { |
||||
padding: 8px; |
||||
margin-left: 8px; |
||||
color: white; |
||||
} |
||||
|
||||
.inner_1 { |
||||
margin-left: 8px; |
||||
} |
||||
|
||||
.inner_2 { |
||||
margin-left: 16px; |
||||
} |
||||
|
||||
.inner_3 { |
||||
margin-left: 24px; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
</style> |
||||
|
||||
@code { |
||||
|
||||
[Parameter] |
||||
public DocContentModel? Document { get; set; } = default!; |
||||
|
||||
[Parameter] |
||||
public int Layers { get; set; } = 1; |
||||
|
||||
public int IncrementLayers() |
||||
{ |
||||
return Layers + 1; |
||||
} |
||||
|
||||
|
||||
private string GetLink(DocContentModel doc) |
||||
{ |
||||
return $"docs/{doc.Href}"; |
||||
} |
||||
|
||||
} |
||||
@ -1,47 +0,0 @@
|
||||
<div class="docNavContainer"> |
||||
@foreach (var doc in Documents) |
||||
{ |
||||
if (doc.Parent == null) |
||||
{ |
||||
<NavLink class="docNavButton" href="@doc.GetDocLink()">@doc.Name</NavLink> |
||||
<DocumentInnerNavComponent Document="@doc"/> |
||||
} |
||||
} |
||||
</div> |
||||
|
||||
<style> |
||||
.docNavContainer { |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 8px; |
||||
} |
||||
|
||||
.docNavButton a { |
||||
color: white; |
||||
} |
||||
|
||||
.docNavButton a:hover { |
||||
color: white; |
||||
} |
||||
|
||||
.docNavButton { |
||||
padding: 8px; |
||||
color: white; |
||||
} |
||||
|
||||
</style> |
||||
|
||||
@code { |
||||
|
||||
[Parameter] |
||||
public List<DocContentModel> Documents { get; set; } = default!; |
||||
|
||||
[Parameter] |
||||
public List<DocConnectionModel> Connections { get; set; } = default!; |
||||
|
||||
private string GetLink(DocContentModel doc) |
||||
{ |
||||
return $"docs/{doc.Href}"; |
||||
} |
||||
|
||||
} |
||||
@ -1,88 +0,0 @@
|
||||
@page "/makingof" |
||||
|
||||
@inherits BasePage |
||||
|
||||
@inject IDataCollectionService DataCollectionService |
||||
|
||||
@layout PageLayout |
||||
|
||||
<LayoutLargeContentComponent> |
||||
<WebsiteTitleComponent>Making Of</WebsiteTitleComponent> |
||||
|
||||
<AlertComponent Type="@SeverityType.Warning"> |
||||
<Title>Under Construction</Title> |
||||
<Message>This page is still being worked on. It will list the tech and design choices made for this website. It's is strictly for educational and reference purposes, and it has nothing to do with IMMORTAL: Gates of Pyre.</Message> |
||||
</AlertComponent> |
||||
|
||||
<ContentDividerComponent></ContentDividerComponent> |
||||
|
||||
<FormLayoutComponent> |
||||
<FormDisplayComponent Label="Tech Stack"> |
||||
<Display>Blazor (C# and HTML)</Display> |
||||
</FormDisplayComponent> |
||||
|
||||
<FormDisplayComponent Label="Stack Details"> |
||||
<Display>This is a Static Single Page Application hosted on Azure.</Display> |
||||
</FormDisplayComponent> |
||||
</FormLayoutComponent> |
||||
|
||||
<ContentDividerComponent></ContentDividerComponent> |
||||
|
||||
<MakingOfColours></MakingOfColours> |
||||
|
||||
<ContentDividerComponent></ContentDividerComponent> |
||||
|
||||
<DevOnlyComponent> |
||||
<MakingOfSectionComponent Title="Empty"> |
||||
<MakingOfComponent> |
||||
<Title> |
||||
Empty |
||||
</Title> |
||||
<Description> |
||||
Empty |
||||
</Description> |
||||
<Example> |
||||
Empty |
||||
</Example> |
||||
<Usage> |
||||
<CodeComponent>Empty</CodeComponent> |
||||
</Usage> |
||||
<Code> |
||||
<CodeComponent>Empty</CodeComponent> |
||||
</Code> |
||||
</MakingOfComponent> |
||||
|
||||
</MakingOfSectionComponent> |
||||
</DevOnlyComponent> |
||||
|
||||
<DevOnlyComponent> |
||||
<MakingOfSectionComponent Title="Dialogs"> |
||||
<MakingOfDialogs></MakingOfDialogs> |
||||
</MakingOfSectionComponent> |
||||
</DevOnlyComponent> |
||||
|
||||
<DevOnlyComponent> |
||||
|
||||
<FormLayoutComponent> |
||||
<FormEscapeCodeComponent></FormEscapeCodeComponent> |
||||
</FormLayoutComponent> |
||||
</DevOnlyComponent> |
||||
|
||||
<MakingOfSectionComponent Title="Displays"> |
||||
<MakingOfDisplays></MakingOfDisplays> |
||||
</MakingOfSectionComponent> |
||||
|
||||
<DevOnlyComponent> |
||||
<MakingOfSectionComponent Title="Navigation"> |
||||
<MakingOfNavigation></MakingOfNavigation> |
||||
</MakingOfSectionComponent> |
||||
</DevOnlyComponent> |
||||
|
||||
<MakingOfSectionComponent Title="Feedback"> |
||||
<MakingOfFeedback></MakingOfFeedback> |
||||
</MakingOfSectionComponent> |
||||
|
||||
<MakingOfSectionComponent Title="Forms"> |
||||
<MakingOfForms></MakingOfForms> |
||||
</MakingOfSectionComponent> |
||||
</LayoutLargeContentComponent> |
||||
@ -1,188 +0,0 @@
|
||||
<div>Colors</div> |
||||
|
||||
<div class="colorContainer"> |
||||
<CodeComponent> |
||||
--accent: @accent; |
||||
--primary: @primary; |
||||
--primary-border: @primary_border; |
||||
--primary-hover: @primary_hover; |
||||
--primary-border-hover: @primary_border_hover; |
||||
--background: @background; |
||||
--secondary: @secondary; |
||||
--secondary-hover: @secondary_hover; |
||||
--secondary-border-hover: @secondary_border_hover; |
||||
--paper: @paper; |
||||
--paper-border: @paper_border; |
||||
--info: @info; |
||||
--info-border: @info_border; |
||||
--info-secondary: @info_secondary; |
||||
--info-secondary-border: @info_secondary_border; |
||||
</CodeComponent> |
||||
<br/> |
||||
<div class="color accent"> |
||||
<div>Accent</div> |
||||
<div> |
||||
Base: <input type="color" value="@accent" @onchange="e => accent = e.Value!.ToString()!"/> |
||||
</div> |
||||
</div> |
||||
<div class="color primary"> |
||||
<div>Primary</div> |
||||
<div> |
||||
Base: <input type="color" value="@primary" @onchange="e => primary = e.Value!.ToString()!"/> |
||||
</div> |
||||
<div> |
||||
Border: <input type="color" value="@primary_border" @onchange="e => primary_border = e.Value!.ToString()!"/> |
||||
</div> |
||||
<div> |
||||
Hover Base: <input type="color" value="@primary_hover" @onchange="e => primary_hover = e.Value!.ToString()!"/> |
||||
</div> |
||||
<div> |
||||
Hover Border: <input type="color" value="@primary_border_hover" @onchange="e => primary_border_hover = e.Value!.ToString()!"/> |
||||
</div> |
||||
</div> |
||||
<div class="color secondary"> |
||||
<div>Secondary</div> |
||||
<div> |
||||
Base: <input type="color" value="@secondary" @onchange="e => secondary = e.Value!.ToString()!"/> |
||||
</div> |
||||
<div> |
||||
Hover Base: <input type="color" value="@secondary_hover" @onchange="e => secondary_hover = e.Value!.ToString()!"/> |
||||
</div> |
||||
<div> |
||||
Hover Border: <input type="color" value="@secondary_border_hover" @onchange="e => secondary_border_hover = e.Value!.ToString()!"/> |
||||
</div> |
||||
</div> |
||||
<div class="color paper"> |
||||
<div>Paper</div> |
||||
<div> |
||||
Base: <input type="color" value="@paper" @onchange="e => paper = e.Value!.ToString()!"/> |
||||
</div> |
||||
<div> |
||||
Border: <input type="color" value="@paper_border" @onchange="e => paper_border = e.Value!.ToString()!"/> |
||||
</div> |
||||
</div> |
||||
<div class="color background"> |
||||
<div>Background</div> |
||||
<div> |
||||
Base: <input type="color" value="@background" @onchange="e => background = e.Value!.ToString()!"/> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="color info"> |
||||
<div>Info</div> |
||||
<div> |
||||
Base: <input type="color" value="@info" @onchange="e => info = e.Value!.ToString()!"/> |
||||
</div> |
||||
<div> |
||||
Border: <input type="color" value="@info_border" @onchange="e => info_border = e.Value!.ToString()!"/> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="color info_secondary"> |
||||
<div>Info Secondary</div> |
||||
<div> |
||||
Base: <input type="color" value="@info_secondary" @onchange="e => info_secondary = e.Value!.ToString()!"/> |
||||
</div> |
||||
<div> |
||||
Border: <input type="color" value="@info_secondary_border" @onchange="e => info_secondary_border = e.Value!.ToString()!"/> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<style> |
||||
:root { |
||||
--accent: @accent; |
||||
--primary: @primary; |
||||
--primary-border: @primary_border; |
||||
--primary-hover: @primary_hover; |
||||
--primary-border-hover: @primary_border_hover; |
||||
--background: @background; |
||||
--secondary: @secondary; |
||||
--secondary-hover: @secondary_hover; |
||||
--secondary-border-hover: @secondary_border_hover; |
||||
--paper: @paper; |
||||
--paper-border: @paper_border; |
||||
--info: @info; |
||||
--info-border: @info_border; |
||||
|
||||
--info-secondary: @info_secondary; |
||||
--info-secondary-border: @info_secondary_border; |
||||
} |
||||
|
||||
.colorContainer { |
||||
display: flex; |
||||
flex-direction: column; |
||||
} |
||||
|
||||
.color { |
||||
padding: 12px; |
||||
display: flex; |
||||
flex-direction: row; |
||||
gap: 32px; |
||||
align-items: center; |
||||
} |
||||
|
||||
.accent { |
||||
background-color: var(--accent); |
||||
} |
||||
|
||||
.primary { |
||||
background-color: var(--primary); |
||||
border: 1px solid var(--primary-border); |
||||
} |
||||
|
||||
.primary:hover { |
||||
background-color: var(--primary-hover); |
||||
border-color: var(--primary-border-hover); |
||||
} |
||||
|
||||
.secondary { |
||||
background-color: var(--secondary); |
||||
border: 1px solid var(--secondary); |
||||
} |
||||
|
||||
.secondary:hover { |
||||
background-color: var(--secondary-hover); |
||||
border-color: var(--secondary-border-hover); |
||||
} |
||||
|
||||
.paper { |
||||
background-color: var(--paper); |
||||
border: 4px solid var(--paper-border); |
||||
} |
||||
|
||||
.background { |
||||
background-color: var(--background); |
||||
} |
||||
|
||||
.info { |
||||
background-color: var(--info); |
||||
border: 1px solid var(--info-border); |
||||
} |
||||
|
||||
.info_secondary { |
||||
background-color: var(--info-secondary); |
||||
border: 1px solid var(--info-secondary-border); |
||||
} |
||||
|
||||
</style> |
||||
|
||||
@code { |
||||
string accent = "#432462"; |
||||
string primary = "#4308a3"; |
||||
string primary_border = "#2c0b62"; |
||||
string primary_hover = "#5e00f7"; |
||||
string primary_border_hover = "#a168ff"; |
||||
string background = "#161618"; |
||||
string secondary = "#23133e"; |
||||
string secondary_hover = "#2a0070"; |
||||
string secondary_border_hover = "#a168ff"; |
||||
string paper = "#252526"; |
||||
string paper_border = "#151516"; |
||||
string info = "#451376"; |
||||
string info_border = "#210b36"; |
||||
string info_secondary = "#4c3e59"; |
||||
string info_secondary_border = "#7e58a2"; |
||||
|
||||
|
||||
} |
||||
@ -1,49 +0,0 @@
|
||||
.colorContainer { |
||||
display: flex; |
||||
flex-direction: column; |
||||
} |
||||
|
||||
.color { |
||||
padding: 12px; |
||||
display: flex; |
||||
flex-direction: row; |
||||
gap: 32px; |
||||
align-items: center; |
||||
} |
||||
|
||||
.accent { |
||||
background-color: var(--accent); |
||||
} |
||||
|
||||
.primary { |
||||
background-color: var(--primary); |
||||
border: 1px solid var(--primary-border); |
||||
} |
||||
|
||||
.primary:hover { |
||||
background-color: var(--primary-hover); |
||||
border-color: var(--primary-border-hover); |
||||
} |
||||
|
||||
.secondary { |
||||
background-color: var(--secondary); |
||||
border: 1px solid var(--secondary); |
||||
} |
||||
|
||||
.secondary:hover { |
||||
background-color: var(--secondary-hover); |
||||
border-color: var(--secondary-border-hover); |
||||
} |
||||
|
||||
.paper { |
||||
background-color: var(--paper); |
||||
border: 4px solid var(--paper-border); |
||||
} |
||||
|
||||
.background { |
||||
background-color: var(--background); |
||||
} |
||||
|
||||
.info { |
||||
background-color: var(--info); |
||||
} |
||||
@ -1,16 +0,0 @@
|
||||
<MakingOfComponent> |
||||
<Title>Dialog</Title> |
||||
<Description>...</Description> |
||||
<Example> |
||||
</Example> |
||||
<Usage> |
||||
//TODO |
||||
</Usage> |
||||
<Code> |
||||
//TODO |
||||
</Code> |
||||
</MakingOfComponent> |
||||
|
||||
@code { |
||||
|
||||
} |
||||
@ -1,188 +0,0 @@
|
||||
<MakingOfComponent> |
||||
<Title> |
||||
Entity Display |
||||
</Title> |
||||
<Description> |
||||
Display element for holding entity information. |
||||
</Description> |
||||
<Example> |
||||
<LayoutRowComponent> |
||||
<EntityDisplayComponent Title="Example Entity Info"> |
||||
<div> |
||||
Example Entity Content |
||||
</div> |
||||
|
||||
@for (var i = 0; i < 1; i++) |
||||
{ |
||||
<div> |
||||
-@i Example Entity Content |
||||
</div> |
||||
} |
||||
|
||||
<div> |
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. |
||||
</div> |
||||
</EntityDisplayComponent> |
||||
<EntityDisplayComponent Title="Example Entity Info"> |
||||
<div> |
||||
Example Entity Content |
||||
</div> |
||||
|
||||
@for (var i = 0; i < 2; i++) |
||||
{ |
||||
<div> |
||||
-@i Example Entity Content |
||||
</div> |
||||
} |
||||
|
||||
<div> |
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation. |
||||
</div> |
||||
</EntityDisplayComponent> |
||||
<EntityDisplayComponent Title="Example Entity Info"> |
||||
<div> |
||||
Example Entity Content |
||||
</div> |
||||
|
||||
@for (var i = 0; i < 1; i++) |
||||
{ |
||||
<div> |
||||
-@i Example Entity Content |
||||
</div> |
||||
} |
||||
|
||||
<div> |
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. |
||||
</div> |
||||
</EntityDisplayComponent> |
||||
</LayoutRowComponent> |
||||
</Example> |
||||
<Usage> |
||||
<CodeComponent> |
||||
<LayoutRowComponent> |
||||
<EntityDisplayComponent Title="Example Entity Info"> |
||||
<div> |
||||
Example Entity Content |
||||
</div> |
||||
|
||||
@@for (var i = 0; i < 1; i++) { |
||||
<div> |
||||
-@@i Example Entity Content |
||||
</div> |
||||
} |
||||
|
||||
<div> |
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. |
||||
</div> |
||||
</EntityDisplayComponent> |
||||
<EntityDisplayComponent Title="Example Entity Info"> |
||||
<div> |
||||
Example Entity Content |
||||
</div> |
||||
|
||||
@@for (var i = 0; i < 2; i++) { |
||||
<div> |
||||
-@@i Example Entity Content |
||||
</div> |
||||
} |
||||
|
||||
<div> |
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation. |
||||
</div> |
||||
</EntityDisplayComponent> |
||||
<EntityDisplayComponent Title="Example Entity Info"> |
||||
<div> |
||||
Example Entity Content |
||||
</div> |
||||
|
||||
@@for (var i = 0; i < 1; i++) { |
||||
<div> |
||||
-@@i Example Entity Content |
||||
</div> |
||||
} |
||||
|
||||
<div> |
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. |
||||
</div> |
||||
</EntityDisplayComponent> |
||||
</LayoutRowComponent> |
||||
</CodeComponent> |
||||
</Usage> |
||||
<Code> |
||||
<CodeComponent> |
||||
<div class="entityDisplaySection"> |
||||
<div class="entityDisplayHeader"> |
||||
<div class="entityDisplayTitle"> |
||||
@@Title |
||||
</div> |
||||
<div class="entityDisplayBorder"> |
||||
</div> |
||||
</div> |
||||
@@ChildContent |
||||
</div> |
||||
|
||||
<style> |
||||
.entityDisplaySection { |
||||
position: relative; |
||||
padding: 8px; |
||||
display: flex; |
||||
gap: 12px; |
||||
flex-direction: column; |
||||
margin-top: 14px; |
||||
margin-top: 20px; |
||||
padding: 12px; |
||||
background-color: var(--info); |
||||
border-top-right-radius: 12px; |
||||
border-bottom-left-radius: 2px; |
||||
border-bottom-right-radius: 2px; |
||||
} |
||||
|
||||
.entityDisplayHeader { |
||||
bottom: 100%; |
||||
position: absolute; |
||||
white-space: pre; |
||||
width: 100%; |
||||
line-height: 0px; |
||||
right: 0px; |
||||
top: -4px; |
||||
display: flex; |
||||
} |
||||
|
||||
.entityDisplayTitle { |
||||
font-weight: 800; |
||||
font-size: 1.4rem; |
||||
padding-right: 8px; |
||||
text-shadow: 3px 0 0 var(--info), -3px 0 0 var(--info), 0 3px 0 var(--info), 0 -3px 0 var(--info), 2px 2px var(--info), -2px -2px 0 var(--info), 2px -2px 0 var(--info), -2px 2px 0 var(--info); |
||||
} |
||||
|
||||
@@@@media only screen and (max-width: 1025px) { |
||||
.entityDisplayHeader { |
||||
position: inherit; |
||||
width: 100%; |
||||
margin: 0px; |
||||
} |
||||
|
||||
.entityDisplaySection { |
||||
position: inherit; |
||||
width: 100%; |
||||
margin: 0px; |
||||
max-width: none; |
||||
border-top-right-radius: 0px; |
||||
border-bottom-left-radius: 0px; |
||||
border-bottom-right-radius: 0px; |
||||
} |
||||
|
||||
.entityDisplayTitle { |
||||
position: inherit; |
||||
margin: 0px; |
||||
} |
||||
} |
||||
</style> |
||||
|
||||
@@code { |
||||
[Parameter] public RenderFragment ChildContent { get; set; } |
||||
[Parameter] public string Title { get; set; } |
||||
} |
||||
</CodeComponent> |
||||
</Code> |
||||
</MakingOfComponent> |
||||
@ -1,58 +0,0 @@
|
||||
<WebsiteTitleComponent> |
||||
Feedback |
||||
</WebsiteTitleComponent> |
||||
|
||||
<MakingOfComponent> |
||||
<Title> |
||||
Loading |
||||
</Title> |
||||
<Description> |
||||
Indicates a component is being loaded (a component that relies on JSON) |
||||
</Description> |
||||
<Example> |
||||
<div style="width: 300px; height: 450px;"> |
||||
|
||||
<LoadingComponent/> |
||||
</div> |
||||
</Example> |
||||
<Usage> |
||||
<CodeComponent>Empty</CodeComponent> |
||||
</Usage> |
||||
<Code> |
||||
<CodeComponent>Empty</CodeComponent> |
||||
</Code> |
||||
</MakingOfComponent> |
||||
|
||||
|
||||
<MakingOfComponent> |
||||
<Title>Alert Message</Title> |
||||
<Description>Used to convey important information to the viewer. Comes in Yellow (Warning), Blue (Information), Red (Error), and Green (Success). Mostly used to warn viewers of pre-alpha or incomplete content being viewed.</Description> |
||||
<Example> |
||||
<AlertComponent Type="@SeverityType.Warning"> |
||||
<Title>Warning Alert Title</Title> |
||||
<Message>Warning Alert Message</Message> |
||||
</AlertComponent> |
||||
<AlertComponent Type="@SeverityType.Information"> |
||||
<Title>Information Alert Title</Title> |
||||
<Message>Information Alert Message</Message> |
||||
</AlertComponent> |
||||
<AlertComponent Type="@SeverityType.Error"> |
||||
<Title>Error Alert Title</Title> |
||||
<Message>Error Alert Message</Message> |
||||
</AlertComponent> |
||||
<AlertComponent Type="@SeverityType.Success"> |
||||
<Title>Succsess Alert Title</Title> |
||||
<Message>Succsess Alert Message</Message> |
||||
</AlertComponent> |
||||
</Example> |
||||
<Usage> |
||||
<CodeComponent><AlertComponent Type=SeverityType.Warning><br/> <Title>Warning Alert Title</Title><br/> <Message>Warning Alert Message</Message><br/></AlertComponent><br/><AlertComponent Type=SeverityType.Information><br/> <Title>Information Alert Title</Title><br/> <Message>Information Alert Message</Message><br/></AlertComponent><br/><AlertComponent Type=SeverityType.Error><br/> <Title>Error Alert Title</Title><br/> <Message>Error Alert Message</Message><br/></AlertComponent><br/><AlertComponent Type=SeverityType.Success><br/> <Title>Succsess Alert Title</Title><br/> <Message>Succsess Alert Message</Message><br/></AlertComponent><br/></CodeComponent> |
||||
</Usage> |
||||
<Code> |
||||
<CodeComponent>@@using Components.Pages.Utils<br/><br/><div class="alertContainer @@Type.ToString().ToLower()"><br/> @@if (Title != null) {<br/> <div class="alertTitle"><br/> @@Title<br/> </div><br/> }<br/> @@if (Message != null) {<br/> <div><br/> @@Message<br/> </div><br/><br/> }<br/></div><br/><style><br/> .alertContainer {<br/> border: 4px solid;<br/> border-radius: 4px;<br/> padding: 16px;<br/> display: flex;<br/> flex-direction: column;<br/> justify-items: stretch;<br/> width: 100%;<br/> }<br/><br/> .alertContainer.@@SeverityType.Warning.ToString().ToLower() {<br/> border-color: #2a2000;<br/> background-color: #ffbf0029;<br/> }<br/><br/> .alertContainer.@@SeverityType.Error.ToString().ToLower() {<br/> border-color: #290102;<br/> background-color: #4C2C33;<br/> }<br/><br/> .alertContainer.@@SeverityType.Information.ToString().ToLower() {<br/> border-color: #030129;<br/> background-color: #2c3a4c;<br/> }<br/><br/> .alertContainer.@@SeverityType.Success.ToString().ToLower() {<br/> border-color: #042901;<br/> background-color: #2E4C2C;<br/> }<br/><br/> .alertTitle {<br/> font-weight: 800;<br/> }<br/><br/></style><br/>@@code {<br/> [Parameter] public RenderFragment? Title { get; set; }<br/> [Parameter] public RenderFragment? Message { get; set; }<br/> [Parameter] public SeverityType Type { get; set; } = SeverityType.Warning;<br/>}</CodeComponent> |
||||
</Code> |
||||
</MakingOfComponent> |
||||
|
||||
@code { |
||||
|
||||
} |
||||
@ -1,35 +0,0 @@
|
||||
<MakingOfComponent> |
||||
<Title>Form Text</Title> |
||||
<Description>Add Text Input</Description> |
||||
<Example> |
||||
<FormLayoutComponent> |
||||
<FormTextComponent Label="Label Text" Info="Info Text" Placeholder="Placeholder Text..." Value="Value Text"/> |
||||
<FormTextAreaComponent Label="Label Text" Info="Info Text" Placeholder="Placeholder Text..." Value="Value Text"/> |
||||
</FormLayoutComponent> |
||||
</Example> |
||||
<Usage> |
||||
//TODO |
||||
</Usage> |
||||
<Code> |
||||
//TODO |
||||
</Code> |
||||
</MakingOfComponent> |
||||
|
||||
|
||||
<MakingOfComponent> |
||||
<Title>Form Area</Title> |
||||
<Description>Add Text Body Input</Description> |
||||
<Example> |
||||
<FormTextAreaComponent Label="Label Text" Info="Info Text" Placeholder="Placeholder Text..." Value="Value Text"/> |
||||
</Example> |
||||
<Usage> |
||||
//TODO |
||||
</Usage> |
||||
<Code> |
||||
//TODO |
||||
</Code> |
||||
</MakingOfComponent> |
||||
|
||||
@code { |
||||
|
||||
} |
||||
@ -1,80 +0,0 @@
|
||||
<MakingOfComponent> |
||||
<Title> |
||||
Nav Section with Nav Links |
||||
</Title> |
||||
<Description> |
||||
Group specfic webpages. Each webpage link is used to navigate to that specific webpage. If on the webpage, the link turns dark gray. It can be clicked again to leave the page and return to home. |
||||
</Description> |
||||
<Example> |
||||
<DesktopNavSectionComponent Section=@(new WebSectionModel { Name = "Example Section" }) |
||||
Children=@(new List<WebPageModel> { new() { Name = "Example Page", Href = "immortal-makingof", IsPrivate = "False" }, new() { Name = "Database", Href = "immortal-database", IsPrivate = "False" } })> |
||||
</DesktopNavSectionComponent> |
||||
</Example> |
||||
<Usage> |
||||
<CodeComponent> |
||||
<DesktopNavSectionComponent Section=@@(new WebSectionModel{Name = "Example Section"}) |
||||
Children=@@(new List<WebPageModel>{new WebPageModel{Name="Example Page", Href = "immortal-makingof", IsPrivate = false}, new WebPageModel{Name="Database", Href = "immortal-database", IsPrivate = false}})> |
||||
</DesktopNavSectionComponent> |
||||
</CodeComponent> |
||||
</Usage> |
||||
<Code> |
||||
<CodeComponent> |
||||
@@using Model.Website; |
||||
@@using Model.Website.Enums; |
||||
|
||||
<div class="sectionContainer"> |
||||
<div class="sectionHeader"> |
||||
<div class="sectionTitle"> |
||||
@@Section.Name |
||||
</div> |
||||
</div> |
||||
|
||||
@@foreach (var childPage in Children) { |
||||
if (childPage.IsPrivate) { |
||||
continue; |
||||
} |
||||
<NavLinkComponent Page=childPage></NavLinkComponent> |
||||
} |
||||
</div> |
||||
|
||||
<style> |
||||
.sectionContainer { |
||||
display: flex; |
||||
flex-direction: column; |
||||
gap: 4px; |
||||
justify-content: flex-start; |
||||
position: relative; |
||||
margin-top: 12px; |
||||
padding: 18px; |
||||
width: 300px; |
||||
margin-left: 4px; |
||||
} |
||||
|
||||
.sectionHeader { |
||||
bottom: 100%; |
||||
position: absolute; |
||||
top: 0px; |
||||
left: -8px; |
||||
padding-right: 12px; |
||||
padding-left: 4px; |
||||
width: 100%; |
||||
display: flex; |
||||
line-height: 0px; |
||||
} |
||||
|
||||
.sectionTitle { |
||||
font-weight: bold; |
||||
padding-right: 8px; |
||||
margin-top: -2px; |
||||
white-space: pre; |
||||
} |
||||
</style> |
||||
|
||||
@@code { |
||||
[Parameter] public WebSectionModel? Section { get; set; } |
||||
[Parameter] public List<WebPageModel>? Children { get; set; } |
||||
} |
||||
|
||||
</CodeComponent> |
||||
</Code> |
||||
</MakingOfComponent> |
||||
@ -1,19 +0,0 @@
|
||||
<PanelComponent> |
||||
<div class="roadMapTitle">@RoadMap.Name</div> |
||||
<div>@((MarkupString)RoadMap.Description)</div> |
||||
</PanelComponent> |
||||
|
||||
<style> |
||||
|
||||
.roadMapTitle { |
||||
font-weight: 800; |
||||
font-size: 1.2rem; |
||||
} |
||||
</style> |
||||
|
||||
@code { |
||||
|
||||
[Parameter] |
||||
public ImmortalRoadMapModel? RoadMap { get; set; } |
||||
|
||||
} |
||||
@ -1,32 +0,0 @@
|
||||
@layout PageLayout |
||||
|
||||
@inherits BasePage |
||||
|
||||
@inject IDataCollectionService DataCollectionService |
||||
|
||||
@page "/roadmap" |
||||
|
||||
<LayoutMediumContentComponent> |
||||
<WebsiteTitleComponent>Road Map</WebsiteTitleComponent> |
||||
|
||||
<div class="roadMapsContainer"> |
||||
@foreach (var roadMap in data) |
||||
{ |
||||
<RoadMapComponent RoadMap=roadMap/> |
||||
} |
||||
</div> |
||||
</LayoutMediumContentComponent> |
||||
|
||||
<style> |
||||
.roadMapsContainer { |
||||
display: flex; |
||||
gap: 20px; |
||||
flex-wrap: wrap; |
||||
align-items: stretch; |
||||
justify-content: center; |
||||
} |
||||
</style> |
||||
|
||||
@code { |
||||
readonly List<ImmortalRoadMapModel> data = ImmortalRoadMapModel.Data; |
||||
} |
||||
@ -1 +1 @@
|
||||
[{"Id":1,"Name":"Tools","Description":"Tools Stuff","Order":1,"IsPrivate":"False","WebPageModels":[]},{"Id":2,"Name":"Resources","Description":"Resources Stuff","Order":2,"IsPrivate":"False","WebPageModels":[]},{"Id":3,"Name":"General","Description":"About Stuff","Order":3,"IsPrivate":"False","WebPageModels":[]},{"Id":4,"Name":"Development","Description":"Development Stuff","Order":4,"IsPrivate":"False","WebPageModels":[]},{"Id":5,"Name":"Settings","Description":"Settings Stuff","Order":5,"IsPrivate":"False","WebPageModels":[]}] |
||||
[{"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":[]}] |
||||
Loading…
Reference in new issue