module Rules.Blog.Search ( build ) where import Control.Monad.Reader (asks, lift) import Hakyll import System.FilePath ((</>)) import Config.Blog (BlogConfig (..)) import Config.Program (tmBlogRoot) import Config.Site (defaultTimeLocale', timeZoneJST) import Contexts.Field (searchBoxResultField) import Rules.Blog.Type import Rules.Blog.Utils (appendFooter) import Utils (absolutizeUrls, modifyExternalLinkAttr) import qualified Vendor.FontAwesome as FA build :: FA.FontAwesomeIcons -> Context String -> BlogConfReader m Rules () build :: forall (m :: * -> *). FontAwesomeIcons -> Context String -> BlogConfReader m Rules () build FontAwesomeIcons faIcons Context String ctx = do String t <- (BlogConfig m -> String) -> ReaderT (BlogConfig m) Rules String forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a asks BlogConfig m -> String forall (m :: * -> *). BlogConfig m -> String blogName Rules () -> BlogConfReader m Rules () forall (m :: * -> *) a. Monad m => m a -> ReaderT (BlogConfig m) m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (Rules () -> BlogConfReader m Rules ()) -> Rules () -> BlogConfReader m Rules () forall a b. (a -> b) -> a -> b $ [Identifier] -> Rules () -> Rules () create [String -> Identifier fromFilePath (String t String -> String -> String </> String "search.html")] (Rules () -> Rules ()) -> Rules () -> Rules () forall a b. (a -> b) -> a -> b $ do Routes -> Rules () route Routes idRoute Compiler (Item String) -> Rules () forall a. (Binary a, Typeable a, Writable a) => Compiler (Item a) -> Rules () compile (Compiler (Item String) -> Rules ()) -> Compiler (Item String) -> Rules () forall a b. (a -> b) -> a -> b $ String -> Compiler (Item String) forall a. a -> Compiler (Item a) makeItem String forall a. Monoid a => a mempty Compiler (Item String) -> (Item String -> Compiler (Item String)) -> Compiler (Item String) forall a b. Compiler a -> (a -> Compiler b) -> Compiler b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= Identifier -> Context String -> Item String -> Compiler (Item String) forall a. Identifier -> Context a -> Item a -> Compiler (Item String) loadAndApplyTemplate (String -> Identifier fromFilePath (String -> Identifier) -> String -> Identifier forall a b. (a -> b) -> a -> b $ String tmBlogRoot String -> String -> String </> String "default.html") (Context String searchBoxResultField Context String -> Context String -> Context String forall a. Semigroup a => a -> a -> a <> Context String ctx) Compiler (Item String) -> (Item String -> Compiler (Item String)) -> Compiler (Item String) forall a b. Compiler a -> (a -> Compiler b) -> Compiler b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= Item String -> Compiler (Item String) absolutizeUrls Compiler (Item String) -> (Item String -> Compiler (Item String)) -> Compiler (Item String) forall a b. Compiler a -> (a -> Compiler b) -> Compiler b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= String -> TimeLocale -> TimeZone -> Item String -> Compiler (Item String) forall a. (Binary a, Typeable a, Semigroup a) => String -> TimeLocale -> TimeZone -> Item a -> Compiler (Item a) appendFooter String t TimeLocale defaultTimeLocale' TimeZone timeZoneJST Compiler (Item String) -> (Item String -> Compiler (Item String)) -> Compiler (Item String) forall a b. Compiler a -> (a -> Compiler b) -> Compiler b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= Item String -> Compiler (Item String) modifyExternalLinkAttr Compiler (Item String) -> (Item String -> Compiler (Item String)) -> Compiler (Item String) forall a b. Compiler a -> (a -> Compiler b) -> Compiler b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= Item String -> Compiler (Item String) relativizeUrls Compiler (Item String) -> (Item String -> Compiler (Item String)) -> Compiler (Item String) forall a b. Compiler a -> (a -> Compiler b) -> Compiler b forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b >>= FontAwesomeIcons -> Item String -> Compiler (Item String) FA.render FontAwesomeIcons faIcons