
If the user adds a group with a size greater than the configured addreviewer.maxWithoutConfirmation limit, Gerrit will show a confirm dialog (nested within the reply dialog) to prevent accidentally adding large numbers of reviewers. When it was first implemented in I0a61819e78, the dialog enabled the overlay backdrop (in addition to the reply dialog backdrop), but that backdrop was either not working initially, or it stopped appearing in the intervening time. Problematically, newer versions of iron-overlay-behavior will attempt to honor the backdrop option in the nested dialog, but does so in such a way that the overlay appears over the dialog, and the buttons are not clickable. With this change, the backdrop is disabled. Bug: Issue 8353 Change-Id: Ia30613f4ea99edde6d5c9a1c2261e8b5e16d32b4
295 lines
10 KiB
HTML
295 lines
10 KiB
HTML
<!--
|
|
Copyright (C) 2015 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.
|
|
-->
|
|
|
|
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
|
<link rel="import" href="../../../behaviors/base-url-behavior/base-url-behavior.html">
|
|
<link rel="import" href="../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.html">
|
|
<link rel="import" href="../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.html">
|
|
<link rel="import" href="../../../behaviors/rest-client-behavior/rest-client-behavior.html">
|
|
<link rel="import" href="../../../bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html">
|
|
<link rel="import" href="../../plugins/gr-endpoint-decorator/gr-endpoint-decorator.html">
|
|
<link rel="import" href="../../shared/gr-account-chip/gr-account-chip.html">
|
|
<link rel="import" href="../../shared/gr-textarea/gr-textarea.html">
|
|
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
|
<link rel="import" href="../../shared/gr-formatted-text/gr-formatted-text.html">
|
|
<link rel="import" href="../../shared/gr-js-api-interface/gr-js-api-interface.html">
|
|
<link rel="import" href="../../shared/gr-overlay/gr-overlay.html">
|
|
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
|
<link rel="import" href="../../shared/gr-storage/gr-storage.html">
|
|
<link rel="import" href="../gr-account-list/gr-account-list.html">
|
|
<link rel="import" href="../gr-label-scores/gr-label-scores.html">
|
|
<link rel="import" href="../../../styles/shared-styles.html">
|
|
|
|
<dom-module id="gr-reply-dialog">
|
|
<template>
|
|
<style include="shared-styles">
|
|
:host {
|
|
display: block;
|
|
max-height: 100%;
|
|
}
|
|
:host([disabled]) {
|
|
pointer-events: none;
|
|
}
|
|
:host([disabled]) .container {
|
|
opacity: .5;
|
|
}
|
|
.container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
max-height: 100%;
|
|
}
|
|
section {
|
|
border-top: 1px solid #cdcdcd;
|
|
flex-shrink: 0;
|
|
padding: .5em 1.5em;
|
|
width: 100%;
|
|
}
|
|
.actions {
|
|
background-color: var(--view-background-color);
|
|
bottom: 0;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
position: sticky;
|
|
}
|
|
.actions .right gr-button {
|
|
margin-left: 1em;
|
|
}
|
|
.peopleContainer,
|
|
.labelsContainer {
|
|
flex-shrink: 0;
|
|
}
|
|
.peopleContainer {
|
|
display: table;
|
|
}
|
|
.peopleList {
|
|
display: flex;
|
|
padding-top: .1em;
|
|
}
|
|
.peopleListLabel {
|
|
color: #666;
|
|
margin-top: .2em;
|
|
min-width: 7em;
|
|
padding-right: .5em;
|
|
}
|
|
gr-account-list {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
flex: 1;
|
|
min-height: 1.8em;
|
|
}
|
|
#reviewerConfirmationOverlay {
|
|
padding: 1em;
|
|
text-align: center;
|
|
}
|
|
.reviewerConfirmationButtons {
|
|
margin-top: 1em;
|
|
}
|
|
.groupName {
|
|
font-family: var(--font-family-bold);
|
|
}
|
|
.groupSize {
|
|
font-style: italic;
|
|
}
|
|
.textareaContainer {
|
|
min-height: 12em;
|
|
position: relative;
|
|
}
|
|
.textareaContainer,
|
|
#textarea,
|
|
gr-endpoint-decorator {
|
|
display: flex;
|
|
width: 100%;
|
|
}
|
|
.previewContainer gr-formatted-text {
|
|
background: #f6f6f6;
|
|
padding: 1em;
|
|
}
|
|
.draftsContainer h3 {
|
|
margin-top: .25em;
|
|
}
|
|
#checkingStatusLabel,
|
|
#notLatestLabel {
|
|
margin-left: 1em;
|
|
}
|
|
#checkingStatusLabel {
|
|
color: #444;
|
|
font-style: italic;
|
|
}
|
|
#notLatestLabel,
|
|
#savingLabel {
|
|
color: red;
|
|
}
|
|
#savingLabel {
|
|
display: none;
|
|
}
|
|
#savingLabel.saving {
|
|
display: inline;
|
|
}
|
|
</style>
|
|
<div class="container" tabindex="-1">
|
|
<section class="peopleContainer">
|
|
<div class="peopleList">
|
|
<div class="peopleListLabel">Reviewers</div>
|
|
<gr-account-list
|
|
id="reviewers"
|
|
accounts="{{_reviewers}}"
|
|
removable-values="[[change.removable_reviewers]]"
|
|
change="[[change]]"
|
|
filter="[[filterReviewerSuggestion]]"
|
|
pending-confirmation="{{_reviewerPendingConfirmation}}"
|
|
placeholder="Add reviewer..."
|
|
on-account-text-changed="_handleAccountTextEntry">
|
|
</gr-account-list>
|
|
</div>
|
|
<template is="dom-if" if="[[serverConfig.note_db_enabled]]">
|
|
<div class="peopleList">
|
|
<div class="peopleListLabel">CC</div>
|
|
<gr-account-list
|
|
id="ccs"
|
|
accounts="{{_ccs}}"
|
|
change="[[change]]"
|
|
filter="[[filterCCSuggestion]]"
|
|
pending-confirmation="{{_ccPendingConfirmation}}"
|
|
allow-any-input
|
|
placeholder="Add CC..."
|
|
on-account-text-changed="_handleAccountTextEntry">
|
|
</gr-account-list>
|
|
</div>
|
|
</template>
|
|
<gr-overlay
|
|
id="reviewerConfirmationOverlay"
|
|
on-iron-overlay-canceled="_cancelPendingReviewer">
|
|
<div class="reviewerConfirmation">
|
|
Group
|
|
<span class="groupName">
|
|
[[_pendingConfirmationDetails.group.name]]
|
|
</span>
|
|
has
|
|
<span class="groupSize">
|
|
[[_pendingConfirmationDetails.count]]
|
|
</span>
|
|
members.
|
|
<br>
|
|
Are you sure you want to add them all?
|
|
</div>
|
|
<div class="reviewerConfirmationButtons">
|
|
<gr-button on-tap="_confirmPendingReviewer">Yes</gr-button>
|
|
<gr-button on-tap="_cancelPendingReviewer">No</gr-button>
|
|
</div>
|
|
</gr-overlay>
|
|
</section>
|
|
<section class="textareaContainer">
|
|
<gr-endpoint-decorator name="reply-text">
|
|
<gr-textarea
|
|
id="textarea"
|
|
class="message"
|
|
autocomplete="on"
|
|
placeholder=[[_messagePlaceholder]]
|
|
fixed-position-dropdown
|
|
hide-border="true"
|
|
monospace="true"
|
|
disabled="{{disabled}}"
|
|
rows="4"
|
|
text="{{draft}}"
|
|
on-bind-value-changed="_handleHeightChanged">
|
|
</gr-textarea>
|
|
</gr-endpoint-decorator>
|
|
</section>
|
|
<section class="previewContainer">
|
|
<label>
|
|
<input type="checkbox" checked="{{_previewFormatting::change}}">
|
|
Preview formatting
|
|
</label>
|
|
<gr-formatted-text
|
|
content="[[draft]]"
|
|
hidden$="[[!_previewFormatting]]"
|
|
config="[[projectConfig.commentlinks]]"></gr-formatted-text>
|
|
</section>
|
|
<section class="labelsContainer">
|
|
<gr-label-scores
|
|
id="labelScores"
|
|
account="[[_account]]"
|
|
change="[[change]]"
|
|
on-labels-changed="_handleLabelsChanged"
|
|
permitted-labels=[[permittedLabels]]></gr-label-scores>
|
|
</section>
|
|
<section class="draftsContainer" hidden$="[[_computeHideDraftList(diffDrafts)]]">
|
|
<div class="includeComments">
|
|
<input type="checkbox" id="includeComments"
|
|
checked="{{_includeComments::change}}">
|
|
<label for="includeComments">Publish [[_computeDraftsTitle(diffDrafts)]]</label>
|
|
</div>
|
|
<gr-comment-list
|
|
id="commentList"
|
|
comments="[[diffDrafts]]"
|
|
change-num="[[change._number]]"
|
|
project-config="[[projectConfig]]"
|
|
patch-num="[[patchNum]]"
|
|
hidden$="[[!_includeComments]]"></gr-comment-list>
|
|
<span
|
|
id="savingLabel"
|
|
class$="[[_computeSavingLabelClass(_savingComments)]]">
|
|
Saving comments...
|
|
</span>
|
|
</section>
|
|
<section class="actions">
|
|
<div class="left">
|
|
<template is="dom-if" if="[[canBeStarted]]">
|
|
<gr-button
|
|
link
|
|
tertiary
|
|
disabled="[[_isState(knownLatestState, 'not-latest')]]"
|
|
class="action save"
|
|
has-tooltip
|
|
title="[[_saveTooltip]]"
|
|
on-tap="_saveTapHandler">Save</gr-button>
|
|
</template>
|
|
<span
|
|
id="checkingStatusLabel"
|
|
hidden$="[[!_isState(knownLatestState, 'checking')]]">
|
|
Checking whether patch [[patchNum]] is latest...
|
|
</span>
|
|
<span
|
|
id="notLatestLabel"
|
|
hidden$="[[!_isState(knownLatestState, 'not-latest')]]">
|
|
[[_computePatchSetWarning(patchNum, _labelsChanged)]]
|
|
<gr-button link on-tap="_reload">Reload</gr-button>
|
|
</span>
|
|
</div>
|
|
<div class="right">
|
|
<gr-button
|
|
link
|
|
id="cancelButton"
|
|
class="action cancel"
|
|
on-tap="_cancelTapHandler">Cancel</gr-button>
|
|
<gr-button
|
|
link
|
|
primary
|
|
disabled="[[_computeSendButtonDisabled(_sendButtonLabel, diffDrafts, draft, _reviewersMutated, _labelsChanged, _includeComments)]]"
|
|
class="action send"
|
|
has-tooltip
|
|
title$="[[_computeSendButtonTooltip(canBeStarted)]]"
|
|
on-tap="_sendTapHandler">[[_sendButtonLabel]]</gr-button>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
<gr-js-api-interface id="jsAPI"></gr-js-api-interface>
|
|
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
|
<gr-storage id="storage"></gr-storage>
|
|
</template>
|
|
<script src="gr-reply-dialog.js"></script>
|
|
</dom-module>
|