{-# LANGUAGE CPP #-} {-# 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 #if __GLASGOW_HASKELL__ >= 700 #define HAMLET hamlet #else #define HAMLET $hamlet #endif import Yesod import Yesod.Form.Types import Text.Blaze (preEscapedString, preEscapedText) import Text.Pandoc import Text.Pandoc.Shared 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 = blank $ Right . Markdown . unlines . lines' . T.unpack , fieldView = \theId name theClass val _isReq -> addHamlet [HAMLET|\