
Change-Id: I8df3a3780b8e08e5124c93968cf2d28a62bec74b
(cherry picked from commit b282f67c43
)
299 lines
9.9 KiB
HTML
299 lines
9.9 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: 90vh;
|
|
}
|
|
:host([disabled]) {
|
|
pointer-events: none;
|
|
}
|
|
:host([disabled]) .container {
|
|
opacity: .5;
|
|
}
|
|
.container {
|
|
display: flex;
|
|
flex-direction: column;
|
|
max-height: 90vh;
|
|
}
|
|
section {
|
|
border-top: 1px solid #cdcdcd;
|
|
padding: .5em 1.5em;
|
|
width: 100%;
|
|
}
|
|
.peopleContainer,
|
|
.labelsContainer {
|
|
flex-shrink: 0;
|
|
}
|
|
.peopleContainer {
|
|
display: table;
|
|
}
|
|
.peopleList {
|
|
display: flex;
|
|
align-items: center;
|
|
padding-top: .1em;
|
|
}
|
|
.peopleListLabel {
|
|
color: #666;
|
|
min-width: 7em;
|
|
padding-right: .5em;
|
|
}
|
|
gr-account-list {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
flex: 1;
|
|
min-height: 1.8em;
|
|
--account-list-style: {
|
|
max-height: 12em;
|
|
overflow-y: auto;
|
|
}
|
|
}
|
|
#reviewerConfirmationOverlay {
|
|
padding: 1em;
|
|
text-align: center;
|
|
}
|
|
.reviewerConfirmationButtons {
|
|
margin-top: 1em;
|
|
}
|
|
.groupName {
|
|
font-family: var(--font-family-bold);
|
|
}
|
|
.groupSize {
|
|
font-style: italic;
|
|
}
|
|
.textareaContainer {
|
|
min-height: 6em;
|
|
position: relative;
|
|
}
|
|
.textareaContainer,
|
|
#textarea,
|
|
gr-endpoint-decorator {
|
|
display: flex;
|
|
width: 100%;
|
|
}
|
|
.previewContainer gr-formatted-text {
|
|
background: #f6f6f6;
|
|
max-height: 20vh;
|
|
overflow-y: scroll;
|
|
padding: 1em;
|
|
}
|
|
.draftsContainer {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
}
|
|
.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;
|
|
}
|
|
#cancelButton {
|
|
float: right;
|
|
}
|
|
@media screen and (max-width: 50em) {
|
|
:host {
|
|
max-height: none;
|
|
}
|
|
.container {
|
|
max-height: none;
|
|
}
|
|
}
|
|
</style>
|
|
<div class="container">
|
|
<section class="peopleContainer">
|
|
<div class="peopleList">
|
|
<div class="peopleListLabel">Owner</div>
|
|
<gr-account-chip account="[[_owner]]"></gr-account-chip>
|
|
</div>
|
|
</section>
|
|
<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...">
|
|
</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...">
|
|
</gr-account-list>
|
|
</div>
|
|
</template>
|
|
<gr-overlay
|
|
id="reviewerConfirmationOverlay"
|
|
on-iron-overlay-canceled="_cancelPendingReviewer"
|
|
with-backdrop>
|
|
<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"
|
|
max-rows="15"
|
|
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>
|
|
<gr-button
|
|
primary
|
|
disabled="[[_computeSendButtonDisabled(knownLatestState, _sendButtonLabel, diffDrafts, draft, _reviewersMutated, _labelsChanged, _includeComments)]]"
|
|
class="action send"
|
|
on-tap="_sendTapHandler">[[_sendButtonLabel]]</gr-button>
|
|
<template is="dom-if" if="[[canBeStarted]]">
|
|
<gr-button
|
|
disabled="[[_isState(knownLatestState, 'not-latest')]]"
|
|
class="action save"
|
|
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')]]">
|
|
Patch [[patchNum]] is not latest.
|
|
<gr-button link on-tap="_reload">Reload</gr-button>
|
|
</span>
|
|
<gr-button
|
|
id="cancelButton"
|
|
class="action cancel"
|
|
on-tap="_cancelTapHandler">Cancel</gr-button>
|
|
</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>
|