{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} ------------------------------------------------------------------------------- -- | -- -- Rewrite/simplification of yesod-markdown written by ajdunlap. -- -- Forked from . -- ------------------------------------------------------------------------------- module Yesod.Markdown ( Markdown(..) -- * Wrappers , markdownToHtml , markdownToHtmlTrusted , markdownFromFile -- * Conversions , parseMarkdown , writePandoc , writePandocTrusted -- * Option sets , yesodDefaultWriterOptions , yesodDefaultParserState -- * Form helper , markdownField ) where import Yesod.Form (ToField(..), areq, aopt) import Yesod.Core (RenderMessage, SomeMessage(..)) import Yesod.Form.Types import Yesod.Widget (toWidget) import Text.Hamlet (hamlet, Html) import Database.Persist (PersistField) import Text.Blaze.Html (preEscapedToMarkup) import Text.Pandoc import Text.HTML.SanitizeXSS (sanitizeBalance) import Data.Monoid (Monoid) import Data.String (IsString) import System.Directory (doesFileExist) import qualified Data.Text as T newtype Markdown = Markdown String deriving (Eq, Ord, Show, Read, PersistField, IsString, Monoid) instance ToField Markdown master where toField = areq markdownField instance ToField (Maybe Markdown) master where toField = aopt markdownField markdownField :: RenderMessage master FormMessage => Field sub master Markdown markdownField = Field { fieldParse = \values _ -> blank (Right . Markdown . unlines . lines' . T.unpack) values , fieldView = \theId name attrs val _isReq -> toWidget [hamlet|$newline never