From b3f3f5e98127fccae6b97801034bdd915d9c3818 Mon Sep 17 00:00:00 2001 From: rameel Date: Sun, 30 Aug 2026 12:41:13 +0500 Subject: [PATCH] Simplify HTMX config serialization --- src/Ramstack.HtmxToolkit/HtmxConfig.cs | 8 ++++++++ src/Ramstack.HtmxToolkit/HtmxV1Config.cs | 5 +++++ src/Ramstack.HtmxToolkit/HtmxV2Config.cs | 5 +++++ src/Ramstack.HtmxToolkit/HtmxV4Config.cs | 5 +++++ .../TagHelpers/HtmxConfigTagHelper.cs | 9 +-------- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/Ramstack.HtmxToolkit/HtmxConfig.cs b/src/Ramstack.HtmxToolkit/HtmxConfig.cs index 721c014..2c3f229 100644 --- a/src/Ramstack.HtmxToolkit/HtmxConfig.cs +++ b/src/Ramstack.HtmxToolkit/HtmxConfig.cs @@ -19,4 +19,12 @@ public abstract class HtmxConfig /// The target major version of HTMX that this configuration applies to. internal HtmxConfig(HtmxTargetVersion version) => TargetVersion = version; + + /// + /// Serializes this configuration to JSON. + /// + /// + /// A string containing this configuration serialized as JSON. + /// + internal abstract string ToJson(); } diff --git a/src/Ramstack.HtmxToolkit/HtmxV1Config.cs b/src/Ramstack.HtmxToolkit/HtmxV1Config.cs index f6cdd65..bac0afa 100644 --- a/src/Ramstack.HtmxToolkit/HtmxV1Config.cs +++ b/src/Ramstack.HtmxToolkit/HtmxV1Config.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using System.Text.Json.Serialization; namespace Ramstack.HtmxToolkit; @@ -197,4 +198,8 @@ public sealed class HtmxV1Config() : HtmxConfig(HtmxTargetVersion.V1) [JsonPropertyName("triggerSpecsCache")] [JsonConverter(typeof(HtmxTriggerSpecsCacheJsonConverter))] public bool? TriggerSpecsCacheEnabled { get; set; } + + /// + internal override string ToJson() => + JsonSerializer.Serialize(this, HtmxConfigJsonSerializerContext.Default.HtmxV1Config); } diff --git a/src/Ramstack.HtmxToolkit/HtmxV2Config.cs b/src/Ramstack.HtmxToolkit/HtmxV2Config.cs index a743a60..1789c60 100644 --- a/src/Ramstack.HtmxToolkit/HtmxV2Config.cs +++ b/src/Ramstack.HtmxToolkit/HtmxV2Config.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using System.Text.Json.Serialization; using Ramstack.HtmxToolkit.TagHelpers; @@ -229,4 +230,8 @@ public sealed class HtmxV2Config() : HtmxConfig(HtmxTargetVersion.V2) /// Defaults to . /// public bool? ReportValidityOfForms { get; set; } + + /// + internal override string ToJson() => + JsonSerializer.Serialize(this, HtmxConfigJsonSerializerContext.Default.HtmxV2Config); } diff --git a/src/Ramstack.HtmxToolkit/HtmxV4Config.cs b/src/Ramstack.HtmxToolkit/HtmxV4Config.cs index ecf2b28..cd5756b 100644 --- a/src/Ramstack.HtmxToolkit/HtmxV4Config.cs +++ b/src/Ramstack.HtmxToolkit/HtmxV4Config.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using System.Text.Json.Serialization; namespace Ramstack.HtmxToolkit; @@ -145,4 +146,8 @@ public sealed class HtmxV4Config() : HtmxConfig(HtmxTargetVersion.V4) /// at runtime and supports wildcard patterns such as "4xx" and "44x". /// public string[]? NoSwap { get; set; } + + /// + internal override string ToJson() => + JsonSerializer.Serialize(this, HtmxConfigJsonSerializerContext.Default.HtmxV4Config); } diff --git a/src/Ramstack.HtmxToolkit/TagHelpers/HtmxConfigTagHelper.cs b/src/Ramstack.HtmxToolkit/TagHelpers/HtmxConfigTagHelper.cs index c32c924..1a020b2 100644 --- a/src/Ramstack.HtmxToolkit/TagHelpers/HtmxConfigTagHelper.cs +++ b/src/Ramstack.HtmxToolkit/TagHelpers/HtmxConfigTagHelper.cs @@ -1,5 +1,3 @@ -using System.Text.Json; - using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.Rendering; @@ -40,12 +38,7 @@ public override Task ProcessAsync(TagHelperContext context, TagHelperOutput outp output.TagMode = TagMode.SelfClosing; output.Attributes.SetAttribute("name", "htmx-config"); - var json = options.Value.HtmxConfig switch - { - HtmxV1Config value => JsonSerializer.Serialize(value, HtmxConfigJsonSerializerContext.Default.HtmxV1Config), - HtmxV2Config value => JsonSerializer.Serialize(value, HtmxConfigJsonSerializerContext.Default.HtmxV2Config), - var value => JsonSerializer.Serialize((HtmxV4Config)value, HtmxConfigJsonSerializerContext.Default.HtmxV4Config) - }; + var json = options.Value.HtmxConfig.ToJson(); output.Attributes.SetAttribute( new TagHelperAttribute("content", new HtmlString(json), HtmlAttributeValueStyle.SingleQuotes));