Merge "Fix blinking tooltip"
diff --git a/polygerrit-ui/app/elements/checks/gr-checks-results.ts b/polygerrit-ui/app/elements/checks/gr-checks-results.ts
index 71b8f33..a4ac01d 100644
--- a/polygerrit-ui/app/elements/checks/gr-checks-results.ts
+++ b/polygerrit-ui/app/elements/checks/gr-checks-results.ts
@@ -60,8 +60,8 @@
} from '../../utils/common-util';
import {toggleClass, whenVisible} from '../../utils/dom-util';
import {durationString} from '../../utils/date-util';
-import {charsOnly, pluralize} from '../../utils/string-util';
-import {fireRunSelectionReset, isAttemptSelected} from './gr-checks-util';
+import {charsOnly} from '../../utils/string-util';
+import {isAttemptSelected} from './gr-checks-util';
import {ChecksTabState} from '../../types/events';
import {ConfigInfo, PatchSetNumber} from '../../types/common';
import {latestPatchNum$} from '../../services/change/change-model';
@@ -255,6 +255,7 @@
<div>
<span>${this.result.checkName}</span>
<gr-checks-attempt .run="${this.result}"></gr-checks-attempt>
+ <gr-hovercard-run .run="${this.result}"></gr-hovercard-run>
</div>
</td>
<td class="summaryCol">
@@ -466,6 +467,21 @@
SHOW_ALL_THRESHOLDS.set(Category.INFO, 5);
SHOW_ALL_THRESHOLDS.set(Category.SUCCESS, 5);
+const CATEGORY_TOOLTIPS: Map<Category, string> = new Map();
+CATEGORY_TOOLTIPS.set(Category.ERROR, 'Must be fixed and is blocking submit');
+CATEGORY_TOOLTIPS.set(
+ Category.WARNING,
+ 'Should be checked but is not blocking submit'
+);
+CATEGORY_TOOLTIPS.set(
+ Category.INFO,
+ 'Does not have to be checked, for your information only'
+);
+CATEGORY_TOOLTIPS.set(
+ Category.SUCCESS,
+ 'Successful runs without results and individual successful results'
+);
+
@customElement('gr-checks-results')
export class GrChecksResults extends GrLitElement {
@query('#filterInput')
@@ -599,12 +615,6 @@
.filterDiv .selection {
padding: var(--spacing-s) var(--spacing-m);
}
- .filterDiv iron-icon.filter {
- color: var(--selected-foreground);
- }
- .filterDiv gr-button.reset {
- margin: calc(0px - var(--spacing-s)) var(--spacing-l);
- }
.categoryHeader {
margin-top: var(--spacing-l);
margin-left: var(--spacing-l);
@@ -618,6 +628,9 @@
height: var(--line-height-h3);
margin-right: var(--spacing-s);
}
+ .categoryHeader .statusIconWrapper {
+ display: inline-block;
+ }
.categoryHeader .statusIcon {
position: relative;
top: 2px;
@@ -831,28 +844,10 @@
placeholder="Filter results by regular expression"
@input="${this.onInput}"
/>
- <div class="selection">${this.renderSelectionFilter()}</div>
</div>
`;
}
- renderSelectionFilter() {
- const count = this.selectedRuns.length;
- if (count === 0) return;
- return html`
- <iron-icon class="filter" icon="gr-icons:filter"></iron-icon>
- <span>Filtered by ${pluralize(count, 'run')}</span>
- <gr-button link class="reset" @click="${this.handleClick}"
- >Reset View</gr-button
- >
- `;
- }
-
- handleClick() {
- this.filterRegExp = new RegExp('');
- fireRunSelectionReset(this);
- }
-
onInput() {
assertIsDefined(this.filterInput, 'filter <input> element');
this.filterRegExp = new RegExp(this.filterInput.value, 'i');
@@ -902,11 +897,16 @@
@click="${() => this.toggleExpanded(category)}"
>
<iron-icon class="expandIcon" icon="${icon}"></iron-icon>
- <iron-icon
- icon="gr-icons:${iconForCategory(category)}"
- class="statusIcon ${catString}"
- ></iron-icon>
- <span class="title">${catString}</span>
+ <div class="statusIconWrapper">
+ <iron-icon
+ icon="gr-icons:${iconForCategory(category)}"
+ class="statusIcon ${catString}"
+ ></iron-icon>
+ <span class="title">${catString}</span>
+ <paper-tooltip offset="5"
+ >${CATEGORY_TOOLTIPS.get(category)}</paper-tooltip
+ >
+ </div>
<span class="count"
>${this.renderCount(all, selected, filtered)}</span
>
diff --git a/polygerrit-ui/app/elements/checks/gr-checks-runs.ts b/polygerrit-ui/app/elements/checks/gr-checks-runs.ts
index 1d65546..7346d5b 100644
--- a/polygerrit-ui/app/elements/checks/gr-checks-runs.ts
+++ b/polygerrit-ui/app/elements/checks/gr-checks-runs.ts
@@ -55,7 +55,11 @@
} from '../../services/checks/checks-model';
import {assertIsDefined} from '../../utils/common-util';
import {whenVisible} from '../../utils/dom-util';
-import {fireAttemptSelected, fireRunSelected} from './gr-checks-util';
+import {
+ fireAttemptSelected,
+ fireRunSelected,
+ fireRunSelectionReset,
+} from './gr-checks-util';
import {ChecksTabState} from '../../types/events';
import {charsOnly} from '../../utils/string-util';
@@ -350,6 +354,10 @@
padding: var(--spacing-l) var(--spacing-xl) var(--spacing-xl)
var(--spacing-xl);
}
+ .title {
+ display: flex;
+ justify-content: space-between;
+ }
.expandIcon {
width: var(--line-height-h3);
height: var(--line-height-h3);
@@ -410,7 +418,17 @@
render() {
return html`
- <h2 class="heading-2">Runs</h2>
+ <h2 class="title">
+ <div class="heading-2">Runs</div>
+ <div class="font-normal">
+ <gr-button
+ ?hidden="${this.selectedRuns.length < 2}"
+ link
+ @click="${() => fireRunSelectionReset(this)}"
+ >Unselect All</gr-button
+ >
+ </div>
+ </h2>
<input
id="filterInput"
type="text"
diff --git a/polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls.ts b/polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls.ts
index e78945b..dec5111 100644
--- a/polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls.ts
+++ b/polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls.ts
@@ -123,6 +123,26 @@
/* First button needs to claim width to display without text wrapping. */
position: relative;
}
+
+ paper-button {
+ text-transform: none;
+ align-items: center;
+ background-color: var(--background-color);
+ font-family: inherit;
+ margin: var(--margin, 0);
+ min-width: var(--border, 0);
+ color: var(--diff-context-control-color);
+ border: solid var(--border-color);
+ border-width: 1px;
+ border-radius: var(--border-radius);
+ padding: var(--spacing-s) var(--spacing-l);
+ }
+
+ paper-button:hover {
+ /* same as defined in gr-button */
+ background: rgba(0, 0, 0, 0.12);
+ }
+
.centeredButton {
/* Center over divider. */
top: 50%;
@@ -141,75 +161,23 @@
.aboveButton {
/* Display over preceding content / background placeholder. */
transform: translateY(-100%);
+ border-bottom-width: 1px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+ padding: var(--spacing-xxs) var(--spacing-l);
}
.belowButton {
top: calc(100% + var(--divider-border));
+ border-top-width: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ padding: var(--spacing-xxs) var(--spacing-l);
}
.breadcrumbTooltip {
white-space: nowrap;
}
`;
- // To pass CSS mixins for @apply to Polymer components, they need to be
- // wrapped in a <custom-style>.
- static customStyles = html`
- <custom-style>
- <style>
- .centeredButton {
- --gr-button: {
- color: var(--diff-context-control-color);
- border-style: solid;
- border-color: var(--border-color);
- border-top-width: 1px;
- border-right-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
-
- border-top-left-radius: var(--border-radius);
- border-top-right-radius: var(--border-radius);
- border-bottom-right-radius: var(--border-radius);
- border-bottom-left-radius: var(--border-radius);
- padding: var(--spacing-s) var(--spacing-l);
- }
- }
- .aboveButton {
- --gr-button: {
- color: var(--diff-context-control-color);
- border-style: solid;
- border-color: var(--border-color);
- border-top-width: 1px;
- border-right-width: 1px;
- border-bottom-width: 0;
- border-left-width: 1px;
-
- border-top-left-radius: var(--border-radius);
- border-top-right-radius: var(--border-radius);
- border-bottom-right-radius: 0;
- border-bottom-left-radius: var(--border-radius);
- padding: var(--spacing-xxs) var(--spacing-l);
- }
- }
- .belowButton {
- --gr-button: {
- color: var(--diff-context-control-color);
- border-style: solid;
- border-color: var(--border-color);
- border-top-width: 0;
- border-right-width: 1px;
- border-bottom-width: 1px;
- border-left-width: 1px;
-
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- border-bottom-right-radius: var(--border-radius);
- border-bottom-left-radius: var(--border-radius);
- padding: var(--spacing-xxs) var(--spacing-l);
- }
- }
- </style>
- </custom-style>
- `;
-
connectedCallback() {
super.connectedCallback();
this.setupButtonHoverHandler();
@@ -323,7 +291,7 @@
groups
);
- const mouseHander = (eventType: 'enter' | 'leave') => {
+ const mouseHandler = (eventType: 'enter' | 'leave') => {
this.expandButtonsHover.next({
eventType,
buttonType: type,
@@ -331,18 +299,16 @@
});
};
- const button = html` <gr-button
+ const button = html` <paper-button
class="${classes}"
- link="true"
- no-uppercase="true"
aria-label="${ariaLabel}"
@click="${expandHandler}"
- @mouseenter="${() => mouseHander('enter')}"
- @mouseleave="${() => mouseHander('leave')}"
+ @mouseenter="${() => mouseHandler('enter')}"
+ @mouseleave="${() => mouseHandler('leave')}"
>
<span class="showContext">${text}</span>
${tooltip}
- </gr-button>`;
+ </paper-button>`;
return button;
}
@@ -525,7 +491,7 @@
return html`<p>invalid properties</p>`;
}
return html`
- ${GrContextControls.customStyles} ${this.createExpandAllButtonContainer()}
+ ${this.createExpandAllButtonContainer()}
${this.createPartialExpansionButtons()}
${this.createBlockExpansionButtons()}
`;
diff --git a/polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls_test.ts b/polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls_test.ts
index f59b19d..4e75c82 100644
--- a/polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls_test.ts
+++ b/polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls_test.ts
@@ -60,7 +60,7 @@
await flush();
const buttons = element.shadowRoot!.querySelectorAll(
- 'gr-button.showContext'
+ 'paper-button.showContext'
);
assert.equal(buttons.length, 1);
assert.equal(buttons[0].textContent!.trim(), '+10 common lines');
@@ -73,7 +73,7 @@
await flush();
const buttons = element.shadowRoot!.querySelectorAll(
- 'gr-button.showContext'
+ 'paper-button.showContext'
);
assert.equal(buttons.length, 2);
@@ -92,7 +92,7 @@
await flush();
const buttons = element.shadowRoot!.querySelectorAll(
- 'gr-button.showContext'
+ 'paper-button.showContext'
);
assert.equal(buttons.length, 3);
@@ -112,7 +112,7 @@
await flush();
const buttons = element.shadowRoot!.querySelectorAll(
- 'gr-button.showContext'
+ 'paper-button.showContext'
);
assert.equal(buttons.length, 2);
@@ -138,13 +138,13 @@
await flush();
const fullExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.fullExpansion gr-button'
+ '.fullExpansion paper-button'
);
const partialExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.partialExpansion gr-button'
+ '.partialExpansion paper-button'
);
const blockExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.blockExpansion gr-button'
+ '.blockExpansion paper-button'
);
assert.equal(fullExpansionButtons.length, 1);
assert.equal(partialExpansionButtons.length, 1);
@@ -168,13 +168,13 @@
await flush();
const fullExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.fullExpansion gr-button'
+ '.fullExpansion paper-button'
);
const partialExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.partialExpansion gr-button'
+ '.partialExpansion paper-button'
);
const blockExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.blockExpansion gr-button'
+ '.blockExpansion paper-button'
);
assert.equal(fullExpansionButtons.length, 1);
assert.equal(partialExpansionButtons.length, 2);
@@ -205,13 +205,13 @@
await flush();
const fullExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.fullExpansion gr-button'
+ '.fullExpansion paper-button'
);
const partialExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.partialExpansion gr-button'
+ '.partialExpansion paper-button'
);
const blockExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.blockExpansion gr-button'
+ '.blockExpansion paper-button'
);
assert.equal(fullExpansionButtons.length, 1);
assert.equal(partialExpansionButtons.length, 1);
@@ -246,7 +246,7 @@
await flush();
const blockExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.blockExpansion gr-button'
+ '.blockExpansion paper-button'
);
assert.equal(
blockExpansionButtons[0]
@@ -299,7 +299,7 @@
await flush();
const blockExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.blockExpansion gr-button'
+ '.blockExpansion paper-button'
);
assert.equal(
blockExpansionButtons[0]
@@ -345,7 +345,7 @@
await flush();
const blockExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.blockExpansion gr-button'
+ '.blockExpansion paper-button'
);
assert.equal(
blockExpansionButtons[0]
@@ -364,7 +364,7 @@
await flush();
const blockExpansionButtons = element.shadowRoot!.querySelectorAll(
- '.blockExpansion gr-button'
+ '.blockExpansion paper-button'
);
const tooltipAbove = blockExpansionButtons[0].querySelector(
'paper-tooltip'