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)])