{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoMonomorphismRestriction #-} -- FIXME remove -- | Provide the user with a rich text editor. module Yesod.Form.Nic ( YesodNic (..) , nicHtmlField ) where import Yesod.Handler import Yesod.Form import Yesod.Widget import Text.HTML.SanitizeXSS (sanitizeBalance) import Text.Hamlet (Html, hamlet) import Text.Julius (julius) import Text.Blaze.Renderer.String (renderHtml) import Text.Blaze (preEscapedString) import Control.Monad.Trans.Class (lift) import Data.Text (Text, pack, unpack) class YesodNic a where -- | NIC Editor Javascript file. urlNicEdit :: a -> Either (Route a) Text urlNicEdit _ = Right "http://js.nicedit.com/nicEdit-latest.js" blank :: (Text -> Either msg a) -> Maybe Text -> Either msg (Maybe a) blank _ Nothing = Right Nothing blank _ (Just "") = Right Nothing blank f (Just t) = either Left (Right . Just) $ f t nicHtmlField :: YesodNic master => Field (GWidget sub master ()) msg Html nicHtmlField = Field { fieldParse = blank $ Right . preEscapedString . sanitizeBalance . unpack -- FIXME , fieldRender = pack . renderHtml , fieldView = \theId name val _isReq -> do addHtml #if __GLASGOW_HASKELL__ >= 700 [hamlet| #else [$hamlet| #endif