From f80914daef996007d3bd7a1123cca8c889c6a07d Mon Sep 17 00:00:00 2001 From: "Daniel J. Summers" Date: Fri, 11 Apr 2025 21:27:12 -0400 Subject: [PATCH] Add template tweaks to docfx site --- bitbadger-doc.png | Bin 0 -> 12624 bytes doc-template/public/main.css | 4 ++++ doc-template/public/main.js | 10 ++++++++++ docfx.json | 14 ++++++++++---- docs/getting-started.md | 34 +++++++++++++++++----------------- 5 files changed, 41 insertions(+), 21 deletions(-) create mode 100644 bitbadger-doc.png create mode 100644 doc-template/public/main.css create mode 100644 doc-template/public/main.js diff --git a/bitbadger-doc.png b/bitbadger-doc.png new file mode 100644 index 0000000000000000000000000000000000000000..22b1fe2e111d43569dcb24ac686659cf9ccbe42d GIT binary patch literal 12624 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 D_HYw> literal 0 HcmV?d00001 diff --git a/doc-template/public/main.css b/doc-template/public/main.css new file mode 100644 index 0000000..cfa8c03 --- /dev/null +++ b/doc-template/public/main.css @@ -0,0 +1,4 @@ +article h2 { + border-bottom: solid 1px gray; + margin-bottom: 1rem; +} diff --git a/doc-template/public/main.js b/doc-template/public/main.js new file mode 100644 index 0000000..e60362e --- /dev/null +++ b/doc-template/public/main.js @@ -0,0 +1,10 @@ +export default { + defaultTheme: "auto", + iconLinks: [ + { + icon: "git", + href: "https://git.bitbadger.solutions/bit-badger/BitBadger.Documents", + title: "Source Repository" + } + ] +} \ No newline at end of file diff --git a/docfx.json b/docfx.json index 312c800..1f586b1 100644 --- a/docfx.json +++ b/docfx.json @@ -12,7 +12,10 @@ ] } ], - "dest": "api" + "dest": "api", + "properties": { + "TargetFramework": "net9.0" + } } ], "build": { @@ -29,20 +32,23 @@ "resource": [ { "files": [ - "images/**" + "bitbadger-doc.png" ] } ], "output": "_site", "template": [ "default", - "modern" + "modern", + "doc-template" ], "globalMetadata": { "_appName": "BitBadger.Documents", "_appTitle": "BitBadger.Documents", + "_appLogoPath": "bitbadger-doc.png", + "_appFooter": "Hand-crafted documentation created with docfx by Bit Badger Solutions", "_enableSearch": true, "pdf": false } } -} \ No newline at end of file +} diff --git a/docs/getting-started.md b/docs/getting-started.md index 496f920..3767ac0 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -37,16 +37,16 @@ Both PostgreSQL and SQLite use the standard ADO.NET connection string format ([` ```csharp // C#, SQLite // ... - var config = ...; // parsed IConfiguration - Sqlite.Configuration.UseConnectionString(config.GetConnectionString("SQLite")); +var config = ...; // parsed IConfiguration +Sqlite.Configuration.UseConnectionString(config.GetConnectionString("SQLite")); // ... ``` ```fsharp // F#, SQLite // ... - let config = ...; // parsed IConfiguration - Configuration.useConnectionString (config.GetConnectionString("SQLite")) +let config = ...; // parsed IConfiguration +Configuration.useConnectionString (config.GetConnectionString("SQLite")) // ... ``` @@ -55,18 +55,18 @@ For PostgreSQL, the library needs an `NpgsqlDataSource` instead. There is a buil ```csharp // C#, PostgreSQL // ... - var config = ...; // parsed IConfiguration - var dataSource = new NpgsqlDataSourceBuilder(config.GetConnectionString("Postgres")).Build(); - Postgres.Configuration.UseDataSource(dataSource); +var config = ...; // parsed IConfiguration +var dataSource = new NpgsqlDataSourceBuilder(config.GetConnectionString("Postgres")).Build(); +Postgres.Configuration.UseDataSource(dataSource); // ... ``` ```fsharp // F#, PostgreSQL // ... - let config = ...; // parsed IConfiguration - let dataSource = new NpgsqlDataSourceBuilder(config.GetConnectionString("Postgres")).Build() - Configuration.useDataSource dataSource +let config = ...; // parsed IConfiguration +let dataSource = new NpgsqlDataSourceBuilder(config.GetConnectionString("Postgres")).Build() +Configuration.useDataSource dataSource // ... ``` @@ -80,17 +80,17 @@ For PostgreSQL, the library needs an `NpgsqlDataSource` instead. There is a buil ```csharp // C#, PostgreSQL - builder.Services.AddScoped(svcProvider => - Postgres.Configuration.DataSource().OpenConnection()); +builder.Services.AddScoped(svcProvider => + Postgres.Configuration.DataSource().OpenConnection()); // C#, SQLite - builder.Services.AddScoped(svcProvider => Sqlite.Configuration.DbConn()); +builder.Services.AddScoped(svcProvider => Sqlite.Configuration.DbConn()); ``` ```fsharp // F#, PostgreSQL - let _ = builder.Services.AddScoped Configuration.dataSource().OpenConnection()) +let _ = builder.Services.AddScoped Configuration.dataSource().OpenConnection()) // F#, SQLite - let _ = builder.Services.AddScoped(fun sp -> Configuration.dbConn ()) +let _ = builder.Services.AddScoped(fun sp -> Configuration.dbConn ()) ``` After registering, this connection will be available on the request context and can be injected in the constructor for things like Razor Pages or MVC Controllers. @@ -145,7 +145,7 @@ await Definition.EnsureTable("hotel"); await Definition.EnsureDocumentIndex("hotel", DocumentIndex.Full); await Definition.EnsureTable("room"); // parameters are table name, index name, and fields to be indexed -await Definition.EnsureFieldIndex("room", "hotel_id", new[] { "HotelId" }); +await Definition.EnsureFieldIndex("room", "hotel_id", ["HotelId"]); await Definition.EnsureDocumentIndex("room", DocumentIndex.Optimized); ``` @@ -168,7 +168,7 @@ Let's create hotel and room tables, then index rooms by hotel ID and room number // C#, SQLite await Definition.EnsureTable("hotel"); await Definition.EnsureTable("room"); -await Definition.EnsureIndex("room", "hotel_and_nbr", new[] { "HotelId", "RoomNumber" }); +await Definition.EnsureIndex("room", "hotel_and_nbr", ["HotelId", "RoomNumber"]); ``` ```fsharp