From c35531dd118ad8fe8ff0c7aa27bb925fb46f09af Mon Sep 17 00:00:00 2001 From: Neel <47709856+neel1996@users.noreply.github.com> Date: Thu, 13 Oct 2022 14:01:10 +0530 Subject: [PATCH] Fix #21406: Hide repo information from file view/blame mode (#21420) # Summary The repo information such as description, stats and topics are getting displayed in the top-bar when viewing a file. This has been fixed to display the repo information only while navigating the repo and not while viewing or blaming a file from the repo ## Before fix Screenshot from the issue  ## After the fix - **Repo homepage** The repo description, topics and summary will be displayed  - **When opening a file** The repo description, topic and summary has been conditionally hidden from the view <img width="1311" alt="image" src="https://user-images.githubusercontent.com/47709856/195278964-9479231c-62ad-4c0e-b438-2018f22289db.png"> - **When running blame on a file** > This was originally not part of the issue #21406. However the fix seems relevant for the blame view as well. <img width="1312" alt="image" src="https://user-images.githubusercontent.com/47709856/195279619-02010775-aec3-4c8d-a184-d2d838c797e8.png"> - **From within a directory** The repo description, topics and summary will not be displayed  Supporting integration tests have also been added. --- routers/web/repo/view.go | 2 + templates/repo/home.tmpl | 2 + templates/repo/sub_menu.tmpl | 2 + tests/integration/repo_test.go | 79 +++++++++++++++++++++++++++++++++- 4 files changed, 83 insertions(+), 2 deletions(-) diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index a43840467d..3e869376ee 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -119,6 +119,7 @@ func renderDirectory(ctx *context.Context, treeLink string) { } if ctx.Repo.TreePath != "" { + ctx.Data["HideRepoInfo"] = true ctx.Data["Title"] = ctx.Tr("repo.file.title", ctx.Repo.Repository.Name+"/"+path.Base(ctx.Repo.TreePath), ctx.Repo.RefName) } @@ -360,6 +361,7 @@ func renderReadmeFile(ctx *context.Context, readmeFile *namedBlob, readmeTreelin func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink string) { ctx.Data["IsViewFile"] = true + ctx.Data["HideRepoInfo"] = true blob := entry.Blob() dataRc, err := blob.DataAsync() if err != nil { diff --git a/templates/repo/home.tmpl b/templates/repo/home.tmpl index e1aa1c4f3b..9d4842579f 100644 --- a/templates/repo/home.tmpl +++ b/templates/repo/home.tmpl @@ -3,6 +3,7 @@ {{template "repo/header" .}} <div class="ui container {{if .IsBlame}}fluid padded{{end}}"> {{template "base/alert" .}} + {{if and (not .HideRepoInfo) (not .IsBlame)}} <div class="ui repo-description"> <div id="repo-desc"> {{$description := .Repository.DescriptionHTML $.Context}} @@ -31,6 +32,7 @@ {{range .Topics}}<a class="ui repo-topic large label topic" href="{{AppSubUrl}}/explore/repos?q={{.Name}}&topic=1">{{.Name}}</a>{{end}} {{if and .Permission.IsAdmin (not .Repository.IsArchived)}}<a id="manage_topic" class="muted">{{.locale.Tr "repo.topic.manage_topics"}}</a>{{end}} </div> + {{end}} {{if and .Permission.IsAdmin (not .Repository.IsArchived)}} <div class="ui repo-topic-edit grid form" id="topic_edit" style="display:none"> <div class="fourteen wide column"> diff --git a/templates/repo/sub_menu.tmpl b/templates/repo/sub_menu.tmpl index e63cb50df1..fac8e5ac99 100644 --- a/templates/repo/sub_menu.tmpl +++ b/templates/repo/sub_menu.tmpl @@ -1,3 +1,4 @@ +{{if and (not .HideRepoInfo) (not .IsBlame)}} <div class="ui segments repository-summary{{if and (.Permission.CanRead $.UnitTypeCode) (not .IsEmptyRepo) .LanguageStats}} repository-summary-language-stats{{end}} mt-2 mb-0"> <div class="ui segment sub-menu repository-menu"> <div class="ui two horizontal center link list"> @@ -44,3 +45,4 @@ </a> {{end}} </div> +{{end}} diff --git a/tests/integration/repo_test.go b/tests/integration/repo_test.go index 8dfa9d08f1..8e494a9af4 100644 --- a/tests/integration/repo_test.go +++ b/tests/integration/repo_test.go @@ -22,13 +22,24 @@ import ( func TestViewRepo(t *testing.T) { defer tests.PrepareTestEnv(t)() + session := loginUser(t, "user2") + req := NewRequest(t, "GET", "/user2/repo1") - MakeRequest(t, req, http.StatusOK) + resp := session.MakeRequest(t, req, http.StatusOK) + + htmlDoc := NewHTMLParser(t, resp.Body) + noDescription := htmlDoc.doc.Find("#repo-desc").Children() + repoTopics := htmlDoc.doc.Find("#repo-topics").Children() + repoSummary := htmlDoc.doc.Find(".repository-summary").Children() + + assert.True(t, noDescription.HasClass("no-description")) + assert.True(t, repoTopics.HasClass("repo-topic")) + assert.True(t, repoSummary.HasClass("repository-menu")) req = NewRequest(t, "GET", "/user3/repo3") MakeRequest(t, req, http.StatusNotFound) - session := loginUser(t, "user1") + session = loginUser(t, "user1") session.MakeRequest(t, req, http.StatusNotFound) } @@ -178,7 +189,71 @@ func TestViewAsRepoAdmin(t *testing.T) { htmlDoc := NewHTMLParser(t, resp.Body) noDescription := htmlDoc.doc.Find("#repo-desc").Children() + repoTopics := htmlDoc.doc.Find("#repo-topics").Children() + repoSummary := htmlDoc.doc.Find(".repository-summary").Children() assert.Equal(t, expectedNoDescription, noDescription.HasClass("no-description")) + assert.True(t, repoTopics.HasClass("repo-topic")) + assert.True(t, repoSummary.HasClass("repository-menu")) } } + +// TestViewFileInRepo repo description, topics and summary should not be displayed when viewing a file +func TestViewFileInRepo(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + session := loginUser(t, "user2") + + req := NewRequest(t, "GET", "/user2/repo1/src/branch/master/README.md") + resp := session.MakeRequest(t, req, http.StatusOK) + + htmlDoc := NewHTMLParser(t, resp.Body) + description := htmlDoc.doc.Find("#repo-desc") + repoTopics := htmlDoc.doc.Find("#repo-topics") + repoSummary := htmlDoc.doc.Find(".repository-summary") + + assert.EqualValues(t, 0, description.Length()) + assert.EqualValues(t, 0, repoTopics.Length()) + assert.EqualValues(t, 0, repoSummary.Length()) +} + +// TestBlameFileInRepo repo description, topics and summary should not be displayed when running blame on a file +func TestBlameFileInRepo(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + session := loginUser(t, "user2") + + req := NewRequest(t, "GET", "/user2/repo1/blame/branch/master/README.md") + resp := session.MakeRequest(t, req, http.StatusOK) + + htmlDoc := NewHTMLParser(t, resp.Body) + description := htmlDoc.doc.Find("#repo-desc") + repoTopics := htmlDoc.doc.Find("#repo-topics") + repoSummary := htmlDoc.doc.Find(".repository-summary") + + assert.EqualValues(t, 0, description.Length()) + assert.EqualValues(t, 0, repoTopics.Length()) + assert.EqualValues(t, 0, repoSummary.Length()) +} + +// TestViewRepoDirectory repo description, topics and summary should not be displayed when within a directory +func TestViewRepoDirectory(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + session := loginUser(t, "user2") + + req := NewRequest(t, "GET", "/user2/repo20/src/branch/master/a") + resp := session.MakeRequest(t, req, http.StatusOK) + + htmlDoc := NewHTMLParser(t, resp.Body) + description := htmlDoc.doc.Find("#repo-desc") + repoTopics := htmlDoc.doc.Find("#repo-topics") + repoSummary := htmlDoc.doc.Find(".repository-summary") + + repoFilesTable := htmlDoc.doc.Find("#repo-files-table") + assert.NotZero(t, len(repoFilesTable.Nodes)) + + assert.Zero(t, description.Length()) + assert.Zero(t, repoTopics.Length()) + assert.Zero(t, repoSummary.Length()) +}