Show account emails in fast gr-tooltips rather than slow native tooltips
Feature: Issue 6344
Change-Id: I5d7c7983ac0c86b816f5567026a02730bf175c1a
diff --git a/polygerrit-ui/app/elements/change/gr-message/gr-message.html b/polygerrit-ui/app/elements/change/gr-message/gr-message.html
index 78f59db..cbbe828 100644
--- a/polygerrit-ui/app/elements/change/gr-message/gr-message.html
+++ b/polygerrit-ui/app/elements/change/gr-message/gr-message.html
@@ -14,9 +14,8 @@
limitations under the License.
-->
-<link rel="import" href="../../../behaviors/gr-anonymous-name-behavior/gr-anonymous-name-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
-<link rel="import" href="../../shared/gr-account-link/gr-account-link.html">
+<link rel="import" href="../../shared/gr-account-label/gr-account-label.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
<link rel="import" href="../../shared/gr-formatted-text/gr-formatted-text.html">
@@ -135,6 +134,11 @@
.negativeVote {
box-shadow: inset 0 4.4em #ffd4d4;
}
+ gr-account-label {
+ --gr-account-label-text-style: {
+ font-weight: bold;
+ };
+ }
</style>
<div class$="[[_computeClass(_expanded, showAvatar, message)]]">
<gr-avatar account="[[author]]" image-size="100"></gr-avatar>
@@ -144,7 +148,10 @@
<span class="name">[[message.real_author.name]]</span>
on behalf of
</span>
- <span class="name">[[_authorOrAnon(author)]]</span>
+ <gr-account-label
+ account="[[author]]"
+ show-anonymous
+ hide-avatar></gr-account-label>
</div>
<template is="dom-if" if="[[message.message]]">
<div class="content">
diff --git a/polygerrit-ui/app/elements/change/gr-message/gr-message.js b/polygerrit-ui/app/elements/change/gr-message/gr-message.js
index 2593869..e6a761a 100644
--- a/polygerrit-ui/app/elements/change/gr-message/gr-message.js
+++ b/polygerrit-ui/app/elements/change/gr-message/gr-message.js
@@ -90,10 +90,6 @@
},
},
- behaviors: [
- Gerrit.AnonymousNameBehavior,
- ],
-
observers: [
'_updateExpandedClass(message.expanded)',
],
@@ -235,16 +231,6 @@
this.fire('reply', {message: this.message});
},
- _authorOrAnon(author) {
- if (author && author.name) {
- return author.name;
- } else if (author && author.email) {
- return author.email;
- }
-
- return this.getAnonymousName(this.config);
- },
-
_projectNameChanged(name) {
this.$.restAPI.getProjectConfig(name).then(config => {
this._commentLinks = config.commentlinks;
diff --git a/polygerrit-ui/app/elements/change/gr-message/gr-message_test.html b/polygerrit-ui/app/elements/change/gr-message/gr-message_test.html
index cfeb9cd..aa18c4e 100644
--- a/polygerrit-ui/app/elements/change/gr-message/gr-message_test.html
+++ b/polygerrit-ui/app/elements/change/gr-message/gr-message_test.html
@@ -65,37 +65,6 @@
MockInteractions.tap(element.$$('.replyContainer gr-button'));
});
- test('reviewer update', () => {
- const author = {
- _account_id: 1115495,
- name: 'Andrew Bonventre',
- email: 'andybons@chromium.org',
- };
- const reviewer = {
- _account_id: 123456,
- name: 'Foo Bar',
- email: 'barbar@chromium.org',
- };
- element.message = {
- id: 0xDEADBEEF,
- author,
- reviewer,
- date: '2016-01-12 20:24:49.448000000',
- type: 'REVIEWER_UPDATE',
- updates: [
- {
- message: 'Added to CC:',
- reviewers: [reviewer],
- },
- ],
- };
- flushAsynchronousOperations();
- const content = element.$$('.contentContainer');
- assert.isOk(content);
- assert.strictEqual(element.$$('gr-account-chip').account, reviewer);
- assert.equal(author.name, element.$$('.author > .name').textContent);
- });
-
test('autogenerated prefix hiding', () => {
element.message = {
tag: 'autogenerated:gerrit:test',
@@ -211,27 +180,5 @@
};
assert.isOk(Polymer.dom(element.root).querySelector('.positiveVote'));
});
-
- test('test for Anonymous Coward user and replace with Anonymous', () => {
- element.config = {
- user: {
- anonymous_coward_name: 'Anonymous Coward',
- },
- };
- element.account = {};
- assert.deepEqual(
- element._authorOrAnon(element.account), 'Anonymous');
- });
-
- test('test for anonymous_coward_name', () => {
- element.config = {
- user: {
- anonymous_coward_name: 'TestAnon',
- },
- };
- element.account = {};
- assert.deepEqual(
- element._authorOrAnon(element.account, element.config), 'TestAnon');
- });
});
</script>
diff --git a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.html b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.html
index a93198c..3811a91 100644
--- a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.html
+++ b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.html
@@ -14,8 +14,11 @@
limitations under the License.
-->
+<link rel="import" href="../../../behaviors/gr-anonymous-name-behavior/gr-anonymous-name-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../../behaviors/gr-tooltip-behavior/gr-tooltip-behavior.html">
<link rel="import" href="../gr-avatar/gr-avatar.html">
+<link rel="import" href="../gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../../../styles/shared-styles.html">
<dom-module id="gr-account-label">
@@ -33,15 +36,20 @@
margin-right: .15em;
vertical-align: -.25em;
}
+ .text {
+ @apply(--gr-account-label-text-style);
+ }
.text:hover {
@apply(--gr-account-label-text-hover-style);
}
</style>
- <span title$="[[_computeAccountTitle(account)]]">
- <gr-avatar account="[[account]]"
- image-size="[[avatarImageSize]]"></gr-avatar>
+ <span>
+ <template is="dom-if" if="[[!hideAvatar]]">
+ <gr-avatar account="[[account]]"
+ image-size="[[avatarImageSize]]"></gr-avatar>
+ </template>
<span class="text">
- <span>[[account.name]]</span>
+ <span>[[_computeName(account, _serverConfig, showAnonymous)]]</span>
<span hidden$="[[!_computeShowEmail(showEmail, account)]]">
[[_computeEmailStr(account)]]
</span>
@@ -50,6 +58,7 @@
</template>
</span>
</span>
+ <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
</template>
<script src="../../../scripts/util.js"></script>
<script src="gr-account-label.js"></script>
diff --git a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.js b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.js
index 9ebef82..0071e15 100644
--- a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.js
+++ b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.js
@@ -27,6 +27,50 @@
type: Boolean,
value: false,
},
+ title: {
+ type: String,
+ reflectToAttribute: true,
+ computed: '_computeAccountTitle(account)',
+ },
+ hasTooltip: {
+ type: Boolean,
+ reflectToAttribute: true,
+ computed: '_computeHasTooltip(account)',
+ },
+ hideAvatar: {
+ type: Boolean,
+ value: false,
+ },
+ showAnonymous: {
+ type: Boolean,
+ value: false,
+ },
+ _serverConfig: {
+ type: Object,
+ value: null,
+ },
+ },
+
+ behaviors: [
+ Gerrit.AnonymousNameBehavior,
+ Gerrit.TooltipBehavior,
+ ],
+
+ ready() {
+ if (this.showAnonymous) {
+ this.$.restAPI.getConfig()
+ .then(config => { this._serverConfig = config; });
+ }
+ },
+
+ _computeName(account, config, showAnonymous) {
+ if (account && account.name) {
+ return account.name;
+ }
+ if (showAnonymous) {
+ return this.getAnonymousName(config);
+ }
+ return '';
},
_computeAccountTitle(account) {
@@ -54,5 +98,10 @@
}
return account.email;
},
+
+ _computeHasTooltip(account) {
+ // If an account has loaded to fire this method, then set to true.
+ return !!account;
+ },
});
})();
diff --git a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.html b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.html
index 3b1e1de..7095be3 100644
--- a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.html
@@ -89,5 +89,40 @@
element._computeEmailStr({name: 'test', email: 'test'}), '(test)');
assert.equal(element._computeEmailStr({email: 'test'}, ''), 'test');
});
+
+ suite('_computeName', () => {
+ test('not showing anonymous', () => {
+ const account = {name: 'Wyatt'};
+ assert.deepEqual(element._computeName(account, null, false), 'Wyatt');
+ });
+
+ test('showing anonymous but no config', () => {
+ const account = {};
+ assert.deepEqual(element._computeName(account, null, true),
+ 'Anonymous');
+ });
+
+ test('test for Anonymous Coward user and replace with Anonymous', () => {
+ const config = {
+ user: {
+ anonymous_coward_name: 'Anonymous Coward',
+ },
+ };
+ const account = {};
+ assert.deepEqual(element._computeName(account, config, true),
+ 'Anonymous');
+ });
+
+ test('test for anonymous_coward_name', () => {
+ const config = {
+ user: {
+ anonymous_coward_name: 'TestAnon',
+ },
+ };
+ const account = {};
+ assert.deepEqual(element._computeName(account, config, true),
+ 'TestAnon');
+ });
+ });
});
</script>