From 5bab63e0ca4c4a3a39e0f4aee4e238000992aaac Mon Sep 17 00:00:00 2001 From: "Daniel J. Summers" Date: Wed, 23 Feb 2022 21:33:03 -0500 Subject: [PATCH] Add attributes and headers for v1.7.0 --- src/Directory.Build.props | 4 ++-- src/Htmx.Tests/Tests.fs | 11 +++++++++++ src/Htmx/Htmx.fs | 4 ++++ src/ViewEngine.Htmx.Tests/Tests.fs | 8 ++++++++ src/ViewEngine.Htmx/Htmx.fs | 4 ++++ 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 0fce98c..560d16f 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,8 +1,8 @@  - 1.6.1 - Initial production-ready release + 1.7.0 + Support new attributes/headers in htmx 1.7.0 danieljsummers Bit Badger Solutions https://github.com/bit-badger/Giraffe.Htmx diff --git a/src/Htmx.Tests/Tests.fs b/src/Htmx.Tests/Tests.fs index e026770..80fb933 100644 --- a/src/Htmx.Tests/Tests.fs +++ b/src/Htmx.Tests/Tests.fs @@ -217,6 +217,17 @@ module HandlerTests = Assert.Equal ("/a-new-url", dic.["HX-Push"].[0]) } + [] + let ``withHxNoPush succeeds`` () = + let ctx = Substitute.For () + let dic = HeaderDictionary () + ctx.Response.Headers.ReturnsForAnyArgs dic |> ignore + task { + let! _ = withHxNoPush next ctx + Assert.True (dic.ContainsKey "HX-Push") + Assert.Equal ("false", dic.["HX-Push"].[0]) + } + [] let ``withHxRedirect succeeds`` () = let ctx = Substitute.For () diff --git a/src/Htmx/Htmx.fs b/src/Htmx/Htmx.fs index 1880852..51489a5 100644 --- a/src/Htmx/Htmx.fs +++ b/src/Htmx/Htmx.fs @@ -66,6 +66,10 @@ module Handlers = let withHxPush : string -> HttpHandler = setHttpHeader "HX-Push" + // Explicitly do not push a new URL into the history stack + let withHxNoPush : HttpHandler = + toLowerBool false |> withHxPush + /// Can be used to do a client-side redirect to a new location let withHxRedirect : string -> HttpHandler = setHttpHeader "HX-Redirect" diff --git a/src/ViewEngine.Htmx.Tests/Tests.fs b/src/ViewEngine.Htmx.Tests/Tests.fs index 4e94258..a96d268 100644 --- a/src/ViewEngine.Htmx.Tests/Tests.fs +++ b/src/ViewEngine.Htmx.Tests/Tests.fs @@ -344,6 +344,10 @@ module Attributes = let ``_hxDisable succeeds`` () = p [ _hxDisable ] [] |> shouldRender """

""" + [] + let ``_hxDisinherit succeeds`` () = + strong [ _hxDisinherit "*" ] [] |> shouldRender """""" + [] let ``_hxEncoding succeeds`` () = form [ _hxEncoding "utf-7" ] [] |> shouldRender """
""" @@ -425,6 +429,10 @@ module Attributes = let ``_hxSwapOob succeeds`` () = li [ _hxSwapOob "true" ] [] |> shouldRender """
  • """ + [] + let ``_hxSync succeeds`` () = + nav [ _hxSync "closest form:abort" ] [] |> shouldRender """""" + [] let ``_hxTarget succeeds`` () = header [ _hxTarget "#somewhereElse" ] [] |> shouldRender """
    """ diff --git a/src/ViewEngine.Htmx/Htmx.fs b/src/ViewEngine.Htmx/Htmx.fs index 945dd01..27ad7e7 100644 --- a/src/ViewEngine.Htmx/Htmx.fs +++ b/src/ViewEngine.Htmx/Htmx.fs @@ -164,6 +164,8 @@ module HtmxAttrs = let _hxDelete = attr "hx-delete" /// Disables htmx processing for the given node and any children nodes let _hxDisable = flag "hx-disable" + /// Disinherit all ("*") or specific htmx attributes + let _hxDisinherit = attr "hx-disinherit" /// Changes the request encoding type let _hxEncoding = attr "hx-encoding" /// Extensions to use for this element @@ -204,6 +206,8 @@ module HtmxAttrs = let _hxSwap = attr "hx-swap" /// Marks content in a response as being "Out of Band", i.e. swapped somewhere other than the target let _hxSwapOob = attr "hx-swap-oob" + /// Synchronize events based on another element + let _hxSync = attr "hx-sync" /// Specifies the target element to be swapped let _hxTarget = attr "hx-target" /// Specifies the event that triggers the request