Support copy file path when hover on path in change table

this will only show the copy icon when hover on file path,
and always copy full file path.

Also removed the underline and show underline only when hover.

And use if template for old path.

screenshot (on current path and old path): https://imgur.com/9497XmL
https://imgur.com/fsqckU6

Bug: Issue 12351
Change-Id: Icd493b7fcb979096ea3044939a218980d4664004
This commit is contained in:
Tao Zhou
2020-02-26 13:30:26 +01:00
parent 09023dfb9d
commit a1f7060610
3 changed files with 48 additions and 10 deletions

View File

@@ -36,6 +36,7 @@ limitations under the License.
<link rel="import" href="../../shared/gr-select/gr-select.html">
<link rel="import" href="../../shared/gr-count-string-formatter/gr-count-string-formatter.html">
<link rel="import" href="../../shared/gr-tooltip-content/gr-tooltip-content.html">
<link rel="import" href="../../shared/gr-copy-clipboard/gr-copy-clipboard.html">
<link rel="import" href="../gr-file-list-constants.html">
<dom-module id="gr-file-list">
@@ -115,14 +116,10 @@ limitations under the License.
.path {
cursor: pointer;
flex: 1;
text-decoration: none;
/* Wrap it into multiple lines if too long. */
white-space: normal;
word-break: break-word;
}
.path:hover :first-child {
text-decoration: underline;
}
.oldPath {
color: var(--deemphasized-text-color);
}
@@ -245,6 +242,26 @@ limitations under the License.
display: inline-block;
margin: -2px 0;
padding: var(--spacing-s) 0;
text-decoration: none;
}
.pathLink:hover {
text-decoration: underline;
}
/** copy on file path **/
.pathLink gr-copy-clipboard,
.oldPath gr-copy-clipboard {
display: inline-block;
visibility: hidden;
vertical-align: bottom;
text-decoration: none;
--gr-button: {
padding: 0px;
}
}
.pathLink:hover gr-copy-clipboard,
.oldPath:hover gr-copy-clipboard {
visibility: visible;
}
/** small screen breakpoint: 768px */
@@ -273,7 +290,7 @@ limitations under the License.
}
.expanded .fullFileName,
.truncatedFileName {
display: block;
display: inline;
}
.expanded .truncatedFileName,
.fullFileName {
@@ -330,11 +347,18 @@ limitations under the License.
class="truncatedFileName">
[[computeTruncatedPath(file.__path)]]
</span>
<gr-copy-clipboard
hide-input
text="[[file.__path]]"></gr-copy-clipboard>
</a>
<div class="oldPath" hidden$="[[!file.old_path]]" hidden
title$="[[file.old_path]]">
[[file.old_path]]
</div>
<template is="dom-if" if="[[file.old_path]]">
<div class="oldPath" title$="[[file.old_path]]">
[[file.old_path]]
<gr-copy-clipboard
hide-input
text="[[file.old_path]]"></gr-copy-clipboard>
</div>
</template>
</span>
<div class="comments desktop">
<span class="drafts">

View File

@@ -53,7 +53,10 @@
Polymer.dom(e).rootTarget.select();
}
_copyToClipboard() {
_copyToClipboard(e) {
e.preventDefault();
e.stopPropagation();
if (this.hideInput) {
this.$.input.style.display = 'block';
}

View File

@@ -90,5 +90,16 @@ limitations under the License.
flushAsynchronousOperations();
assert.equal(getComputedStyle(element.$.input).display, 'none');
});
test('stop events propagation', () => {
const divParent = document.createElement('div');
divParent.appendChild(element);
const clickStub = sinon.stub();
divParent.addEventListener('click', clickStub);
element.stopPropagation = true;
const copyBtn = element.shadowRoot.querySelector('.copyToClipboard');
MockInteractions.tap(copyBtn);
assert.isFalse(clickStub.called);
});
});
</script>