diff --git a/cypress/integration/revision-diff.spec.js b/cypress/integration/revision-diff.spec.js --- a/cypress/integration/revision-diff.spec.js +++ b/cypress/integration/revision-diff.spec.js @@ -40,6 +40,29 @@ let diffData; let swh; +describe('Test Revision View', function() { + + it('should add/remove #swh-revision-changes url fragment when switching tab', function() { + const url = this.Urls.browse_revision(revision) + `?origin=${origin}`; + cy.visit(url); + cy.get('a[data-toggle="tab"]') + .contains('Changes') + .click(); + cy.hash().should('be.equal', '#swh-revision-changes'); + cy.get('a[data-toggle="tab"]') + .contains('Files') + .click(); + cy.hash().should('be.equal', ''); + }); + + it('should display Changes tab by default when url ends with #swh-revision-changes', function() { + const url = this.Urls.browse_revision(revision) + `?origin=${origin}`; + cy.visit(url + '#swh-revision-changes'); + cy.get('#swh-revision-changes-list') + .should('be.visible'); + }); +}); + describe('Test Diffs View', function() { beforeEach(function() { diff --git a/swh/web/assets/src/bundles/revision/diff-utils.js b/swh/web/assets/src/bundles/revision/diff-utils.js --- a/swh/web/assets/src/bundles/revision/diff-utils.js +++ b/swh/web/assets/src/bundles/revision/diff-utils.js @@ -8,6 +8,7 @@ import 'waypoints/lib/jquery.waypoints'; import {swhSpinnerSrc} from 'utils/constants'; +import {removeUrlFragment} from 'utils/functions'; import diffPanelTemplate from './diff-panel.ejs'; @@ -43,6 +44,8 @@ const lineHighlightColor = '#fdf3da'; // might contain diff lines to highlight parsed from URL fragment let selectedDiffLinesInfo; +// URL fragment to append when switching to 'Changes' tab +const changesUrlFragment = '#swh-revision-changes'; // to check if a DOM element is in the viewport function isInViewport(elt) { @@ -185,6 +188,7 @@ $('.hljs-ln-line[data-line-number]').css('mix-blend-mode', 'initial'); $('.hljs-ln-numbers[data-line-number]').css('color', '#aaa'); $('.hljs-ln-numbers[data-line-number]').css('font-weight', 'initial'); + window.location.hash = changesUrlFragment; } // highlight lines in a diff, return first highlighted line numbers element @@ -657,7 +661,7 @@ // callback when the 'Changes' tab is activated $(document).on('shown.bs.tab', 'a[data-toggle="tab"]', e => { if (e.currentTarget.text.trim() === 'Changes') { - + window.location.hash = changesUrlFragment; $('#readme-panel').css('display', 'none'); if (changes) { @@ -705,6 +709,7 @@ }); } else if (e.currentTarget.text.trim() === 'Files') { + removeUrlFragment(); $('#readme-panel').css('display', 'block'); } }); @@ -765,9 +770,12 @@ selectedDiffLinesInfo = fragmentToSelectedDiffLines(split[1]); if (selectedDiffLinesInfo) { selectedDiffLinesInfo.diffPanelId = split[0]; - $('.nav-tabs a[href="#swh-revision-changes"]').tab('show'); + $(`.nav-tabs a[href="${changesUrlFragment}"]`).tab('show'); } } + if (fragment === changesUrlFragment) { + $(`.nav-tabs a[href="${changesUrlFragment}"]`).tab('show'); + } } });