module SiteGenerator (generateSite) where import Types import DependencyGenerator thumbnailImagePath :: Token FilePath -> Token FilePath -> DepGenM' FilePath thumbnailImagePath outputDir filename = do (base, ext) <- untupleDepGenM (fileComponents filename) name <- appendStrings (appendStrings (base, inject "-thumbnail."), ext) joinPaths (outputDir, name) handleRecipeDir :: Token FilePath -> Token Template -> Token FilePath -> Token FilePath -> DepGenM () handleRecipeDir outputDir template indexName dir = do dirContents <- listDirectory dir exts <- unzipSndDepGenM (mapDepGenM fileComponents dirContents) areImageFilenames <- mapDepGenM isImageExtension exts imageFilenames <- filterDepGenM areImageFilenames dirContents imagePaths <- mapDepGenM (curry joinPaths dir) imageFilenames imagePathsOut <- mapDepGenM (curry joinPaths outputDir) imageFilenames mapDepGenM_ copyFile' (ZipToken (imagePaths, imagePathsOut)) thumbnailImagePaths <- mapDepGenM (thumbnailImagePath outputDir) imageFilenames mapDepGenM_ (\files -> convertImage (files, inject $ ResizeToWidth 800)) (ZipToken (imagePaths, thumbnailImagePaths)) recipeDirOut <- joinPaths (outputDir, dir) makeDir recipeDirOut htmlBody <- runPandoc (joinPaths (dir, inject "ret.md")) html <- applyTemplate (template, htmlBody) saveFile (html, joinPaths (recipeDirOut, indexName)) generateSite :: DepGenM () generateSite = do outputDir <- inject "site" makeDir outputDir recipesDir <- inject "retter" outputRecipesDir <- joinPaths (outputDir, recipesDir) makeDir outputRecipesDir template <- readTemplate (inject "template.html") indexName <- inject "index.html" dirContents <- listDirectory recipesDir mapDepGenM_ (handleRecipeDir outputRecipesDir template indexName) dirContents htmlBody <- runPandoc (inject "om.md") html <- applyTemplate (template, htmlBody) aboutDir <- joinPaths (outputDir, inject "om") makeDir aboutDir saveFile (html, joinPaths (aboutDir, indexName))