From 3b16799a46b20609a20a8bc75e8b06f866777544 Mon Sep 17 00:00:00 2001
From: Antoine Lambert <antoine.lambert@inria.fr>
Date: Tue, 6 Feb 2018 15:35:12 +0100
Subject: [PATCH] browse: Add link to revision history in revision view

---
 swh/web/browse/utils.py                       | 39 ++++++++++++++-----
 swh/web/browse/views/revision.py              | 18 +++++----
 .../templates/includes/top-navigation.html    |  2 +-
 swh/web/templates/revision.html               |  4 +-
 4 files changed, 42 insertions(+), 21 deletions(-)

diff --git a/swh/web/browse/utils.py b/swh/web/browse/utils.py
index 3dcbd7138..5ba5f21dc 100644
--- a/swh/web/browse/utils.py
+++ b/swh/web/browse/utils.py
@@ -570,23 +570,17 @@ def gen_origin_directory_link(origin_context, revision_id=None,
     return gen_link(directory_url, link_text, link_attrs)
 
 
-def gen_revision_log_link(revision_id, origin_context=None, link_text=None,
-                          link_attrs={}):
+def get_revision_log_url(revision_id, origin_context=None):
     """
-    Utility function for generating a link to a SWH revision log HTML view
-    (possibly in the context of an origin) to insert in Django templates.
+    Utility function for getting the URL for a SWH revision log HTML view
+    (possibly in the context of an origin).
 
     Args:
         revision_id (str): revision identifier the history heads to
         origin_context (dict): if provided, generate origin-dependent browsing
             link (see :func:`swh.web.browse.utils.get_origin_context`)
-        link_text (str): optional text to use for the generated link
-        link_attrs (dict): optional attributes (e.g. class)
-            to add to the link
-
     Returns:
-        An HTML link in the form
-        '<a href="revision_log_view_url">link_text</a>'
+        The SWH revision log view URL
     """
     if origin_context:
         origin_info = origin_context['origin_info']
@@ -605,6 +599,29 @@ def gen_revision_log_link(revision_id, origin_context=None, link_text=None,
     else:
         revision_log_url = reverse('browse-revision-log',
                                    kwargs={'sha1_git': revision_id})
+    return revision_log_url
+
+
+def gen_revision_log_link(revision_id, origin_context=None, link_text=None,
+                          link_attrs={}):
+    """
+    Utility function for generating a link to a SWH revision log HTML view
+    (possibly in the context of an origin) to insert in Django templates.
+
+    Args:
+        revision_id (str): revision identifier the history heads to
+        origin_context (dict): if provided, generate origin-dependent browsing
+            link (see :func:`swh.web.browse.utils.get_origin_context`)
+        link_text (str): optional text to use for the generated link
+        link_attrs (dict): optional attributes (e.g. class)
+            to add to the link
+
+    Returns:
+        An HTML link in the form
+        '<a href="revision_log_view_url">link_text</a>'
+    """
+
+    revision_log_url = get_revision_log_url(revision_id, origin_context)
     if not link_text:
         link_text = revision_log_url
     return gen_link(revision_log_url, link_text, link_attrs)
@@ -756,6 +773,8 @@ def get_origin_context(origin_type, origin_url, timestamp, visit_id=None):
         'visit_info': visit_info,
         'branches': branches,
         'releases': releases,
+        'branch': None,
+        'release': None,
         'origin_browse_url': origin_browse_url,
         'origin_branches_url': origin_branches_url,
         'origin_releases_url': origin_releases_url,
diff --git a/swh/web/browse/views/revision.py b/swh/web/browse/views/revision.py
index 738e6ea18..c9462ea19 100644
--- a/swh/web/browse/views/revision.py
+++ b/swh/web/browse/views/revision.py
@@ -16,8 +16,8 @@ from swh.web.browse.utils import (
     gen_link, gen_person_link, gen_revision_link,
     prepare_revision_log_for_display,
     get_origin_context, gen_origin_directory_link,
-    gen_revision_log_link, get_directory_entries,
-    gen_directory_link, request_content, prepare_content_for_display
+    get_revision_log_url, get_directory_entries,
+    gen_directory_link, request_content, prepare_content_for_display,
 )
 
 
@@ -82,14 +82,9 @@ def revision_browse(request, sha1_git):
         revision_data['directory'] = \
             gen_origin_directory_link(origin_context, sha1_git,
                                       link_text='Browse')
-        revision_data['history log'] = \
-            gen_revision_log_link(sha1_git, origin_context,
-                                  link_text='Browse')
     else:
         revision_data['directory'] = \
             gen_directory_link(revision['directory'], link_text='Browse')
-        revision_data['history log'] = \
-            gen_revision_log_link(sha1_git, link_text='Browse')
     revision_data['id'] = sha1_git
     revision_data['merge'] = revision['merge']
     revision_data['metadata'] = json.dumps(revision['metadata'],
@@ -169,6 +164,8 @@ def revision_browse(request, sha1_git):
                                kwargs={'sha1_git': sha1_git},
                                query_params=query_params)
 
+    history_url = get_revision_log_url(sha1_git, origin_context)
+
     return render(request, 'revision.html',
                   {'empty_browse': False,
                    'heading': 'Revision information',
@@ -186,7 +183,12 @@ def revision_browse(request, sha1_git):
                    'content': content,
                    'mimetype': mimetype,
                    'language': language,
-                   'breadcrumbs': breadcrumbs})
+                   'breadcrumbs': breadcrumbs,
+                   'top_right_link': history_url,
+                   'top_right_link_text': mark_safe(
+                       '<i class="fa fa-history fa-fw" aria-hidden="true"></i>'
+                       'History'
+                    )})
 
 
 NB_LOG_ENTRIES = 20
diff --git a/swh/web/templates/includes/top-navigation.html b/swh/web/templates/includes/top-navigation.html
index 47bf575eb..629e65a40 100644
--- a/swh/web/templates/includes/top-navigation.html
+++ b/swh/web/templates/includes/top-navigation.html
@@ -1,6 +1,6 @@
 
 <div class="swh-browse-top-navigation">
-  {% if origin_context %}
+  {% if origin_context and origin_context.branch %}
     <div class="dropdown" style="float: left;" id="swh-branches-releases-dd">
       <button class="btn btn-md btn-swh dropdown-toggle" type="button" data-toggle="dropdown">
         {% if origin_context.branch %}
diff --git a/swh/web/templates/revision.html b/swh/web/templates/revision.html
index 88e835fdb..ec7bf29a8 100644
--- a/swh/web/templates/revision.html
+++ b/swh/web/templates/revision.html
@@ -23,8 +23,8 @@
 {{ parents_links }}
 </div>
 
-<div style="padding-bottom:5px; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd;">
-{% include "includes/breadcrumbs.html" %}
+<div style="padding-bottom:5px; border-top: 1px solid #ddd;">
+{% include "includes/top-navigation.html" %}
 </div>
 
 {% if content %}
-- 
GitLab