diff --git a/components/commit/commit.html b/components/commit/commit.html index 5742b391e..4dc75c99b 100644 --- a/components/commit/commit.html +++ b/components/commit/commit.html @@ -42,10 +42,13 @@ data-bind="text: numberOfRemovedLines" > | - - + + + + | + diff --git a/components/commit/commit.js b/components/commit/commit.js index 5f728e9f4..4ca72f15d 100644 --- a/components/commit/commit.js +++ b/components/commit/commit.js @@ -8,6 +8,7 @@ components.register('commit', (args) => new CommitViewModel(args)); class CommitViewModel { constructor(gitNode) { + this.graph = gitNode.graph; this.repoPath = gitNode.graph.repoPath; this.sha1 = gitNode.sha1; this.server = gitNode.graph.server; @@ -27,6 +28,7 @@ class CommitViewModel { this.fileLineDiffs = ko.observable(); this.numberOfAddedLines = ko.observable(); this.numberOfRemovedLines = ko.observable(); + this.parents = ko.observable(); this.authorGravatar = ko.computed(() => md5((this.authorEmail() || '').trim().toLowerCase())); this.showCommitDiff = ko.computed( @@ -56,6 +58,7 @@ class CommitViewModel { this.authorEmail(args.authorEmail); this.numberOfAddedLines(args.additions); this.numberOfRemovedLines(args.deletions); + this.parents(args.parents || []); this.fileLineDiffs(args.fileLineDiffs); this.commitDiff = ko.observable( components.create('commitDiff', { @@ -88,4 +91,11 @@ class CommitViewModel { copyHash() { navigator.clipboard.writeText(this.sha1); } + + gotoCommit(sha1) { + const node = this.graph.nodesById[sha1]; + if (node) { + node.toggleSelected(); + } + } } diff --git a/components/graph/git-node.js b/components/graph/git-node.js index b7c00eb25..de9e1edcb 100644 --- a/components/graph/git-node.js +++ b/components/graph/git-node.js @@ -251,41 +251,16 @@ class GitNodeViewModel extends Animateable { } toggleSelected() { - const beforeThisCR = this.commitComponent.element().getBoundingClientRect(); - let beforeBelowCR = null; - if (this.belowNode) { - beforeBelowCR = this.belowNode.commitComponent.element().getBoundingClientRect(); - } - - let prevSelected = this.graph.currentActionContext(); - if (!(prevSelected instanceof GitNodeViewModel)) prevSelected = null; - const prevSelectedCR = prevSelected - ? prevSelected.commitComponent.element().getBoundingClientRect() - : null; this.selected(!this.selected()); - - // If we are deselecting - if (!this.selected()) { - if (beforeThisCR.top < 0 && beforeBelowCR) { - const afterBelowCR = this.belowNode.commitComponent.element().getBoundingClientRect(); - // If the next node is showing, try to keep it in the screen (no jumping) - if (beforeBelowCR.top < window.innerHeight) { - window.scrollBy(0, afterBelowCR.top - beforeBelowCR.top); - // Otherwise just try to bring them to the middle of the screen - } else { - window.scrollBy(0, afterBelowCR.top - window.innerHeight / 2); - } - } - // If we are selecting - } else { - const afterThisCR = this.commitComponent.element().getBoundingClientRect(); + if (this.selected()) { + const commitElement = this.commitComponent.element(); + const commitRect = commitElement.getBoundingClientRect(); if ( - prevSelectedCR && - (prevSelectedCR.top < 0 || prevSelectedCR.top > window.innerHeight) && - afterThisCR.top != beforeThisCR.top + commitRect.top < + +window.getComputedStyle(document.documentElement).scrollPaddingTop.replace('px', '') || + commitRect.bottom > document.documentElement.clientHeight ) { - window.scrollBy(0, -(beforeThisCR.top - afterThisCR.top)); - console.log('Fix'); + commitElement.scrollIntoView(); } } return false; diff --git a/components/header/header.less b/components/header/header.less index 736173e8c..17323a959 100644 --- a/components/header/header.less +++ b/components/header/header.less @@ -1,5 +1,10 @@ @import 'public/less/variables.less'; +html { + scroll-behavior: smooth; + scroll-padding-top: 100px; +} + .navbarPadder { height: 81px; } diff --git a/source/git-parser.js b/source/git-parser.js index 822f9627b..0ac798440 100644 --- a/source/git-parser.js +++ b/source/git-parser.js @@ -301,10 +301,10 @@ exports.parseGitSubmodule = (text) => { if (url.indexOf('http') != 0) { if (url.indexOf('git:') == 0) { // git - url = `http${url.substr(url.indexOf(':'))}`; + url = `http${url.substring(url.indexOf(':'))}`; } else { // ssh - url = `http://${url.substr(url.indexOf('@') + 1).replace(':', '/')}`; + url = `http://${url.substring(url.indexOf('@') + 1).replace(':', '/')}`; } }