1 {-# LANGUAGE OverloadedStrings #-} 2 module Databrary.View.Html 3 ( unsafeBuilder 4 , lazyByteStringHtml 5 , byteStringHtml 6 , byteStringValue 7 , builderValue 8 , actionLink 9 , Query 10 , actionValue 11 , actionForm 12 , (!?) 13 ) where 14 15 import qualified Data.ByteString as BS 16 import qualified Data.ByteString.Builder as BSB 17 import qualified Data.ByteString.Lazy as BSL 18 import Network.HTTP.Types (Query, QueryLike(..)) 19 import qualified Text.Blaze.Internal as Markup 20 import qualified Text.Blaze.Html5 as H 21 import qualified Text.Blaze.Html5.Attributes as HA 22 import qualified Web.Route.Invertible as R 23 24 import Blaze.ByteString.Builder.Html.Word (fromHtmlEscapedByteString, fromHtmlEscapedLazyByteString) 25 import Databrary.Action.Route 26 import Databrary.HTTP.Route 27 28 import {-# SOURCE #-} Databrary.Controller.Angular 29 30 unsafeBuilder :: BSB.Builder -> H.Markup 31 unsafeBuilder = H.unsafeLazyByteString . BSB.toLazyByteString 32 33 lazyByteStringHtml :: BSL.ByteString -> H.Markup 34 lazyByteStringHtml = unsafeBuilder . fromHtmlEscapedLazyByteString 35 36 byteStringHtml :: BS.ByteString -> H.Markup 37 byteStringHtml = unsafeBuilder . fromHtmlEscapedByteString 38 39 -- builderHtml :: BSB.Builder -> H.Markup 40 -- builderHtml = lazyByteStringHtml . BSB.toLazyByteString 41 42 unsafeBuilderValue :: BSB.Builder -> H.AttributeValue 43 unsafeBuilderValue = H.unsafeLazyByteStringValue . BSB.toLazyByteString 44 45 lazyByteStringValue :: BSL.ByteString -> H.AttributeValue 46 lazyByteStringValue = unsafeBuilderValue . fromHtmlEscapedLazyByteString 47 48 byteStringValue :: BS.ByteString -> H.AttributeValue 49 byteStringValue = unsafeBuilderValue . fromHtmlEscapedByteString 50 51 builderValue :: BSB.Builder -> H.AttributeValue 52 builderValue = lazyByteStringValue . BSB.toLazyByteString 53 54 actionValue :: QueryLike q => R.RouteAction r a -> r -> q -> H.AttributeValue 55 actionValue r a q = builderValue $ actionURL Nothing r a $ toQuery q 56 57 actionLink :: QueryLike q => R.RouteAction r a -> r -> q -> H.Attribute 58 actionLink r a = HA.href . actionValue r a 59 60 actionForm :: Route r a -> a -> JSOpt -> H.Html -> H.Html 61 actionForm r a j = H.form 62 H.! HA.method (H.unsafeByteStringValue $ R.renderParameter $ R.requestMethod rr) 63 H.!? (not $ BS.null $ R.requestContentType rr, HA.enctype $ byteStringValue $ R.requestContentType rr) 64 H.! HA.action (builderValue $ routeURL Nothing rr (toQuery j)) 65 where rr = R.requestActionRoute r a 66 67 (!?) :: Markup.Attributable h => h -> Maybe H.Attribute -> h 68 h !? Nothing = h 69 h !? (Just a) = h H.! a 70 ERROR: ("",8,Loc 70 1,[],[(Loc 71 1,Loc 72 23,TopLevelDecl False 3),(Loc 71 1,Loc 72 23,IsTicked),(Loc 71 16,Loc 71 16,IsTicked),(Loc 72 17,Loc 72 23,IsTicked),(Loc 72 17,Loc 72 17,IsTicked),(Loc 72 23,Loc 72 23,IsTicked)])