@page "/" @inject OpenBirchConsole console @inject IJSRuntime jsRuntime @inject NavigationManager nav Home
Welcome to
OpenBirch!!!
@for (int i = 0; i < console.history.Count; i++) { int temp = i; @((console.history[temp].source == ConsoleSource.User) ? ">" : "#") @console.history[temp].text }
@code { public string inputField = " "; public bool hasInteracted = false; // Has the user interacted with the input field? private Task AutoTypingTask; 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" }; private void print(string e) { Console.WriteLine(e); } protected override async Task OnInitializedAsync() { AutoTypingTask = StartAutoTyping(); } private async void OnInputClicked() { hasInteracted = true; await AutoTypingTask; nav.NavigateTo("openbirch"); } async void OnKeyDown(KeyboardEventArgs args) { if (args.Key == "Enter") { await Task.Delay(100); sendCommand(inputField); StateHasChanged(); } } private async void sendCommand(string command) { inputField = ""; await console.pushCommand(command); await InvokeAsync(StateHasChanged); } const int typingDelay = 200; private async Task StartAutoTyping() { await Task.Delay(1000); foreach (string example in exampleInputs) { foreach (char letter in example) { inputField += letter; await InvokeAsync(StateHasChanged); // Trigger UI update await Task.Delay(200); // Non-blocking delay // 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; } inputField = ""; // Clear input and let user input await InvokeAsync(StateHasChanged); return; earlyExit:; } sendCommand(inputField); await Task.Delay(500); } } }