packages feed

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>