diff --git a/src/Vervis/Foundation.hs b/src/Vervis/Foundation.hs index 20d9142..a243323 100644 --- a/src/Vervis/Foundation.hs +++ b/src/Vervis/Foundation.hs @@ -928,8 +928,6 @@ instance YesodBreadcrumbs App where RepoNewR -> ("New Repo", Just HomeR) RepoDeleteR r -> ("", Nothing) RepoEditR r -> ("Edit", Just $ RepoR r) - RepoFollowR r -> ("", Nothing) - RepoUnfollowR r -> ("", Nothing) PostReceiveR -> ("", Nothing) @@ -938,6 +936,8 @@ instance YesodBreadcrumbs App where RepoStampR r k -> ("Stamp #" <> keyHashidText k, Just $ RepoR r) RepoCollabsR r -> ("Collaborators", Just $ RepoR r) + RepoInviteR _ -> ("", Nothing) + RepoRemoveR _ _ -> ("", Nothing) RepoProjectsR r -> ("Projects", Just $ RepoR r) RepoTeamsR r -> ("Teams", Just $ RepoR r) @@ -965,7 +965,7 @@ instance YesodBreadcrumbs App where DeckCollabsR d -> ("Collaborators", Just $ DeckR d) - DeckInviteR d -> ("Invite", Just $ DeckR d) + DeckInviteR _ -> ("", Nothing) DeckRemoveR _ _ -> ("", Nothing) DeckProjectsR d -> ("Projects", Just $ DeckR d) @@ -1006,12 +1006,12 @@ instance YesodBreadcrumbs App where LoomMessageR l m -> ("Message #" <> keyHashidText m, Just $ LoomR l) LoomNewR -> ("New Patch Tracker", Just HomeR) - LoomFollowR _ -> ("", Nothing) - LoomUnfollowR _ -> ("", Nothing) LoomStampR l k -> ("Stamp #" <> keyHashidText k, Just $ LoomR l) LoomCollabsR l -> ("Collaborators", Just $ LoomR l) + LoomInviteR _ -> ("", Nothing) + LoomRemoveR _ _ -> ("", Nothing) LoomProjectsR l -> ("Projects", Just $ LoomR l) LoomTeamsR l -> ("Teams", Just $ LoomR l) diff --git a/src/Vervis/Handler/Loom.hs b/src/Vervis/Handler/Loom.hs index 24c964a..3d25809 100644 --- a/src/Vervis/Handler/Loom.hs +++ b/src/Vervis/Handler/Loom.hs @@ -27,12 +27,12 @@ module Vervis.Handler.Loom , getLoomNewR , postLoomNewR - , postLoomFollowR - , postLoomUnfollowR , getLoomStampR , getLoomCollabsR + , postLoomInviteR + , postLoomRemoveR , getLoomProjectsR , getLoomTeamsR @@ -366,17 +366,36 @@ postLoomNewR = do setMessage "New patch tracker created" redirect $ LoomR loomHash -postLoomFollowR :: KeyHashid Loom -> Handler () -postLoomFollowR _ = error "Temporarily disabled" - -postLoomUnfollowR :: KeyHashid Loom -> Handler () -postLoomUnfollowR _ = error "Temporarily disabled" - getLoomStampR :: KeyHashid Loom -> KeyHashid SigKey -> Handler TypedContent getLoomStampR = servePerActorKey loomActor LocalActorLoom getLoomCollabsR :: KeyHashid Loom -> Handler TypedContent -getLoomCollabsR loomHash = error "TODO" +getLoomCollabsR loomHash = do + loomID <- decodeKeyHashid404 loomHash + (loom, actor) <- runDB $ do + loom <- get404 loomID + actor <- getJust $ loomActor loom + return (loom, actor) + serveCollabs + AP.RelHasCollab + (loomResource loom) + (LoomR loomHash) + (LoomCollabsR loomHash) + (LoomRemoveR loomHash) + (LoomInviteR loomHash) + (loomNavW (Entity loomID loom) actor) + +postLoomInviteR :: KeyHashid Loom -> Handler Html +postLoomInviteR loomHash = do + loomID <- decodeKeyHashid404 loomHash + resourceID <- runDB $ loomResource <$> get404 loomID + serveInviteCollab resourceID (LoomCollabsR loomHash) + +postLoomRemoveR :: KeyHashid Loom -> CollabId -> Handler Html +postLoomRemoveR loomHash collabID = do + loomID <- decodeKeyHashid404 loomHash + resourceID <- runDB $ loomResource <$> get404 loomID + serveRemoveCollab resourceID (LoomCollabsR loomHash) collabID getLoomProjectsR :: KeyHashid Loom -> Handler Html getLoomProjectsR loomHash = do diff --git a/src/Vervis/Handler/Repo.hs b/src/Vervis/Handler/Repo.hs index d6a9b9b..545aac0 100644 --- a/src/Vervis/Handler/Repo.hs +++ b/src/Vervis/Handler/Repo.hs @@ -40,8 +40,6 @@ module Vervis.Handler.Repo , postRepoDeleteR , getRepoEditR , postRepoEditR - , postRepoFollowR - , postRepoUnfollowR , postPostReceiveR @@ -50,6 +48,8 @@ module Vervis.Handler.Repo , getRepoStampR , getRepoCollabsR + , postRepoInviteR + , postRepoRemoveR , getRepoProjectsR , getRepoTeamsR @@ -199,6 +199,7 @@ import Vervis.Web.Collab import Vervis.Web.Darcs import Vervis.Web.Delivery import Vervis.Web.Git +import Vervis.Widget.Repo import Vervis.Widget.Tracker import qualified Vervis.Client as C @@ -552,12 +553,6 @@ postRepoEditR repoHash = do defaultLayout $(widgetFile "repo/edit") -} -postRepoFollowR :: KeyHashid Repo -> Handler () -postRepoFollowR _ = error "Temporarily disabled" - -postRepoUnfollowR :: KeyHashid Repo -> Handler () -postRepoUnfollowR _ = error "Temporarily disabled" - postPostReceiveR :: Handler Text postPostReceiveR = do -- Parse the push object that the hook sent @@ -797,7 +792,32 @@ getRepoStampR :: KeyHashid Repo -> KeyHashid SigKey -> Handler TypedContent getRepoStampR = servePerActorKey repoActor LocalActorRepo getRepoCollabsR :: KeyHashid Repo -> Handler TypedContent -getRepoCollabsR repoHash = error "TODO getRepoCollabsR" +getRepoCollabsR repoHash = do + repoID <- decodeKeyHashid404 repoHash + (repo, actor) <- runDB $ do + repo <- get404 repoID + actor <- getJust $ repoActor repo + return (repo, actor) + serveCollabs + AP.RelHasCollab + (repoResource repo) + (RepoR repoHash) + (RepoCollabsR repoHash) + (RepoRemoveR repoHash) + (RepoInviteR repoHash) + (repoNavW (Entity repoID repo) actor) + +postRepoInviteR :: KeyHashid Repo -> Handler Html +postRepoInviteR repoHash = do + repoID <- decodeKeyHashid404 repoHash + resourceID <- runDB $ repoResource <$> get404 repoID + serveInviteCollab resourceID (RepoCollabsR repoHash) + +postRepoRemoveR :: KeyHashid Repo -> CollabId -> Handler Html +postRepoRemoveR repoHash collabID = do + repoID <- decodeKeyHashid404 repoHash + resourceID <- runDB $ repoResource <$> get404 repoID + serveRemoveCollab resourceID (RepoCollabsR repoHash) collabID addProjectForm = renderDivs $ areq fedUriField "(URI) Project" Nothing diff --git a/src/Vervis/Widget/Repo.hs b/src/Vervis/Widget/Repo.hs index c1dd593..1cd9b6c 100644 --- a/src/Vervis/Widget/Repo.hs +++ b/src/Vervis/Widget/Repo.hs @@ -1,6 +1,6 @@ {- This file is part of Vervis. - - - Written in 2016, 2018, 2020 by fr33domlover . + - Written in 2016, 2018, 2020, 2024 by fr33domlover . - - ♡ Copying is an act of love. Please copy, reuse and share. - @@ -17,6 +17,7 @@ module Vervis.Widget.Repo ( refSelectW , changesW , inlineDiffW + , repoNavW ) where @@ -25,6 +26,7 @@ import Data.List.NonEmpty (NonEmpty) import Data.Set (Set) import Data.Text (Text) import Data.Vector (Vector) +import Database.Persist import Yesod.Core.Handler (getsYesod) import qualified Data.List.NonEmpty as N @@ -131,3 +133,9 @@ inlineDiffW orig hunks = do ctx <- getsYesod $ appDiffContextLines . appSettings let diffs = addContext ctx orig $ hunkLines hunks $(widgetFile "repo/widget/inline-diff") + +repoNavW :: Entity Repo -> Actor -> Widget +repoNavW (Entity repoID repo) actor = do + repoHash <- encodeKeyHashid repoID + hashLoom <- getEncodeKeyHashid + $(widgetFile "repo/widget/nav") diff --git a/templates/repo/widget/nav.hamlet b/templates/repo/widget/nav.hamlet new file mode 100644 index 0000000..800ed2c --- /dev/null +++ b/templates/repo/widget/nav.hamlet @@ -0,0 +1,46 @@ +$# This file is part of Vervis. +$# +$# Written in 2019, 2022, 2023, 2024 by fr33domlover . +$# +$# ♡ Copying is an act of love. Please copy, reuse and share. +$# +$# The author(s) have dedicated all copyright and related and neighboring +$# rights to this software to the public domain worldwide. This software is +$# distributed without any warranty. +$# +$# You should have received a copy of the CC0 Public Domain Dedication along +$# with this software. If not, see +$# . + +
+ + [[ 🗃 + + =#{keyHashidText repoHash} #{actorName actor} + ]] :: + + + [📥 Inbox] + + + [📤 Outbox] + + + [💥 Errbox] + + + [🐤 Followers] + + + [🤝 Collaborators] + + + [🏗 Projects] + + + + [🛠 Commits] + $maybe loomID <- repoLoom repo + + + [🧩 Merge Requests] diff --git a/th/routes b/th/routes index 129b1eb..1e22fba 100644 --- a/th/routes +++ b/th/routes @@ -222,8 +222,6 @@ /new-repo RepoNewR GET POST /repos/#RepoKeyHashid/delete RepoDeleteR POST /repos/#RepoKeyHashid/edit RepoEditR GET POST -/repos/#RepoKeyHashid/follow RepoFollowR POST -/repos/#RepoKeyHashid/unfollow RepoUnfollowR POST /post-receive PostReceiveR POST @@ -232,6 +230,8 @@ /repos/#RepoKeyHashid/stamps/#SigKeyKeyHashid RepoStampR GET /repos/#RepoKeyHashid/collabs RepoCollabsR GET +/repos/#RepoKeyHashid/invite RepoInviteR POST +/repos/#RepoKeyHashid/remove/#CollabId RepoRemoveR POST /repos/#RepoKeyHashid/projects RepoProjectsR GET /repos/#RepoKeyHashid/teams RepoTeamsR GET @@ -321,12 +321,12 @@ /new-loom LoomNewR GET POST -- /looms/#LoomKeyHashid/delete LoomDeleteR POST -- /looms/#LoomKeyHashid/edit LoomEditR GET POST -/looms/#LoomKeyHashid/follow LoomFollowR POST -/looms/#LoomKeyHashid/unfollow LoomUnfollowR POST /looms/#LoomKeyHashid/stamps/#SigKeyKeyHashid LoomStampR GET /looms/#LoomKeyHashid/collabs LoomCollabsR GET +/looms/#LoomKeyHashid/invite LoomInviteR POST +/looms/#LoomKeyHashid/remove/#CollabId LoomRemoveR POST /looms/#LoomKeyHashid/projects LoomProjectsR GET /looms/#LoomKeyHashid/teams LoomTeamsR GET