File tree 5 files changed +65
-8
lines changed
5 files changed +65
-8
lines changed Original file line number Diff line number Diff line change @@ -8,3 +8,4 @@ Start the server by running `swift run App` in the project root
8
8
9
9
- (HX-Location)[ Sources/App/HtmxExamples/HXLocationHandlers.swift] - Do a client side redirect via ` HX-Location `
10
10
- (HX-Reswap)[ Sources/App/HtmxExamples/HXReswapHandlers.swift] - Swap an element via ` HX-Reswap `
11
+ - (HX-Trigger)[ Sources/App/HtmxExamples/HXTriggerHandlers.swift] - Trigger a client-side event via ` HX-Trigger `
Original file line number Diff line number Diff line change @@ -56,5 +56,7 @@ func buildRouter() -> Router<AppRequestContext> {
56
56
router. on ( route: . hxLocationB, use: hxLocationBHandler)
57
57
router. on ( route: . hxLocationBSubmit, use: hxLocationBSubmitHandler)
58
58
router. on ( route: . hxReswapHttp, use: hxReswapHandler)
59
+ router. on ( route: . hxTrigger, use: hxTriggerHandler)
60
+ router. on ( route: . hxTriggerAlert, use: hxTriggerAlertHandler)
59
61
return router
60
62
}
Original file line number Diff line number Diff line change @@ -32,15 +32,15 @@ extension Route {
32
32
}
33
33
34
34
@Sendable func hxLocationSubmitHandler( _ req: Request ) -> Response {
35
- if req. isHtmxRequest {
36
- return Response (
37
- status: . ok,
38
- headers: HTTPFields ( [
39
- . hxLocation( Route . hxLocationB. path)
40
- ] )
41
- )
35
+ guard req. isHtmxRequest else {
36
+ return Response ( status: . badRequest)
42
37
}
43
- return Response ( status: . badRequest)
38
+ return Response (
39
+ status: . ok,
40
+ headers: HTTPFields ( [
41
+ . hxLocation( Route . hxLocationB. path)
42
+ ] )
43
+ )
44
44
}
45
45
46
46
@Sendable func hxLocationBHandler( _ req: Request ) -> Response {
Original file line number Diff line number Diff line change
1
+ import Foundation
2
+ import HTTPTypesHtmx
3
+ import Hummingbird
4
+
5
+ #if canImport(FoundationNetworking)
6
+ import FoundationNetworking
7
+ #endif
8
+
9
+ extension Route {
10
+ static let hxTrigger = Route ( . get, " /examples/hx-trigger " )
11
+ static let hxTriggerAlert = Route ( . post, " /examples/hx-trigger " )
12
+ }
13
+
14
+ @Sendable func hxTriggerHandler( _ req: Request ) -> Response {
15
+ . html(
16
+ htmlLayout (
17
+ """
18
+ <div>
19
+ <h2>HX-Trigger Example</h2>
20
+ <p>This example uses HX-Trigger to trigger a client-side event that shows an alert</p>
21
+ <div>
22
+ <button
23
+ hx-post= " \( Route . hxTriggerAlert. path) "
24
+ hx-swap= " none "
25
+ >Trigger</button>
26
+ </div>
27
+ <script>
28
+ document.body.addEventListener( " showMessage " , function(evt){
29
+ alert(evt.detail.value);
30
+ })
31
+ </script>
32
+ </div>
33
+ """
34
+ )
35
+ )
36
+ }
37
+
38
+ @Sendable func hxTriggerAlertHandler( _ req: Request ) -> Response {
39
+ guard req. isHtmxRequest else {
40
+ return Response ( status: . badRequest)
41
+ }
42
+
43
+ return Response (
44
+ status: . ok,
45
+ headers: HTTPFields ( [
46
+ . hxTrigger(
47
+ event: """
48
+ { " showMessage " : " This alert was triggered by HX-Trigger " }
49
+ """
50
+ )
51
+ ] )
52
+ )
53
+ }
Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ func htmlLayout(_ content: String) -> String {
16
16
<ul>
17
17
<li><a href= " \( Route . hxLocation. path) " >HX-Location</a></li>
18
18
<li><a href= " \( Route . hxReswapHttp. path) " >HX-Reswap</a></li>
19
+ <li><a href= " \( Route . hxTrigger. path) " >HX-Trigger</a></li>
19
20
</ul>
20
21
</nav>
21
22
</header>
You can’t perform that action at this time.
0 commit comments