Merge "Submit Requirements - show overide labels name only when voted on"
diff --git a/polygerrit-ui/app/elements/topic/gr-topic-tree-project.ts b/polygerrit-ui/app/elements/topic/gr-topic-tree-repo.ts
similarity index 76%
rename from polygerrit-ui/app/elements/topic/gr-topic-tree-project.ts
rename to polygerrit-ui/app/elements/topic/gr-topic-tree-repo.ts
index c3fed91..d5bf096 100644
--- a/polygerrit-ui/app/elements/topic/gr-topic-tree-project.ts
+++ b/polygerrit-ui/app/elements/topic/gr-topic-tree-repo.ts
@@ -19,26 +19,26 @@
 import {customElement, property} from 'lit/decorators';
 import {LitElement, html} from 'lit-element/lit-element';
 import '../shared/gr-button/gr-button';
-import {ChangeInfo} from '../../api/rest-api';
+import {ChangeInfo, RepoName} from '../../api/rest-api';
 
 /**
- * A view of changes that all belong to the same project.
+ * A view of changes that all belong to the same repository.
  */
-@customElement('gr-topic-tree-project')
-export class GrTopicTreeProject extends LitElement {
+@customElement('gr-topic-tree-repo')
+export class GrTopicTreeRepo extends LitElement {
   @property({type: String})
-  projectName?: string;
+  repoName?: RepoName;
 
   @property({type: Array})
   changes?: ChangeInfo[];
 
   override render() {
-    if (this.projectName === undefined || this.changes === undefined) {
+    if (this.repoName === undefined || this.changes === undefined) {
       return;
     }
-    // TODO: Groups of related changes should be separated within the project.
+    // TODO: Groups of related changes should be separated within the repository.
     return html`
-      <h2>Project ${this.projectName}</h2>
+      <h2>Repo ${this.repoName}</h2>
       ${this.changes.map(change => this.renderTreeRow(change))}
     `;
   }
@@ -50,6 +50,6 @@
 
 declare global {
   interface HTMLElementTagNameMap {
-    'gr-topic-tree-project': GrTopicTreeProject;
+    'gr-topic-tree-repo': GrTopicTreeRepo;
   }
 }
diff --git a/polygerrit-ui/app/elements/topic/gr-topic-tree-project_test.ts b/polygerrit-ui/app/elements/topic/gr-topic-tree-repo_test.ts
similarity index 69%
rename from polygerrit-ui/app/elements/topic/gr-topic-tree-project_test.ts
rename to polygerrit-ui/app/elements/topic/gr-topic-tree-repo_test.ts
index 39398bd..2e903b5 100644
--- a/polygerrit-ui/app/elements/topic/gr-topic-tree-project_test.ts
+++ b/polygerrit-ui/app/elements/topic/gr-topic-tree-repo_test.ts
@@ -15,27 +15,28 @@
  * limitations under the License.
  */
 
+import {RepoName} from '../../api/rest-api';
 import '../../test/common-test-setup-karma';
 import {createChange} from '../../test/test-data-generators';
 import {queryAndAssert} from '../../test/test-utils';
-import './gr-topic-tree-project';
-import {GrTopicTreeProject} from './gr-topic-tree-project';
+import './gr-topic-tree-repo';
+import {GrTopicTreeRepo} from './gr-topic-tree-repo';
 
-const basicFixture = fixtureFromElement('gr-topic-tree-project');
-const projectName = 'myProject';
+const basicFixture = fixtureFromElement('gr-topic-tree-repo');
+const repoName = 'myRepo' as RepoName;
 
-suite('gr-topic-tree-project tests', () => {
-  let element: GrTopicTreeProject;
+suite('gr-topic-tree-repo tests', () => {
+  let element: GrTopicTreeRepo;
 
   setup(async () => {
     element = basicFixture.instantiate();
-    element.projectName = projectName;
+    element.repoName = repoName;
     element.changes = [createChange()];
     await element.updateComplete;
   });
 
-  test('shows project name', () => {
+  test('shows repository name', () => {
     const heading = queryAndAssert<HTMLHeadingElement>(element, 'h2');
-    assert.equal(heading.textContent, `Project ${projectName}`);
+    assert.equal(heading.textContent, `Repo ${repoName}`);
   });
 });
diff --git a/polygerrit-ui/app/elements/topic/gr-topic-tree.ts b/polygerrit-ui/app/elements/topic/gr-topic-tree.ts
index da67e26..f5140f6 100644
--- a/polygerrit-ui/app/elements/topic/gr-topic-tree.ts
+++ b/polygerrit-ui/app/elements/topic/gr-topic-tree.ts
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import './gr-topic-tree-project';
+import './gr-topic-tree-repo';
 import {customElement, property, state} from 'lit/decorators';
 import {LitElement, html, PropertyValues} from 'lit-element/lit-element';
 import {getAppContext} from '../../services/app-context';
@@ -24,7 +24,7 @@
 
 /**
  * A tree-like dashboard showing changes related to a topic, organized by
- * project.
+ * repository.
  */
 @customElement('gr-topic-tree')
 export class GrTopicTree extends LitElement {
@@ -32,7 +32,7 @@
   topicName?: string;
 
   @state()
-  private changesByProject = new Map<RepoName, ChangeInfo[]>();
+  private changesByRepo = new Map<RepoName, ChangeInfo[]>();
 
   private restApiService = getAppContext().restApiService;
 
@@ -45,17 +45,17 @@
 
   override render() {
     // TODO: organize into <table> for column alignment.
-    return Array.from(this.changesByProject).map(([projectName, changes]) =>
-      this.renderProjectSection(projectName, changes)
+    return Array.from(this.changesByRepo).map(([repoName, changes]) =>
+      this.renderRepoSection(repoName, changes)
     );
   }
 
-  private renderProjectSection(projectName: RepoName, changes: ChangeInfo[]) {
+  private renderRepoSection(repoName: RepoName, changes: ChangeInfo[]) {
     return html`
-      <gr-topic-tree-project
-        .projectName=${projectName}
+      <gr-topic-tree-repo
+        .repoName=${repoName}
         .changes=${changes}
-      ></gr-topic-tree-project>
+      ></gr-topic-tree-repo>
     `;
   }
 
@@ -67,12 +67,12 @@
     if (!changes) {
       return;
     }
-    this.changesByProject.clear();
+    this.changesByRepo.clear();
     for (const change of changes) {
-      if (this.changesByProject.has(change.project)) {
-        this.changesByProject.get(change.project)!.push(change);
+      if (this.changesByRepo.has(change.project)) {
+        this.changesByRepo.get(change.project)!.push(change);
       } else {
-        this.changesByProject.set(change.project, [change]);
+        this.changesByRepo.set(change.project, [change]);
       }
     }
     this.requestUpdate();
diff --git a/polygerrit-ui/app/elements/topic/gr-topic-tree_test.ts b/polygerrit-ui/app/elements/topic/gr-topic-tree_test.ts
index f214520..a2873d9 100644
--- a/polygerrit-ui/app/elements/topic/gr-topic-tree_test.ts
+++ b/polygerrit-ui/app/elements/topic/gr-topic-tree_test.ts
@@ -21,49 +21,53 @@
 import {queryAll, stubRestApi} from '../../test/test-utils';
 import './gr-topic-tree';
 import {GrTopicTree} from './gr-topic-tree';
-import {GrTopicTreeProject} from './gr-topic-tree-project';
+import {GrTopicTreeRepo} from './gr-topic-tree-repo';
 
 const basicFixture = fixtureFromElement('gr-topic-tree');
 
-function createChangeForProject(projectName: string): ChangeInfo {
-  return {...createChange(), project: projectName as RepoName};
+const repo1Name = 'repo1' as RepoName;
+const repo2Name = 'repo2' as RepoName;
+const repo3Name = 'repo3' as RepoName;
+
+function createChangeForRepo(repoName: string): ChangeInfo {
+  return {...createChange(), project: repoName as RepoName};
 }
 
 suite('gr-topic-tree tests', () => {
   let element: GrTopicTree;
-  const project1Changes = [
-    createChangeForProject('project1'),
-    createChangeForProject('project1'),
+  const repo1Changes = [
+    createChangeForRepo(repo1Name),
+    createChangeForRepo(repo1Name),
   ];
-  const project2Changes = [
-    createChangeForProject('project2'),
-    createChangeForProject('project2'),
+  const repo2Changes = [
+    createChangeForRepo(repo2Name),
+    createChangeForRepo(repo2Name),
   ];
-  const project3Changes = [
-    createChangeForProject('project3'),
-    createChangeForProject('project3'),
+  const repo3Changes = [
+    createChangeForRepo(repo3Name),
+    createChangeForRepo(repo3Name),
   ];
 
   setup(async () => {
     stubRestApi('getChanges')
       .withArgs(undefined, 'topic:myTopic')
-      .resolves([...project1Changes, ...project2Changes, ...project3Changes]);
+      .resolves([...repo1Changes, ...repo2Changes, ...repo3Changes]);
     element = basicFixture.instantiate();
     element.topicName = 'myTopic';
     await element.updateComplete;
   });
 
-  test('groups changes by project', () => {
-    const projectSections = queryAll<GrTopicTreeProject>(
+  test('groups changes by repo', () => {
+    const repoSections = queryAll<GrTopicTreeRepo>(
       element,
-      'gr-topic-tree-project'
+      'gr-topic-tree-repo'
     );
-    assert.lengthOf(projectSections, 3);
-    assert.equal(projectSections[0].projectName, 'project1');
-    assert.sameMembers(projectSections[0].changes!, project1Changes);
-    assert.equal(projectSections[1].projectName, 'project2');
-    assert.sameMembers(projectSections[1].changes!, project2Changes);
-    assert.equal(projectSections[2].projectName, 'project3');
-    assert.sameMembers(projectSections[2].changes!, project3Changes);
+    assert.lengthOf(repoSections, 3);
+    assert.equal(repoSections[0].repoName, repo1Name);
+    assert.sameMembers(repoSections[0].changes!, repo1Changes);
+    assert.equal(repoSections[1].repoName, repo2Name);
+    assert.sameMembers(repoSections[1].changes!, repo2Changes);
+    assert.equal(repoSections[2].repoName, repo3Name);
+    assert.sameMembers(repoSections[2].changes!, repo3Changes);
   });
 });
diff --git a/polygerrit-ui/app/utils/dom-util.ts b/polygerrit-ui/app/utils/dom-util.ts
index bd0f742..2c38276 100644
--- a/polygerrit-ui/app/utils/dom-util.ts
+++ b/polygerrit-ui/app/utils/dom-util.ts
@@ -454,7 +454,10 @@
     // Suppress shortcuts if the key is 'enter'
     // and target is an anchor or button or paper-tab.
     (e.keyCode === 13 &&
-      (tagName === 'A' || tagName === 'BUTTON' || tagName === 'PAPER-TAB'))
+      (tagName === 'A' ||
+        tagName === 'BUTTON' ||
+        tagName === 'GR-BUTTON' ||
+        tagName === 'PAPER-TAB'))
   ) {
     return true;
   }
diff --git a/polygerrit-ui/app/utils/dom-util_test.ts b/polygerrit-ui/app/utils/dom-util_test.ts
index e139805..28157d9 100644
--- a/polygerrit-ui/app/utils/dom-util_test.ts
+++ b/polygerrit-ui/app/utils/dom-util_test.ts
@@ -326,6 +326,15 @@
       });
     });
 
+    test('suppress "enter" shortcut event from <gr-button>', async () => {
+      await keyEventOn(
+        document.createElement('gr-button'),
+        e => assert.isTrue(shouldSuppress(e)),
+        13,
+        'enter'
+      );
+    });
+
     test('suppress "enter" shortcut event from <a>', async () => {
       await keyEventOn(document.createElement('a'), e => {
         assert.isFalse(shouldSuppress(e));