Add an option to pass a custom config to remarkableJS

This commit is contained in:
Tissevert 2019-02-22 22:02:07 +01:00
parent faa72435ce
commit cfa501e3c4
4 changed files with 28 additions and 14 deletions

View file

@ -3,7 +3,7 @@ window.addEventListener('load', function() {
var cache = unitJS.Cache();
var dom = unitJS.Dom();
var fun = unitJS.Fun();
var md = new Remarkable({html: true});
var md = new Remarkable(remarkableConfig);
md.block.ruler.enable(['footnote']);
var comments = Comments({async: async, cache: cache, dom: dom});
var domRenderer = DomRenderer({comments: comments, fun: fun, md: md, dom: dom});

View file

@ -23,6 +23,7 @@ data Arguments = BlogConfig {
, pagesPath :: Maybe FilePath
, previewArticlesCount :: Int
, previewLinesCount :: Int
, remarkableConfig :: Maybe FilePath
, wording :: Maybe FilePath
}
| Version
@ -41,35 +42,37 @@ blogConfig :: Parser Arguments
blogConfig = BlogConfig
<$> argument filePath (value "." <> metavar "INPUT_DIR")
<*> Optparse.option filePath (
metavar "ARTICLES_PATH"
metavar "DIRECTORY"
<> value "articles"
<> short 'a'
<> long "articles"
<> help "name of the directory containing the articles within INPUT_DIR"
<> help "relative path to the directory containing the articles within INPUT_DIR"
)
<*> option filePath 'b' "banner" "BANNER_PATH" "path to the file to use for the blog's banner"
<*> option filePath 'c' "card-image" "CARD_IMAGE" "path to the image to use for the blog's card"
<*> option filePath 'C' "comments-at" "INSTANCE_URL" "url of the instance where comments are stored"
<*> option filePath 'f' "favicon" "FAVICON" "path to the image to use for the blog's favicon"
<*> option filePath 'H' "head" "HEAD_PATH" "path to the file to add in the blog's head"
<*> option filePath 'b' "banner" "FILE" "path to the file to use for the blog's banner"
<*> option filePath 'c' "card-image" "FILE" "relative path to the image to use for the blog's card"
<*> option filePath 'C' "comments-at" "URL" "url of the instance where comments are stored"
<*> option filePath 'f' "favicon" "FILE" "path to the image to use for the blog's favicon"
<*> option filePath 'H' "head" "FILE" "path to the file to add in the blog's head"
<*> option str 'n' "name" "BLOG_NAME" "name of the blog"
<*> option filePath 'p' "pages"
"PAGES_PATH" "name of the directory containing the pages within INPUT_DIR"
"DIRECTORY" "relative path to the directory containing the pages within INPUT_DIR"
<*> Optparse.option auto (
metavar "PREVIEW_ARTICLES_COUNT"
metavar "INTEGER"
<> value 3
<> short 'A'
<> long "preview-articles"
<> help "number of articles listed on the page of each category"
)
<*> Optparse.option auto (
metavar "PREVIEW_LINES_COUNT"
metavar "INTEGER"
<> value 10
<> short 'L'
<> long "preview-lines"
<> help "number of lines to display in articles preview"
)
<*> option filePath 'w' "wording" "WORDING" "path to the file containing the wording to use"
<*> option filePath 'r' "remarkable-config" "FILE"
"path to a file containing a custom RemarkableJS configuration"
<*> option filePath 'w' "wording" "FILE" "path to the file containing the wording to use"
version :: Parser Arguments
version = flag' Version (

View file

@ -12,6 +12,7 @@ data Path = Path {
articlesPath :: FilePath
, commentsAt :: Maybe String
, pagesPath :: Maybe FilePath
, remarkableConfig :: Maybe FilePath
, root :: FilePath
}
@ -19,7 +20,10 @@ build :: Arguments -> IO Path
build arguments = do
articlesPath <- filePath . Dir $ Arguments.articlesPath arguments
pagesPath <- mapM (filePath . Dir) $ Arguments.pagesPath arguments
remarkableConfig <- mapM (filePath . File) $ Arguments.remarkableConfig arguments
root <- absolute . Dir $ Arguments.sourceDir arguments
return $ Path {
articlesPath, commentsAt = Arguments.commentsAt arguments, pagesPath, root
articlesPath, commentsAt, pagesPath, remarkableConfig, root
}
where
commentsAt = Arguments.commentsAt arguments

View file

@ -8,6 +8,7 @@ import qualified Blog (get)
import Control.Monad.IO.Class (MonadIO(..))
import Control.Monad.Reader (ReaderT)
import Data.ByteString.Lazy (ByteString, concat, readFile, writeFile)
import Data.ByteString.Lazy.Char8 (pack)
import qualified Files (find)
import JSON (exportBlog)
import Paths_hablo (getDataDir)
@ -22,12 +23,18 @@ compile sources = concat (header:sources ++ [footer])
header = "(function() {\n"
footer = "})();"
var :: (String, ByteString) -> ByteString
var (varName, content) = concat ["var ", pack varName, " = ", content, ";\n"]
generate :: ReaderT Blog IO ()
generate = do
destinationDir <- (</> "js") <$> (Blog.get $path.$root)
blogJSON <- exportBlog
remarkablePath <- Blog.get $path.$remarkableConfig
liftIO $ do
remarkableJSON <- maybe (return "{html: true}") readFile remarkablePath
let jsVars = var <$> [("blog", blogJSON), ("remarkableConfig", remarkableJSON)]
jsFiles <- (</> "js") <$> getDataDir >>= Files.find
jsCode <- mapM readFile jsFiles
createDirectoryIfMissing False destinationDir
writeFile (destinationDir </> "hablo.js") $ compile ("var blog = ":blogJSON:";":jsCode )
writeFile (destinationDir </> "hablo.js") $ compile (jsVars ++ jsCode )