Add raw diff download link to PG diff-view
A dependent change added the ability to download a single file diff to
Gerrit. This change utilizes that new feature via a download link in the
diff-view.
Feature: Issue 4669
Change-Id: I87ef2324ff2cd7fab6eb4b2e066dd08defe7c4f0
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.html b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.html
index ec37c06..4770340 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.html
@@ -17,6 +17,7 @@
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../bower_components/iron-dropdown/iron-dropdown.html">
<link rel="import" href="../../../behaviors/keyboard-shortcut-behavior.html">
+<link rel="import" href="../../../behaviors/rest-client-behavior.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-overlay/gr-overlay.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
@@ -43,13 +44,17 @@
display: flex;
justify-content: space-between;
}
+ .patchRangeLeft {
+ display: flex;
+ }
.titleHeader {
padding: .75em var(--default-horizontal-margin);
}
.patchRangeHeader {
margin: 0 var(--default-horizontal-margin) .75em;
}
- .navLink:not([href]) {
+ .navLink:not([href]),
+ .downloadLink:not([href]) {
color: #999;
}
.reviewed {
@@ -119,6 +124,9 @@
#modeSelect {
margin-left: .5em;
}
+ .separator {
+ margin: 0 .25em;
+ }
@media screen and (max-width: 50em) {
.dash {
display: none;
@@ -194,13 +202,20 @@
</div>
<div class="loading" hidden$="[[!_loading]]">Loading...</div>
<div class="patchRangeHeader" hidden hidden$="[[_loading]]">
- <gr-patch-range-select
- path="[[_path]]"
- change-num="[[_changeNum]]"
- patch-range="[[_patchRange]]"
- files-weblinks="[[_filesWeblinks]]"
- available-patches="[[_computeAvailablePatches(_change.revisions)]]">
- </gr-patch-range-select>
+ <div class="patchRangeLeft">
+ <gr-patch-range-select
+ path="[[_path]]"
+ change-num="[[_changeNum]]"
+ patch-range="[[_patchRange]]"
+ files-weblinks="[[_filesWeblinks]]"
+ available-patches="[[_computeAvailablePatches(_change.revisions)]]">
+ </gr-patch-range-select>
+ <span class="separator">/</span>
+ <a class="downloadLink"
+ href$="[[_computeDownloadLink(_changeNum, _patchRange, _path)]]">
+ Download
+ </a>
+ </div>
<div>
<select
id="modeSelect"
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
index a1060ab..7c5001d 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
@@ -91,6 +91,7 @@
behaviors: [
Gerrit.KeyboardShortcutBehavior,
+ Gerrit.RESTClientBehavior,
],
observers: [
@@ -551,5 +552,11 @@
_handleDropdownChange: function(e) {
e.target.blur();
},
+
+ _computeDownloadLink: function(changeNum, patchRange, path) {
+ var url = this.changeBaseURL(changeNum, patchRange.patchNum);
+ url += '/patch?zip&path=' + encodeURIComponent(path);
+ return url;
+ },
});
})();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html
index 893f907..b0a0666 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html
@@ -379,6 +379,19 @@
assert.equal(linkEls[1].getAttribute('href'), '/c/42/10/glados.txt');
});
+ test('download link', function() {
+ element._changeNum = '42';
+ element._patchRange = {
+ basePatchNum: 'PARENT',
+ patchNum: '10',
+ };
+ element._fileList = ['chell.go', 'glados.txt', 'wheatley.md'];
+ element._path = 'glados.txt';
+ flushAsynchronousOperations();
+ assert.equal(element.$$('.downloadLink').getAttribute('href'),
+ '/changes/42/revisions/10/patch?zip&path=glados.txt');
+ });
+
test('prev/next links with patch range', function() {
element._changeNum = '42';
element._patchRange = {