changeset 8241:173612a900ef

ui: show toggleable "Follow" status in repo groups' repo list It makes sense to show Follow status next to repo names in the repo list, and it is a meaningful and efficient bulk operation to toggle Follow status there. Clicking on the (Un)Follow 'heart' will toggle the caller's follow status for that repo. The repo model already has layering violations - expand on them to compute the follow status of the current user. (Changeset was cherry picked and modified by Mads Kiilerich.)
author Ross Thomas <ross@lns-nevasoft.com>
date Wed, 12 Feb 2020 14:37:15 +0100
parents 51af7c12ffb1
children 894a662b12b3
files kallithea/model/repo.py kallithea/templates/data_table/_dt_elements.html kallithea/templates/index_base.html
diffstat 3 files changed, 16 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/model/repo.py	Tue Feb 11 05:17:03 2020 +0100
+++ b/kallithea/model/repo.py	Wed Feb 12 14:37:15 2020 +0100
@@ -138,12 +138,16 @@
         admin: return data for action column.
         """
         _render = self._render_datatable
-        from tg import tmpl_context as c
+        from tg import tmpl_context as c, request
+        from kallithea.model.scm import ScmModel
 
         def repo_lnk(name, rtype, rstate, private, fork_of):
             return _render('repo_name', name, rtype, rstate, private, fork_of,
                            short_name=short_name)
 
+        def following(repo_id, is_following):
+            return _render('following', repo_id, is_following)
+
         def last_change(last_change):
             return _render("last_change", last_change)
 
@@ -188,6 +192,10 @@
                 "just_name": repo.just_name,
                 "name": repo_lnk(repo.repo_name, repo.repo_type,
                                  repo.repo_state, repo.private, repo.fork),
+                "following": following(
+                    repo.repo_id,
+                    ScmModel().is_following_repo(repo.repo_name, request.authuser.user_id),
+                ),
                 "last_change_iso": repo.last_db_change.isoformat(),
                 "last_change": last_change(repo.last_db_change),
                 "last_changeset": last_rev(repo.repo_name, cs_cache),
--- a/kallithea/templates/data_table/_dt_elements.html	Tue Feb 11 05:17:03 2020 +0100
+++ b/kallithea/templates/data_table/_dt_elements.html	Wed Feb 12 14:37:15 2020 +0100
@@ -31,6 +31,12 @@
   </div>
 </%def>
 
+<%def name="following(repo_id, repo_following)">
+  %if request.authuser.username != 'default':
+    <a href="#" class="${'following' if repo_following else 'follow'}" onclick="return toggleFollowingRepo(this, ${repo_id});"><i class="list-extra icon-heart-empty show-follow" title="${_('Follow')}"></i><i class="list-extra icon-heart show-following" title="${_('Unfollow')}"></i></a>
+  %endif
+</%def>
+
 <%def name="last_change(last_change)">
   <span data-toggle="tooltip" title="${h.fmt_date(last_change)}" date="${last_change}">${h.age(last_change)}</span>
 </%def>
--- a/kallithea/templates/index_base.html	Tue Feb 11 05:17:03 2020 +0100
+++ b/kallithea/templates/index_base.html	Wed Feb 12 14:37:15 2020 +0100
@@ -55,6 +55,7 @@
                             return row.just_name;
                         }
                     }},
+                    {data: "following", defaultContent: '', sortable: false},
                     {data: "desc", title: ${h.jshtml(_('Description'))}, searchable: false},
                     {data: "last_change_iso", defaultContent: '', visible: false, searchable: false},
                     {data: "last_change", defaultContent: '', title: ${h.jshtml(_('Last Change'))}, orderData: [3,], searchable: false},