Gerrit: Fixup gr-message to support anon user (ie a user with no name)
It was showing the user with no name. So users that don't have an
avatar would be invisible. Use a fallback name like we do with the
account dropdown.
See https://gerrit-review.googlesource.com/c/111815/?polygerrit=1
Change-Id: I853d450718e7bd7a9b1555a0c93740a0beea2447
diff --git a/polygerrit-ui/app/behaviors/gr-anonymous-name-behavior/gr-anonymous-name-behavior.html b/polygerrit-ui/app/behaviors/gr-anonymous-name-behavior/gr-anonymous-name-behavior.html
new file mode 100644
index 0000000..9fd7f10
--- /dev/null
+++ b/polygerrit-ui/app/behaviors/gr-anonymous-name-behavior/gr-anonymous-name-behavior.html
@@ -0,0 +1,38 @@
+<!--
+Copyright (C) 2017 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<script>
+(function(window) {
+ 'use strict';
+
+ const ANONYMOUS_NAME = 'Anonymous';
+
+ /** @polymerBehavior Gerrit.AnonymousNameBehavior */
+ const AnonymousNameBehavior = {
+ getAnonymousName(config) {
+ if (config && config.user &&
+ config.user.anonymous_coward_name !== 'Anonymous Coward') {
+ return config.user.anonymous_coward_name;
+ }
+
+ return ANONYMOUS_NAME;
+ },
+ };
+
+ window.Gerrit = window.Gerrit || {};
+ window.Gerrit.AnonymousNameBehavior = AnonymousNameBehavior;
+})(window);
+</script>
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 d30a888..d034f16 100644
--- a/polygerrit-ui/app/elements/change/gr-message/gr-message.html
+++ b/polygerrit-ui/app/elements/change/gr-message/gr-message.html
@@ -14,6 +14,7 @@
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-button/gr-button.html">
@@ -143,7 +144,7 @@
<span class="name">[[message.real_author.name]]</span>
on behalf of
</span>
- <span class="name">[[author.name]]</span>
+ <span class="name">[[_authorOrAnon(author)]]</span>
</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 c196051..3a3931a 100644
--- a/polygerrit-ui/app/elements/change/gr-message/gr-message.js
+++ b/polygerrit-ui/app/elements/change/gr-message/gr-message.js
@@ -86,6 +86,10 @@
},
},
+ behaviors: [
+ Gerrit.AnonymousNameBehavior,
+ ],
+
observers: [
'_updateExpandedClass(message.expanded)',
],
@@ -226,5 +230,15 @@
e.preventDefault();
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);
+ },
});
})();
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 07f13dc..cfeb9cd 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
@@ -211,5 +211,27 @@
};
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/core/gr-account-dropdown/gr-account-dropdown.html b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.html
index 4fc12b5..85db3a1 100644
--- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.html
+++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.html
@@ -14,6 +14,7 @@
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-button/gr-button.html">
<link rel="import" href="../../shared/gr-dropdown/gr-dropdown.html">
@@ -40,7 +41,7 @@
items=[[links]]
top-content=[[topContent]]
horizontal-align="right">
- <span hidden$="[[_hasAvatars]]" hidden>[[_accountName(account, _anonymousName)]]</span>
+ <span hidden$="[[_hasAvatars]]" hidden>[[_accountName(account)]]</span>
<gr-avatar account="[[account]]" hidden$="[[!_hasAvatars]]" hidden
image-size="56" aria-label="Account avatar"></gr-avatar>
</gr-dropdown>
diff --git a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js
index 318794f..2d740d5 100644
--- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js
+++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.js
@@ -16,24 +16,19 @@
const INTERPOLATE_URL_PATTERN = /\$\{([\w]+)\}/g;
- const ANONYMOUS_NAME = 'Anonymous';
-
Polymer({
is: 'gr-account-dropdown',
properties: {
account: Object,
- _anonymousName: {
- type: String,
- value: ANONYMOUS_NAME,
- },
+ config: Object,
links: {
type: Array,
computed: '_getLinks(_switchAccountUrl, _path)',
},
topContent: {
type: Array,
- computed: '_getTopContent(account, _anonymousName)',
+ computed: '_getTopContent(account)',
},
_path: {
type: String,
@@ -47,21 +42,21 @@
this._handleLocationChange();
this.listen(window, 'location-change', '_handleLocationChange');
this.$.restAPI.getConfig().then(cfg => {
+ this.config = cfg;
+
if (cfg && cfg.auth && cfg.auth.switch_account_url) {
this._switchAccountUrl = cfg.auth.switch_account_url;
} else {
this._switchAccountUrl = null;
}
this._hasAvatars = !!(cfg && cfg.plugin && cfg.plugin.has_avatars);
-
- if (cfg && cfg.user &&
- cfg.user.anonymous_coward_name &&
- cfg.user.anonymous_coward_name !== 'Anonymous Coward') {
- this._anonymousName = cfg.user.anonymous_coward_name;
- }
});
},
+ behaviors: [
+ Gerrit.AnonymousNameBehavior,
+ ],
+
detached() {
this.unlisten(window, 'location-change', '_handleLocationChange');
},
@@ -77,9 +72,9 @@
return links;
},
- _getTopContent(account, _anonymousName) {
+ _getTopContent(account) {
return [
- {text: this._accountName(account, _anonymousName), bold: true},
+ {text: this._accountName(account), bold: true},
{text: account.email ? account.email : ''},
];
},
@@ -97,13 +92,14 @@
});
},
- _accountName(account, _anonymousName) {
+ _accountName(account) {
if (account && account.name) {
return account.name;
} else if (account && account.email) {
return account.email;
}
- return _anonymousName;
+
+ return this.getAnonymousName(this.config);
},
});
})();
diff --git a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html
index 6bda66f..6017cb9 100644
--- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html
+++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_test.html
@@ -55,14 +55,22 @@
});
test('test for account without a name but using config', () => {
- element._anonymousName = 'WikiGerrit';
+ element.config = {
+ user: {
+ anonymous_coward_name: 'WikiGerrit',
+ },
+ };
element.account = {id: '0001'};
assert.deepEqual(element.topContent,
[{text: 'WikiGerrit', bold: true}, {text: ''}]);
});
test('test for account name as an email', () => {
- element._anonymousName = 'WikiGerrit';
+ element.config = {
+ user: {
+ anonymous_coward_name: 'WikiGerrit',
+ },
+ };
element.account = {email: 'john@doe.com'};
assert.deepEqual(element.topContent,
[{text: 'john@doe.com', bold: true}, {text: 'john@doe.com'}]);