darcsden-1.1: src/DarcsDen/Pages/Util.hs
{-# OPTIONS_GHC -F -pgmF trhsx #-}
module DarcsDen.Pages.Util where
import Control.Monad.Trans ( liftIO )
import HSP
import DarcsDen.Settings (issuetrackers)
import DarcsDen.State.Repository ( Repository(..), repoURL, getRepositoryByID, getRepositoryForks )
repoForkSourceDescription :: Repository -> HSP XML
repoForkSourceDescription repo = do
f <- liftIO $ getForkedFromRepo repo
case f of
Nothing -> <span></span>
Just f' ->
<span class="repo-fork">
<% cdata " " %>
(fork of <a href=(repoURL f')><% rOwner f' %></a>'s <a href=(repoURL f')><% rName f' %></a>)
</span>
getForkedFromRepo :: Repository -> IO (Maybe Repository)
getForkedFromRepo (Repository { rForkOf = Nothing }) = return Nothing
getForkedFromRepo (Repository { rForkOf = Just id' }) = getRepositoryByID id'
links :: Repository -> Bool -> HSP XML
links r True = links' r [ <li class="edit"><a href=(repoURL r ++ "/edit")>repository settings</a></li>
, <li class="delete"><a href=(repoURL r ++ "/delete")>delete</a></li>
]
links r False = links' r []
links' :: Repository -> [HSP XML] -> HSP XML
links' r exls =
<ul class="links">
<li class="files"><a href=(repoURL r)>files</a></li>
<li class="changes"><a href=(repoURL r ++ "/changes")>changes</a></li>
<% patchesButton %>
<% issuesButton r %>
<li class="fork"><a href=(repoURL r ++ "/fork")>fork</a></li>
<% exls %>
<% packsTimeStamp (rBuiltPacks r) %>
</ul>
where
patchesButton = do
forks <- liftIO $ case (rID r, rRev r) of
(Just id', Just _) -> getRepositoryForks id'
_ -> return []
if null forks && rForkOf r == Nothing
then <div></div>
else
<li class="patches">
<a href=(repoURL r ++ "/patches")>branches</a>
</li>
issuesButton r' =
<% if issuetrackers && rIssueTracker r'
then <% <li class="issues"><a href=(repoURL r' ++ "/issues")>issues</a></li> %>
else <% "" %>
%>
packsTimeStamp Nothing = <div></div>
packsTimeStamp (Just ts) = <div style="border: thin solid #ccc; border-radius: 8px; "> Packs built at <% show ts %> </div>