JeyDotC.JustCs 1.0.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package JeyDotC.JustCs --version 1.0.3
NuGet\Install-Package JeyDotC.JustCs -Version 1.0.3
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="JeyDotC.JustCs" Version="1.0.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add JeyDotC.JustCs --version 1.0.3
#r "nuget: JeyDotC.JustCs, 1.0.3"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install JeyDotC.JustCs as a Cake Addin
#addin nuget:?package=JeyDotC.JustCs&version=1.0.3

// Install JeyDotC.JustCs as a Cake Tool
#tool nuget:?package=JeyDotC.JustCs&version=1.0.3

JustCs

Forget about templating, use just C#!

Create your page:

public class MyPage : ComponentElement
{
    protected override Element Render(IElementAttributes props) =>
        _<Html>(
            _<Head>(
                _<Title>("Hello World")
            ),
            _<Body>(
                _<H1>("Hello from JustCs!")
            )
        );
}

Serve your page:

[ApiController]
[Route("[controller]")]
public class MyPageController : ControllerBase
{
    [HttpGet]
    public IView Index() => new View<MyPage>();
}

Installation

dotnet add package JeyDotC.JustCs --version 1.0.3
dotnet add package JeyDotC.JustCs.Mvc --version 1.0.0

Setup

At your Startup.cs file, add this to your controller options:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers(options =>
    {
        options.WithJustCs(); //<-- This allows API controllers to render JustCs HTML views.
    });
}

Basic Usage

Create a component

Just create a class that extends ComponentElement (or ComponentElement<>) and implement the Render method.

public class MyPage : ComponentElement
{
    protected override Element Render(IElementAttributes props) =>
        _<Html>(
            _<Head>(
                _<Title>("Hello World")
            ),
            _<Body>(
                _<H1>("Hello from JustCs!")
                _<Form>(new Attrs { Method = "POST", Action = "/login" },
                    _<Label>(new Attrs { For = "username" }, "Username"),
                    _<Input>(new Attrs { Id = "username", Name = "username", Type = "text", Placeholder = "User Name" }),

                    _<Label>(new Attrs { For = "password" }, "Password"),
                    _<Input>(new Attrs { Id = "username", Name = "username", Type = "password" }),

                    _<Button>(new Attrs { Type = "submit" }, "Login"),
                )
            )
        );
}

Return the view as a response

At your controller, just create a View<> instance which will serve as the HTTP response.

[ApiController]
[Route("[controller]")]
public class MyPageController : ControllerBase
{
    [HttpGet]
    public IView Index() => new View<MyPage>();
}

The View class, since it serves as the response, which means you can set the status code and headers too.

[ApiController]
[Route("[controller]")]
public class MyPageController : ControllerBase
{
    [HttpGet]
    public IView Index() => new View<MyPage>();

    [HttpGet]
    public IView Error() => new View<MyErrorPage>(null, HttpStatusCode.ServerError)
                    .WithHeader("X-Some-Header", "some-value");
}
Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net5.0

    • No dependencies.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on JeyDotC.JustCs:

Package Downloads
JeyDotC.JustCs.Mvc

Library to render HTML using just C#.

JeyDotC.JustCs.Testing

A small set of unit test helpers.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.2.0 475 11/2/2022
1.1.0 410 3/18/2022
1.0.3 399 2/8/2022
1.0.2 411 1/28/2022
1.0.1 415 1/25/2022
1.0.0 536 1/22/2022

V1.0.3 Added the lodash (_) property to Attrs so user can add extra attributes without inheriting the record.
           Added conditional rendering via ValueTuple<boolean, Element> implicit conversion.
V1.0.2 Switched Attrs and AriaAttrs from class to record.
V1.0.1 Added support for WAI ARIA attributes.