improve link rendering

This commit is contained in:
Mirek Kratochvil 2023-06-13 15:53:01 +02:00
parent 3c19750338
commit c84dcab7a3
2 changed files with 17 additions and 7 deletions

View file

@ -40,3 +40,9 @@ walkURLs f = Text.Pandoc.Walk.walkM go
u' <- T.pack <$> f (T.unpack u)
pure $ Image a i (u', t)
go x = pure x
hasUriScheme :: String -> String -> Bool
hasUriScheme x = all id . zipWith (==) x . (++ ":")
unAbsolute :: String -> String
unAbsolute = dropWhile (== '/')

18
site.hs
View file

@ -66,7 +66,7 @@ loadPage fp = do
md <- io $ runIOorExplode $ readMarkdown markdownReadOpts (T.drop 5 markdown)
{- find the main mount point for the page -}
let mount =
dropWhile (== '/') . T.unpack . just ("mount point of " ++ fp) $ yml ^?
unAbsolute . T.unpack . just ("mount point of " ++ fp) $ yml ^?
key "mount" .
_String
existing <- use $ pages . to (M.!? mount)
@ -127,14 +127,17 @@ checkTarget fp = do
-- | Prepend the root path to the given link
rootUrl :: FilePath -> Site FilePath
rootUrl fp = (</> dropWhile (== '/') fp) <$> use urlBase
rootUrl fp = (</> unAbsolute fp) <$> use urlBase
-- | Process a single link pointing out from a page.
processLink :: FilePath -> FilePath -> Site String
processLink base l =
if isAbsolute l
then rootUrl l
else installFile (base </> l) >>= rootUrl
processLink base l = do
io $ putStrLn l
if any (l `hasUriScheme`) ["http", "https", "ftp", "mailto"]
then pure l
else if isAbsolute l
then rootUrl l
else installFile (base </> l) >>= rootUrl
-- | Get a mount point of the page into the correct location.
-- (Pages are currently mounted just to the root.)
@ -186,7 +189,8 @@ installPageRedirects :: FilePath -> PageInfo -> Site ()
installPageRedirects target pi = do
traverse_
(installRedirect target)
(pi ^.. pageMeta . key "redirects" . values . _String . to T.unpack)
(pi ^.. pageMeta . key "redirects" . values . _String . to T.unpack .
to unAbsolute)
-- | Find the path to the file of a given hash
dataFilename :: String -> FilePath -> Site (FilePath, FilePath)