Skip to content

Commit f372489

Browse files
authored
Merge pull request #4 from tomc128/web-ui
Project restructure & new web UI
2 parents cdbf69a + ac83b85 commit f372489

File tree

67 files changed

+955
-59
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+955
-59
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net7.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
<PackageId>BooleanExpressionParser.CLI</PackageId>
9+
<Version>1.2.0</Version>
10+
<Authors>Tom Chapman</Authors>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="Spectre.Console" Version="0.45.0" />
15+
<PackageReference Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
16+
</ItemGroup>
17+
18+
<ItemGroup>
19+
<ProjectReference Include="..\BooleanExpressionParser\BooleanExpressionParser.csproj" />
20+
</ItemGroup>
21+
22+
</Project>

BooleanExpressionParser/Formatters/DisplayFormatter.cs renamed to BooleanExpressionParser.CLI/Formatters/DisplayFormatter.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
using System.Globalization;
22
using System.Text;
3+
using BooleanExpressionParser.Formatters;
4+
using BooleanExpressionParser.Tokens;
35
using Spectre.Console;
46

5-
namespace BooleanExpressionParser.Formatter;
7+
namespace BooleanExpressionParser.CLI.Formatters;
68

7-
enum ColourMode
9+
public enum ColourMode
810
{
911
None,
1012
Foreground,
1113
Background
1214
}
1315

14-
15-
class DisplayFormatter : IFormatter
16+
public class DisplayFormatter : IFormatter
1617
{
1718
private static int FinalPadding = 2;
1819

@@ -128,7 +129,7 @@ static string PadBoth(string source, int totalLength, char paddingChar = ' ')
128129
}
129130

130131

131-
public String JoinTruthTables(params string[] tables)
132+
public string JoinTruthTables(params string[] tables)
132133
{
133134
var sb = new StringBuilder();
134135

BooleanExpressionParser/Program.cs renamed to BooleanExpressionParser.CLI/Program.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
using System.CommandLine;
1+
using System.CommandLine;
22
using System.Text;
3-
using BooleanExpressionParser.Formatter;
3+
using System;
44
using Spectre.Console;
5+
using BooleanExpressionParser.CLI.Formatters;
6+
using BooleanExpressionParser.Formatters;
57

6-
namespace BooleanExpressionParser;
8+
namespace BooleanExpressionParser.CLI;
79

810

911
enum OutputType
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"profiles": {
3+
"BooleanExpressionParser.CLI - table": {
4+
"commandName": "Project",
5+
"commandLineArgs": "table"
6+
},
7+
"BooleanExpressionParser.CLI - convert": {
8+
"commandName": "Project",
9+
"commandLineArgs": "convert"
10+
}
11+
}
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<Router AppAssembly="@typeof(App).Assembly">
2+
<Found Context="routeData">
3+
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
4+
<FocusOnNavigate RouteData="@routeData" Selector="h1" />
5+
</Found>
6+
<NotFound>
7+
<PageTitle>Not found</PageTitle>
8+
<LayoutView Layout="@typeof(MainLayout)">
9+
<p role="alert">Sorry, there's nothing at this address.</p>
10+
</LayoutView>
11+
</NotFound>
12+
</Router>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net7.0</TargetFramework>
5+
<Nullable>annotations</Nullable>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
8+
<PackageId>BooleanExpressionParser.Web.Client</PackageId>
9+
<Version>1.0.0</Version>
10+
<Authors>Tom Chapman</Authors>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.1" />
15+
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.1" PrivateAssets="all" />
16+
<PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" />
17+
</ItemGroup>
18+
19+
<ItemGroup>
20+
<ProjectReference Include="..\Shared\BooleanExpressionParser.Web.Shared.csproj" />
21+
<ProjectReference Include="..\..\BooleanExpressionParser\BooleanExpressionParser.csproj" />
22+
</ItemGroup>
23+
24+
<ItemGroup>
25+
<ServiceWorker Include="wwwroot\service-worker.js" PublishedContent="wwwroot\service-worker.published.js" />
26+
</ItemGroup>
27+
28+
</Project>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<input placeholder="Enter expression" @oninput="OnInputChanged" @bind="expression"/>
2+
<button @onclick="OnButtonClicked">@ButtonLabel</button>
3+
4+
5+
@code {
6+
[Parameter]
7+
public string ButtonLabel {get; set;}
8+
9+
public string? expression;
10+
11+
[Parameter]
12+
public EventCallback<string> ButtonClicked { get; set; }
13+
14+
[Parameter]
15+
public EventCallback<string> ExpressionChanged { get; set; }
16+
17+
private Task OnButtonClicked()
18+
{
19+
return ButtonClicked.InvokeAsync(expression);
20+
}
21+
22+
private Task OnInputChanged(ChangeEventArgs args)
23+
{
24+
return ExpressionChanged.InvokeAsync(args.Value.ToString());
25+
}
26+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<div class="container">
2+
<h3>Boolean Expression Parser</h3>
3+
<nav>
4+
<ul>
5+
<li>
6+
<NavLink class="nav-link" href="/" Match="NavLinkMatch.All">Home</NavLink>
7+
</li>
8+
<li>
9+
<NavLink class="nav-link" href="/truth-table" Match="NavLinkMatch.All">Truth Table Generator</NavLink>
10+
</li>
11+
<li>
12+
<NavLink class="nav-link" href="/evaluator" Match="NavLinkMatch.All">Evaluator</NavLink>
13+
</li>
14+
<li>
15+
<NavLink class="nav-link" href="/notation-converter" Match="NavLinkMatch.All">Notation Converter</NavLink>
16+
</li>
17+
</ul>
18+
</nav>
19+
</div>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
.container {
2+
display: flex;
3+
justify-content: space-between;
4+
padding: 2rem;
5+
}
6+
7+
.container ul {
8+
display: flex;
9+
gap: 2rem;
10+
}
11+
12+
.container ul li {
13+
list-style: none;
14+
}
15+
16+
.container ul li ::deep .nav-link {
17+
text-decoration: none;
18+
color: black;
19+
}
20+
21+
.container ul li ::deep .nav-link.active {
22+
font-weight: bold;
23+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
@foreach (var item in Ast.Variables)
2+
{
3+
<span>@item</span>
4+
<input size="3" @bind="inputs[item]" />
5+
}
6+
7+
<button @onclick="OnButtonClicked">Evaluate</button>
8+
9+
10+
@code {
11+
[Parameter]
12+
public Ast Ast { get; set; }
13+
14+
[Parameter]
15+
public EventCallback<Dictionary<string, string?>> EvaluateClicked { get; set; }
16+
17+
private Dictionary<string, string?> inputs = new();
18+
19+
private Task OnButtonClicked()
20+
{
21+
return EvaluateClicked.InvokeAsync(inputs);
22+
}
23+
24+
protected override void OnParametersSet()
25+
{
26+
base.OnParametersSet();
27+
28+
foreach (var item in Ast.Variables)
29+
{
30+
if (!inputs.ContainsKey(item)) inputs.Add(item, null);
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)