|  | <!-- | 
|  | 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%; | 
|  | } | 
|  | .actions { | 
|  | display: flex; | 
|  | justify-content: space-between; | 
|  | } | 
|  | .actions .right gr-button { | 
|  | margin-left: 1em; | 
|  | } | 
|  | .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; | 
|  | } | 
|  | @media screen and (max-width: 50em) { | 
|  | :host { | 
|  | max-height: none; | 
|  | } | 
|  | .container { | 
|  | max-height: none; | 
|  | } | 
|  | } | 
|  | </style> | 
|  | <div class="container" tabindex="-1"> | 
|  | <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 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')]]"> | 
|  | Patch [[patchNum]] is not latest. | 
|  | <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(knownLatestState, _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> |