servant-htmx 0.1.0.0 → 0.1.0.1
raw patch · 6 files changed
+90/−77 lines, 6 filesdep −servantPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: servant
API changes (from Hackage documentation)
- Lib: someFunc :: IO ()
- Servant.HTMX: exampleApp :: Application
- Servant.HTMX: exampleServer :: Server ExampleAPI
- Servant.HTMX: type ExampleAPI = HXRequest :> Get '[JSON] Text :<|> HXTriggerId :> Post '[JSON] Text :<|> "somePath" :> Get '[JSON] (Headers '[HXPush, HXRedirect] Text)
- Servant.HTMX: type HXPrompt = Header "HX-Prompt" Text
- Servant.HTMX: type HXPush = Header "HX-Push" Text
- Servant.HTMX: type HXRedirect = Header "HX-Redirect" Text
- Servant.HTMX: type HXRefresh = Header "HX-Refresh" Text
- Servant.HTMX: type HXRequest = Header "HX-Request" Text
- Servant.HTMX: type HXTarget = Header "HX-Target" Text
- Servant.HTMX: type HXTrigger = Header "HX-Trigger" Text
- Servant.HTMX: type HXTriggerAfterSettle = Header "HX-Trigger-After-Settle" Text
- Servant.HTMX: type HXTriggerAfterSwap = Header "HX-Trigger-After-Swap" Text
- Servant.HTMX: type HXTriggerId = Header "HX-Trigger" Text
- Servant.HTMX: type HXTriggerName = Header "HX-Trigger-Name" Text
+ Servant.Htmx: type HXPrompt = Header "HX-Prompt" Text
+ Servant.Htmx: type HXPush = Header "HX-Push" Text
+ Servant.Htmx: type HXRedirect = Header "HX-Redirect" Text
+ Servant.Htmx: type HXRefresh = Header "HX-Refresh" Text
+ Servant.Htmx: type HXRequest = Header "HX-Request" Text
+ Servant.Htmx: type HXTarget = Header "HX-Target" Text
+ Servant.Htmx: type HXTrigger = Header "HX-Trigger" Text
+ Servant.Htmx: type HXTriggerAfterSettle = Header "HX-Trigger-After-Settle" Text
+ Servant.Htmx: type HXTriggerAfterSwap = Header "HX-Trigger-After-Swap" Text
+ Servant.Htmx: type HXTriggerId = Header "HX-Trigger" Text
+ Servant.Htmx: type HXTriggerName = Header "HX-Trigger-Name" Text
Files
- LICENSE +2/−2
- app/Main.hs +1/−3
- servant-htmx.cabal +9/−15
- src/Lib.hs +0/−6
- src/Servant/HTMX.hs +0/−51
- src/Servant/Htmx.hs +78/−0
LICENSE view
@@ -1,4 +1,4 @@-Copyright Author name here (c) 2022+Copyright 2022 Monadic Systems LLC All rights reserved. @@ -13,7 +13,7 @@ disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Author name here nor the names of other+ * Neither the name of Monadic Systems LLC nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission.
app/Main.hs view
@@ -1,6 +1,4 @@ module Main where -import Lib- main :: IO ()-main = someFunc+main = print "Use servant and htmx"
servant-htmx.cabal view
@@ -1,16 +1,16 @@ cabal-version: 1.12 name: servant-htmx-version: 0.1.0.0+version: 0.1.0.1 license: BSD3 license-file: LICENSE-copyright: 2022 Author name here-maintainer: example@example.com-author: Author name here-homepage: https://github.com/githubuser/servant-htmx#readme-bug-reports: https://github.com/githubuser/servant-htmx/issues+copyright: 2022 Monadic Systems LLC+maintainer: tech@monadic.systems+author: Monadic Systems LLC+homepage: https://github.com/MonadicSystems/servant-htmx#readme+bug-reports: https://github.com/MonadicSystems/servant-htmx/issues synopsis: A library for using htmx with servant description:- Please see the README on GitHub at <https://github.com/githubuser/servant-htmx#readme>+ Please see the README on GitHub at <https://github.com/MonadicSystems/servant-htmx#readme> category: Web build-type: Simple@@ -20,19 +20,15 @@ source-repository head type: git- location: https://github.com/githubuser/servant-htmx+ location: https://github.com/MonadicSystems/servant-htmx library- exposed-modules:- Lib- Servant.HTMX-+ exposed-modules: Servant.Htmx hs-source-dirs: src other-modules: Paths_servant_htmx default-language: Haskell2010 build-depends: base >=4.7 && <5,- servant >=0.18.3 && <0.19, servant-server >=0.18.3 && <0.19, text >=1.2.4.1 && <1.3 @@ -44,7 +40,6 @@ ghc-options: -threaded -rtsopts -with-rtsopts=-N build-depends: base >=4.7 && <5,- servant >=0.18.3 && <0.19, servant-htmx -any, servant-server >=0.18.3 && <0.19, text >=1.2.4.1 && <1.3@@ -58,7 +53,6 @@ ghc-options: -threaded -rtsopts -with-rtsopts=-N build-depends: base >=4.7 && <5,- servant >=0.18.3 && <0.19, servant-htmx -any, servant-server >=0.18.3 && <0.19, text >=1.2.4.1 && <1.3
− src/Lib.hs
@@ -1,6 +0,0 @@-module Lib- ( someFunc- ) where--someFunc :: IO ()-someFunc = putStrLn "someFunc"
− src/Servant/HTMX.hs
@@ -1,51 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE TypeOperators #-}-{-# LANGUAGE OverloadedStrings #-}--module Servant.HTMX where--import Data.Text-import Servant-import Servant.API-import Servant.Server---- | Request headers (sent by the client to the server)-type HXRequest = Header "HX-Request" Text-type HXTriggerId = Header "HX-Trigger" Text-type HXTriggerName = Header "HX-Trigger-Name" Text-type HXTarget = Header "HX-Target" Text-type HXPrompt = Header "HX-Prompt" Text---- | Response headers (sent by the server to the client)-type HXPush = Header "HX-Push" Text -- use safelinks-type HXRedirect = Header "HX-Redirect" Text -- use safelinks-type HXRefresh = Header "HX-Refresh" Text -type HXTrigger = Header "HX-Trigger" Text-type HXTriggerAfterSwap = Header "HX-Trigger-After-Swap" Text-type HXTriggerAfterSettle = Header "HX-Trigger-After-Settle" Text---- | Example usage of htmx header types-type ExampleAPI = HXRequest :> Get '[JSON] Text- :<|> HXTriggerId :> Post '[JSON] Text- :<|> "somePath" :> Get '[JSON] (Headers '[HXPush, HXRedirect] Text)--exampleServer :: Server ExampleAPI-exampleServer = exampleGetHandler- :<|> examplePostHandler- :<|> exampleSomePathHandler- where- exampleGetHandler :: Maybe Text -> Handler Text- exampleGetHandler mb = case mb of- Just "true" -> pure "The request was sent to the server by htmx" - _ -> pure "The request wasn't sent to the server by htmx" -- examplePostHandler :: Maybe Text -> Handler Text- examplePostHandler mb = case mb of- Just "adminPanel" -> pure "The request was triggered by the admin panel" - _ -> pure "The request wasn't triggered by the admin panel" -- exampleSomePathHandler :: Handler (Headers '[HXPush, HXRedirect] Text)- exampleSomePathHandler = pure $ noHeader $ addHeader "someURLForRedirect" "This response has htmx headers" --exampleApp :: Application-exampleApp = serve (Proxy :: Proxy ExampleAPI) exampleServer
+ src/Servant/Htmx.hs view
@@ -0,0 +1,78 @@+{-# LANGUAGE DataKinds #-}++-- | See <https://htmx.org/reference/#request_headers> and <https://htmx.org/reference/#response_headers>+-- to see all htmx request and response headers, and how to use them.+--+-- Example Servant API:+--+-- @+-- module MyServer where+--+-- import Servant.API+-- import Servant.Server+--+-- -- | Example usage of htmx header types+-- type ExampleAPI = HXRequest :> Get '[JSON] Text+-- :<|> HXTriggerId :> Post '[JSON] Text+-- :<|> "somePath" :> Get '[JSON] (Headers '[HXPush, HXRedirect] Text)+--+-- exampleServer :: Server ExampleAPI+-- exampleServer = exampleGetHandler+-- :<|> examplePostHandler+-- :<|> exampleSomePathHandler+-- where+-- exampleGetHandler :: Maybe Text -> Handler Text+-- exampleGetHandler mb = case mb of+-- Just "true" -> pure "The request was sent to the server by htmx"+-- _ -> pure "The request wasn't sent to the server by htmx"+--+-- examplePostHandler :: Maybe Text -> Handler Text+-- examplePostHandler mb = case mb of+-- Just "adminPanel" -> pure "The request was triggered by the admin panel"+-- _ -> pure "The request wasn't triggered by the admin panel"+--+-- exampleSomePathHandler :: Handler (Headers '[HXPush, HXRedirect] Text)+-- exampleSomePathHandler = pure $ noHeader $ addHeader "someURLForRedirect" "This response has htmx headers"+--+-- exampleApp :: Application+-- exampleApp = serve (Proxy :: Proxy ExampleAPI) exampleServer+-- @+module Servant.Htmx+ ( HXRequest,+ HXTriggerId,+ HXTriggerName,+ HXTarget,+ HXPrompt,+ HXPush,+ HXRedirect,+ HXRefresh,+ HXTrigger,+ HXTriggerAfterSwap,+ HXTriggerAfterSettle,+ )+where++import Data.Text (Text)+import Servant (Header)++type HXRequest = Header "HX-Request" Text++type HXTriggerId = Header "HX-Trigger" Text++type HXTriggerName = Header "HX-Trigger-Name" Text++type HXTarget = Header "HX-Target" Text++type HXPrompt = Header "HX-Prompt" Text++type HXPush = Header "HX-Push" Text++type HXRedirect = Header "HX-Redirect" Text++type HXRefresh = Header "HX-Refresh" Text++type HXTrigger = Header "HX-Trigger" Text++type HXTriggerAfterSwap = Header "HX-Trigger-After-Swap" Text++type HXTriggerAfterSettle = Header "HX-Trigger-After-Settle" Text