deprived-main-website/OpenBirchWebsite/Pages/Home.razor

153 lines
4.9 KiB
Plaintext
Raw Permalink Normal View History

2024-07-13 03:21:35 +02:00
@page "/"
2024-07-15 04:08:10 +02:00
@inject OpenBirchConsole console
2024-07-14 00:18:54 +02:00
@inject IJSRuntime jsRuntime
2024-07-14 16:24:54 +02:00
@inject NavigationManager nav
2024-07-13 03:21:35 +02:00
<PageTitle>Home</PageTitle>
2024-07-19 15:52:08 +02:00
<MudStack Row="true">
<div class ="d-flex justify-center" style="position: absolute; height: 85vh; width: 100vw; overflow: hidden; z-index: -1;">
<MudImage Src="/videos/DifferentialEquation.gif" ObjectFit="ObjectFit.Cover" Alt="Background video" Style="filter:blur(10px);" Class="rounded-0 w-100 overflow-hidden" />
</div>
<MudSpacer />
<div class="pt-6 z-10">
<MudText Align="Align.Center" Typo="Typo.h2">Welcome to<br /><b>OpenBirch!!!</b></MudText>
<MudPaper Class="rounded-lg mt-6">
<div class="reverse-stack-direction pa-4" style="width: 25vw; height: 40vh; min-width: 20rem;">
<div class="px-2 h-100 reverse-scroll-start rounded-t-lg" style="background-color: #191724; overflow-y: auto; overflow-x: hidden;">
<ConsoleText />
</div>
<div>
<MudTextField id="console-input" Class="rounded-b-xl" @bind-Value="inputField" Variant="Variant.Outlined" @onclick="OnInputClicked" OnKeyDown="OnKeyDown" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.ArrowForwardIos"></MudTextField>
</div>
2024-07-14 02:13:46 +02:00
</div>
</MudPaper>
2024-07-13 04:51:36 +02:00
</div>
2024-07-19 15:52:08 +02:00
<MudSpacer/>
<MudSpacer/>
<MudSpacer/>
</MudStack>
<MudStack style='margin-top: 15vh; width: 100%; height: 100vh; position: relative; background: linear-gradient(180deg, #101018, #1a1a27 2%); z-index: 1'>
2024-07-22 04:07:14 +02:00
<MudContainer Class="d-flex justify-center">
2024-07-19 15:52:08 +02:00
<MudStack>
2024-07-22 04:07:14 +02:00
<MudStack Class="pt-10" Row="true">
<MudStack>
<MudText Typo="Typo.h2">What is this?</MudText>
<MudText Typo="Typo.body1">This is an open-source solution for your academic math software.</MudText>
</MudStack>
<MudImage Width="100" Src="/images/literally-scam-v0-ssol5c3n5ibd1.webp" />
</MudStack>
<MudStack Class="pt-10" Row="true">
<MudImage Width="100" Src="/images/literally-scam-v0-ssol5c3n5ibd1.webp" />
<MudStack>
<MudText Typo="Typo.h2">Why did we make this?</MudText>
<MudText Typo="Typo.body1">Because linux bad and can't run .exe, and other programs are expendsive.</MudText>
</MudStack>
</MudStack>
2024-07-19 15:52:08 +02:00
</MudStack>
2024-07-22 04:07:14 +02:00
</MudContainer>
2024-07-19 15:52:08 +02:00
</MudStack>
2024-07-13 04:51:36 +02:00
2024-07-22 04:07:14 +02:00
<Footer />
2024-07-13 04:51:36 +02:00
@code {
2024-07-19 15:52:08 +02:00
public string inputField = "";
2024-07-13 04:51:36 +02:00
public bool hasInteracted = false; // Has the user interacted with the input field?
2024-07-19 15:52:08 +02:00
private Task? AutoTypingTask;
2024-07-13 04:51:36 +02:00
2024-07-14 02:13:46 +02:00
readonly string[] exampleInputs = {
"2+2",
"69*420+50",
"sin(2+4)",
"sqrt(9)",
"nroot(27, 3)",
"f(x):=2*x",
"f(5)",
"pi",
"e",
"myvar := 5",
"15 + myvar",
"myfunctionvar := f",
"myfunctionvar(10)",
"d/dx x",
"d/dx x^2",
"d/dx 69*x^2",
"d/dx sin(x)*x^2"
2024-07-14 02:13:46 +02:00
};
private void print(string e)
{
Console.WriteLine(e);
}
2024-07-15 04:08:10 +02:00
protected override async Task OnInitializedAsync()
2024-07-14 02:13:46 +02:00
{
2024-07-19 15:52:08 +02:00
if (!GlobalVariables.HasAutoTypingEd)
AutoTypingTask = StartAutoTyping();
GlobalVariables.HasAutoTypingEd = true;
2024-07-15 04:08:10 +02:00
}
2024-07-14 02:13:46 +02:00
2024-07-15 04:08:10 +02:00
private async void OnInputClicked()
2024-07-13 04:51:36 +02:00
{
2024-07-15 04:08:10 +02:00
hasInteracted = true;
2024-07-19 15:52:08 +02:00
if (AutoTypingTask != null)
await AutoTypingTask;
2024-07-15 04:08:10 +02:00
nav.NavigateTo("openbirch");
2024-07-13 04:51:36 +02:00
}
2024-07-14 02:13:46 +02:00
async void OnKeyDown(KeyboardEventArgs args)
{
if (args.Key == "Enter")
{
await Task.Delay(100);
2024-07-15 04:08:10 +02:00
sendCommand(inputField);
2024-07-14 02:13:46 +02:00
StateHasChanged();
}
}
2024-07-15 04:08:10 +02:00
private async void sendCommand(string command)
2024-07-14 02:13:46 +02:00
{
2024-07-15 04:08:10 +02:00
inputField = "";
await console.pushCommand(command);
2024-07-14 02:13:46 +02:00
await InvokeAsync(StateHasChanged);
}
const int typingDelay = 200;
2024-07-15 04:08:10 +02:00
private async Task StartAutoTyping()
2024-07-13 04:51:36 +02:00
{
await Task.Delay(1000);
2024-07-14 02:13:46 +02:00
foreach (string example in exampleInputs)
2024-07-13 04:51:36 +02:00
{
2024-07-14 02:13:46 +02:00
foreach (char letter in example)
{
inputField += letter;
await InvokeAsync(StateHasChanged); // Trigger UI update
await Task.Delay(200); // Non-blocking delay
2024-07-15 04:08:10 +02:00
// Makes it check if user inputted while waiting
const int waitTime = 10;
int waitedTime = 0;
while (waitedTime < typingDelay)
{
await Task.Delay(waitTime);
waitedTime += waitTime;
if (!hasInteracted) goto earlyExit;
}
2024-07-13 04:51:36 +02:00
2024-07-14 02:13:46 +02:00
inputField = ""; // Clear input and let user input
await InvokeAsync(StateHasChanged);
return;
2024-07-15 04:08:10 +02:00
earlyExit:;
2024-07-14 02:13:46 +02:00
}
2024-07-13 04:51:36 +02:00
2024-07-15 04:08:10 +02:00
sendCommand(inputField);
2024-07-14 02:13:46 +02:00
await Task.Delay(500);
2024-07-13 04:51:36 +02:00
}
}
}