Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8fd6af8c26 | |||
| 69a4034661 | |||
| 5aa9408e60 | |||
| 98f53a5e53 | |||
| 7798314fb8 | |||
| 50c66435e8 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -5,3 +5,4 @@
|
||||
.ionide
|
||||
.idea
|
||||
*.user
|
||||
.vscode
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/// Common definitions shared between attribute values and response headers
|
||||
/// Common definitions shared between attribute values and response headers
|
||||
[<AutoOpen>]
|
||||
module Giraffe.Htmx.Common
|
||||
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
|
||||
This package contains common code shared between [`Giraffe.Htmx`](https://www.nuget.org/packages/Giraffe.Htmx) and [`Giraffe.ViewEngine.Htmx`](https://www.nuget.org/packages/Giraffe.ViewEngine.Htmx), and will be automatically installed when you install either one.
|
||||
|
||||
**htmx version: 1.8.6**
|
||||
**htmx version: 1.9.6**
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
|
||||
<VersionPrefix>1.8.6</VersionPrefix>
|
||||
<PackageReleaseNotes>Update script tags for htmx 1.8.6</PackageReleaseNotes>
|
||||
<VersionPrefix>1.9.6</VersionPrefix>
|
||||
<PackageReleaseNotes>Add support for hx-disabled-elt attribute; update script tags to pull htmx 1.9.6</PackageReleaseNotes>
|
||||
<Authors>danieljsummers</Authors>
|
||||
<Company>Bit Badger Solutions</Company>
|
||||
<PackageProjectUrl>https://github.com/bit-badger/Giraffe.Htmx</PackageProjectUrl>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
module Giraffe.Htmx
|
||||
module Giraffe.Htmx
|
||||
|
||||
open Microsoft.AspNetCore.Http
|
||||
open Microsoft.Extensions.Primitives
|
||||
@@ -94,6 +94,10 @@ module Handlers =
|
||||
let withHxNoReplaceUrl : HttpHandler =
|
||||
toLowerBool false |> withHxReplaceUrl
|
||||
|
||||
/// Override which portion of the response will be swapped into the target document
|
||||
let withHxReselect : string -> HttpHandler =
|
||||
setHttpHeader "HX-Reselect"
|
||||
|
||||
/// Override the `hx-swap` attribute from the initiating element
|
||||
let withHxReswap : string -> HttpHandler =
|
||||
setHttpHeader "HX-Reswap"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
This package enables server-side support for [htmx](https://htmx.org) within [Giraffe](https://giraffe.wiki) and ASP.NET's `HttpContext`.
|
||||
|
||||
**htmx version: 1.8.6**
|
||||
**htmx version: 1.9.6**
|
||||
|
||||
### Setup
|
||||
|
||||
|
||||
@@ -265,6 +265,14 @@ let handlers =
|
||||
Expect.isTrue (dic.ContainsKey "HX-Replace-Url") "The HX-Replace-Url header should be present"
|
||||
Expect.equal dic["HX-Replace-Url"].[0] "false" "The HX-Replace-Url value was incorrect"
|
||||
}
|
||||
testTask "withHxReselect succeeds" {
|
||||
let ctx = Substitute.For<HttpContext> ()
|
||||
let dic = HeaderDictionary ()
|
||||
ctx.Response.Headers.ReturnsForAnyArgs dic |> ignore
|
||||
let! _ = withHxReselect "#test" next ctx
|
||||
Expect.isTrue (dic.ContainsKey "HX-Reselect") "The HX-Reselect header should be present"
|
||||
Expect.equal dic["HX-Reselect"].[0] "#test" "The HX-Reselect value was incorrect"
|
||||
}
|
||||
testTask "withHxReswap succeeds" {
|
||||
let ctx = Substitute.For<HttpContext> ()
|
||||
let dic = HeaderDictionary ()
|
||||
|
||||
@@ -313,6 +313,9 @@ let attributes =
|
||||
test "_hxDisable succeeds" {
|
||||
p [ _hxDisable ] [] |> shouldRender """<p hx-disable></p>"""
|
||||
}
|
||||
test "_hxDisabledElt succeeds" {
|
||||
button [ _hxDiabledElt "this" ] [] |> shouldRender """<button hx-disabled-elt="this"></button>"""
|
||||
}
|
||||
test "_hxDisinherit succeeds" {
|
||||
strong [ _hxDisinherit "*" ] [] |> shouldRender """<strong hx-disinherit="*"></strong>"""
|
||||
}
|
||||
@@ -344,6 +347,11 @@ let attributes =
|
||||
test "_hxNoBoost succeeds" {
|
||||
td [ _hxNoBoost ] [] |> shouldRender """<td hx-boost="false"></td>"""
|
||||
}
|
||||
test "_hxOn succeeds" {
|
||||
let newLine = "\n"
|
||||
strong [ _hxOn "submit: alert('oops')\nclick: alert('howdy!')" ] []
|
||||
|> shouldRender $"""<strong hx-on="submit: alert('oops'){newLine}click: alert('howdy!')"></strong>"""
|
||||
}
|
||||
test "_hxParams succeeds" {
|
||||
br [ _hxParams "[p1,p2]" ] |> shouldRender """<br hx-params="[p1,p2]">"""
|
||||
}
|
||||
@@ -385,6 +393,10 @@ let attributes =
|
||||
test "_hxSwap succeeds" {
|
||||
del [ _hxSwap "innerHTML" ] [] |> shouldRender """<del hx-swap="innerHTML"></del>"""
|
||||
}
|
||||
test "_hxSwapWithTransition succeeds" {
|
||||
del [ _hxSwapWithTransition "innerHTML" ] []
|
||||
|> shouldRender """<del hx-swap="innerHTML transition:true"></del>"""
|
||||
}
|
||||
test "_hxSwapOob succeeds" {
|
||||
li [ _hxSwapOob "true" ] [] |> shouldRender """<li hx-swap-oob="true"></li>"""
|
||||
}
|
||||
@@ -413,14 +425,14 @@ let script =
|
||||
let html = RenderView.AsString.htmlNode Script.minified
|
||||
Expect.equal
|
||||
html
|
||||
"""<script src="https://unpkg.com/htmx.org@1.8.6" integrity="sha384-Bj8qm/6B+71E6FQSySofJOUjA/gq330vEqjFx9LakWybUySyI1IQHwPtbTU7bNwx" crossorigin="anonymous"></script>"""
|
||||
"""<script src="https://unpkg.com/htmx.org@1.9.6" integrity="sha384-FhXw7b6AlE/jyjlZH5iHa/tTe9EpJ1Y55RjcgPbjeWMskSxZt1v9qkxLJWNJaGni" crossorigin="anonymous"></script>"""
|
||||
"Minified script tag is incorrect"
|
||||
}
|
||||
test "unminified succeeds" {
|
||||
let html = RenderView.AsString.htmlNode Script.unminified
|
||||
Expect.equal
|
||||
html
|
||||
"""<script src="https://unpkg.com/htmx.org@1.8.6/dist/htmx.js" integrity="sha384-denUmZOxhLrCvV+ej1uWe4EXwjmJtWzbg0sjv6YfuHhUAP0CEVIArcYjlUbJHh87" crossorigin="anonymous"></script>"""
|
||||
"""<script src="https://unpkg.com/htmx.org@1.9.6/dist/htmx.js" integrity="sha384-DyaDHx3hlXQ3QqTsQbNECvRW/A/B+4OtEWLCHbsDRPI3oJ98ekMiWJ4Yyrrqimog" crossorigin="anonymous"></script>"""
|
||||
"Unminified script tag is incorrect"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -193,6 +193,9 @@ module HtmxAttrs =
|
||||
/// Disables htmx processing for the given node and any children nodes
|
||||
let _hxDisable = flag "hx-disable"
|
||||
|
||||
/// Specifies elements that should be disabled when an htmx request is in flight
|
||||
let _hxDiabledElt = attr "hx-disabled-elt"
|
||||
|
||||
/// Disinherit all ("*") or specific htmx attributes
|
||||
let _hxDisinherit = attr "hx-disinherit"
|
||||
|
||||
@@ -223,6 +226,9 @@ module HtmxAttrs =
|
||||
/// Overrides a previous `hx-boost`
|
||||
let _hxNoBoost = attr "hx-boost" "false"
|
||||
|
||||
/// Attach an event handler for DOM or htmx events
|
||||
let _hxOn = attr "hx-on"
|
||||
|
||||
/// Filters the parameters that will be submitted with a request
|
||||
let _hxParams = attr "hx-params"
|
||||
|
||||
@@ -262,6 +268,10 @@ module HtmxAttrs =
|
||||
/// Controls how the response content is swapped into the DOM (e.g. 'outerHTML' or 'beforeEnd')
|
||||
let _hxSwap = attr "hx-swap"
|
||||
|
||||
/// Controls how the response content is swapped into the DOM (e.g. 'outerHTML' or 'beforeEnd'), enabling CSS
|
||||
/// transitions
|
||||
let _hxSwapWithTransition = sprintf "%s transition:true" >> _hxSwap
|
||||
|
||||
/// Marks content in a response as being "Out of Band", i.e. swapped somewhere other than the target
|
||||
let _hxSwapOob = attr "hx-swap-oob"
|
||||
|
||||
@@ -289,14 +299,14 @@ module Script =
|
||||
|
||||
/// Script tag to load the minified version from unpkg.com
|
||||
let minified =
|
||||
script [ _src "https://unpkg.com/htmx.org@1.8.6"
|
||||
_integrity "sha384-Bj8qm/6B+71E6FQSySofJOUjA/gq330vEqjFx9LakWybUySyI1IQHwPtbTU7bNwx"
|
||||
script [ _src "https://unpkg.com/htmx.org@1.9.6"
|
||||
_integrity "sha384-FhXw7b6AlE/jyjlZH5iHa/tTe9EpJ1Y55RjcgPbjeWMskSxZt1v9qkxLJWNJaGni"
|
||||
_crossorigin "anonymous" ] []
|
||||
|
||||
/// Script tag to load the unminified version from unpkg.com
|
||||
let unminified =
|
||||
script [ _src "https://unpkg.com/htmx.org@1.8.6/dist/htmx.js"
|
||||
_integrity "sha384-denUmZOxhLrCvV+ej1uWe4EXwjmJtWzbg0sjv6YfuHhUAP0CEVIArcYjlUbJHh87"
|
||||
script [ _src "https://unpkg.com/htmx.org@1.9.6/dist/htmx.js"
|
||||
_integrity "sha384-DyaDHx3hlXQ3QqTsQbNECvRW/A/B+4OtEWLCHbsDRPI3oJ98ekMiWJ4Yyrrqimog"
|
||||
_crossorigin "anonymous" ] []
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
This package enables [htmx](https://htmx.org) support within the [Giraffe](https://giraffe.wiki) view engine.
|
||||
|
||||
**htmx version: 1.8.6**
|
||||
**htmx version: 1.9.6**
|
||||
|
||||
### Setup
|
||||
|
||||
@@ -33,7 +33,13 @@ This also supports [fragment rendering](https://bitbadger.solutions/blog/2022/fr
|
||||
|
||||
### Learn
|
||||
|
||||
htmx's attributes and these attribute functions map one-to-one. The lone exception is `_hxBoost`, which implies `true`; use `_hxNoBoost` to set it to `false`. The support modules contain named properties for known values (as illustrated with `HxTrigger.Load` above). A few of the modules are more than collections of names, though:
|
||||
htmx's attributes and these attribute functions map one-to-one. There are two exceptions:
|
||||
- `_hxBoost` implies `true`; use `_hxNoBoost` to set it to `false`.
|
||||
- `_hxSwapWithTransition` renders the standard `hx-swap` attribute and appends `transition:true` to the specified swap value.
|
||||
|
||||
The htmx `hx-on` attribute supports multiple events if they are separated with a newline (`\n`) character. The value provided to this attribute will be attribute-escaped, but in testing, it was interpreted correctly.
|
||||
|
||||
The support modules contain named properties for known values (as illustrated with `HxTrigger.Load` above). A few of the modules are more than collections of names, though:
|
||||
- `HxRequest` has a `Configure` function, which takes a list of strings; the other functions in the module allow for configuring the request.
|
||||
|
||||
```fsharp
|
||||
|
||||
Reference in New Issue
Block a user