 2960db0adc
			
		
	
	2960db0adc
	
	
	
		
			
			The gr-dialog should serve as the basis for most (ideally all) dialogs moving forward, in an effort to unify styling. Bug: Issue 9543 Change-Id: If73c3a8f11cbd7a56763ed5b5ae1e9ad8caca730
		
			
				
	
	
		
			390 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			390 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!--
 | |
| @license
 | |
| 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/keyboard-shortcut-behavior/keyboard-shortcut-behavior.html">
 | |
| <link rel="import" href="../../../bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html">
 | |
| <link rel="import" href="../../../styles/shared-styles.html">
 | |
| <link rel="import" href="../../core/gr-reporting/gr-reporting.html">
 | |
| <link rel="import" href="../../plugins/gr-endpoint-decorator/gr-endpoint-decorator.html">
 | |
| <link rel="import" href="../../plugins/gr-endpoint-param/gr-endpoint-param.html">
 | |
| <link rel="import" href="../../shared/gr-button/gr-button.html">
 | |
| <link rel="import" href="../../shared/gr-dialog/gr-dialog.html">
 | |
| <link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
 | |
| <link rel="import" href="../../shared/gr-formatted-text/gr-formatted-text.html">
 | |
| <link rel="import" href="../../shared/gr-icons/gr-icons.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="../../shared/gr-textarea/gr-textarea.html">
 | |
| <link rel="import" href="../../shared/gr-tooltip-content/gr-tooltip-content.html">
 | |
| <link rel="import" href="../gr-confirm-delete-comment-dialog/gr-confirm-delete-comment-dialog.html">
 | |
| <script src="../../../scripts/rootElement.js"></script>
 | |
| 
 | |
| <dom-module id="gr-diff-comment">
 | |
|   <template>
 | |
|     <style include="shared-styles">
 | |
|       :host {
 | |
|         display: block;
 | |
|         font-family: var(--font-family);
 | |
|         padding: .7em .7em;
 | |
|         --iron-autogrow-textarea: {
 | |
|           box-sizing: border-box;
 | |
|           padding: 2px;
 | |
|         };
 | |
|       }
 | |
|       :host([disabled]) {
 | |
|         pointer-events: none;
 | |
|       }
 | |
|       :host([disabled]) .actions,
 | |
|       :host([disabled]) .robotActions,
 | |
|       :host([disabled]) .date {
 | |
|         opacity: .5;
 | |
|       }
 | |
|       :host([discarding]) {
 | |
|         display: none;
 | |
|       }
 | |
|       .header {
 | |
|         align-items: baseline;
 | |
|         cursor: pointer;
 | |
|         display: flex;
 | |
|         font-family: 'Open Sans', sans-serif;
 | |
|         margin: -.7em -.7em 0 -.7em;
 | |
|         padding: .7em;
 | |
|       }
 | |
|       .container.collapsed .header {
 | |
|         margin-bottom: -.7em;
 | |
|       }
 | |
|       .headerMiddle {
 | |
|         color: var(--deemphasized-text-color);
 | |
|         flex: 1;
 | |
|         overflow: hidden;
 | |
|       }
 | |
|       .authorName,
 | |
|       .draftLabel,
 | |
|       .draftTooltip {
 | |
|         font-family: var(--font-family-bold);
 | |
|       }
 | |
|       .draftLabel,
 | |
|       .draftTooltip {
 | |
|         color: var(--deemphasized-text-color);
 | |
|         display: none;
 | |
|       }
 | |
|       .date {
 | |
|         justify-content: flex-end;
 | |
|         margin-left: 5px;
 | |
|         min-width: 4.5em;
 | |
|         text-align: right;
 | |
|         white-space: nowrap;
 | |
|       }
 | |
|       a.date:link,
 | |
|       a.date:visited {
 | |
|         color: var(--deemphasized-text-color);
 | |
|       }
 | |
|       .actions {
 | |
|         display: flex;
 | |
|         justify-content: flex-end;
 | |
|         padding-top: 0;
 | |
|       }
 | |
|       .action {
 | |
|         margin-left: 1em;
 | |
|       }
 | |
|       .robotActions {
 | |
|         display: flex;
 | |
|         justify-content: flex-start;
 | |
|         padding-top: 0;
 | |
|       }
 | |
|       .robotActions .action {
 | |
|         /* Keep button text lined up with output text */
 | |
|         margin-left: -.3rem;
 | |
|         margin-right: 1em;
 | |
|       }
 | |
|       .rightActions {
 | |
|         display: flex;
 | |
|         justify-content: flex-end;
 | |
|       }
 | |
|       .editMessage {
 | |
|         display: none;
 | |
|         margin: .5em 0;
 | |
|         width: 100%;
 | |
|       }
 | |
|       .container:not(.draft) .actions .hideOnPublished {
 | |
|         display: none;
 | |
|       }
 | |
|       .draft .reply,
 | |
|       .draft .quote,
 | |
|       .draft .ack,
 | |
|       .draft .done {
 | |
|         display: none;
 | |
|       }
 | |
|       .draft .draftLabel,
 | |
|       .draft .draftTooltip {
 | |
|         display: inline;
 | |
|       }
 | |
|       .draft:not(.editing) .save,
 | |
|       .draft:not(.editing) .cancel {
 | |
|         display: none;
 | |
|       }
 | |
|       .editing .message,
 | |
|       .editing .reply,
 | |
|       .editing .quote,
 | |
|       .editing .ack,
 | |
|       .editing .done,
 | |
|       .editing .edit,
 | |
|       .editing .discard,
 | |
|       .editing .unresolved {
 | |
|         display: none;
 | |
|       }
 | |
|       .editing .editMessage {
 | |
|         display: block;
 | |
|       }
 | |
|       .show-hide {
 | |
|         margin-left: .4em;
 | |
|       }
 | |
|       .robotId {
 | |
|         color: var(--deemphasized-text-color);
 | |
|         margin-bottom: .8em;
 | |
|         margin-top: -.4em;
 | |
|       }
 | |
|       .robotIcon {
 | |
|         margin-right: .2em;
 | |
|         /* because of the antenna of the robot, it looks off center even when it
 | |
|          is centered. artificially adjust margin to account for this. */
 | |
|         margin-top: -.3em;
 | |
|       }
 | |
|       .runIdInformation {
 | |
|         margin: .7em 0;
 | |
|       }
 | |
|       .robotRun {
 | |
|         margin-left: .5em;
 | |
|       }
 | |
|       .robotRunLink {
 | |
|         margin-left: .5em;
 | |
|       }
 | |
|       input.show-hide {
 | |
|         display: none;
 | |
|       }
 | |
|       label.show-hide {
 | |
|         color: var(--comment-text-color);
 | |
|         cursor: pointer;
 | |
|         display: block;
 | |
|         font-size: .8rem;
 | |
|         height: 1.1em;
 | |
|         margin-top: .1em;
 | |
|       }
 | |
|       #container .collapsedContent {
 | |
|         display: none;
 | |
|       }
 | |
|       #container.collapsed {
 | |
|         padding-bottom: 3px;
 | |
|       }
 | |
|       #container.collapsed .collapsedContent {
 | |
|         display: block;
 | |
|         overflow: hidden;
 | |
|         padding-left: 5px;
 | |
|         text-overflow: ellipsis;
 | |
|         white-space: nowrap;
 | |
|       }
 | |
|       #container.collapsed .actions,
 | |
|       #container.collapsed gr-formatted-text,
 | |
|       #container.collapsed gr-textarea {
 | |
|         display: none;
 | |
|       }
 | |
|       .resolve,
 | |
|       .unresolved {
 | |
|         align-items: center;
 | |
|         display: flex;
 | |
|         flex: 1;
 | |
|         margin: 0;
 | |
|       }
 | |
|       .resolve label {
 | |
|         color: var(--comment-text-color);
 | |
|       }
 | |
|       gr-dialog .main {
 | |
|         display: flex;
 | |
|         flex-direction: column;
 | |
|         width: 100%;
 | |
|       }
 | |
|       #deleteBtn {
 | |
|         display: none;
 | |
|         --gr-button: {
 | |
|           color: var(--deemphasized-text-color);
 | |
|           padding: 0;
 | |
|         }
 | |
|       }
 | |
|       #deleteBtn.showDeleteButtons {
 | |
|         display: block;
 | |
|       }
 | |
|     </style>
 | |
|     <div id="container"
 | |
|         class="container"
 | |
|         on-mouseenter="_handleMouseEnter"
 | |
|         on-mouseleave="_handleMouseLeave">
 | |
|       <div class="header" id="header" on-tap="_handleToggleCollapsed">
 | |
|         <div class="headerLeft">
 | |
|           <span class="authorName">[[comment.author.name]]</span>
 | |
|           <span class="draftLabel">DRAFT</span>
 | |
|           <gr-tooltip-content class="draftTooltip"
 | |
|               has-tooltip
 | |
|               title="This draft is only visible to you. To publish drafts, click the 'Reply' or 'Start review' button at the top of the change or press the 'A' key."
 | |
|               max-width="20em"
 | |
|               show-icon></gr-tooltip-content>
 | |
|         </div>
 | |
|         <div class="headerMiddle">
 | |
|           <span class="collapsedContent">[[comment.message]]</span>
 | |
|         </div>
 | |
|         <gr-button
 | |
|             id="deleteBtn"
 | |
|             link
 | |
|             secondary
 | |
|             class$="action delete [[_computeDeleteButtonClass(_isAdmin, draft)]]"
 | |
|             on-tap="_handleCommentDelete">
 | |
|           (Delete)
 | |
|         </gr-button>
 | |
|         <a class="date" href$="[[_computeLinkToComment(comment)]]" on-tap="_handleLinkTap">
 | |
|           <gr-date-formatter
 | |
|               has-tooltip
 | |
|               date-str="[[comment.updated]]"></gr-date-formatter>
 | |
|         </a>
 | |
|         <div class="show-hide">
 | |
|           <label class="show-hide">
 | |
|             <input type="checkbox" class="show-hide"
 | |
|                checked$="[[collapsed]]"
 | |
|                on-change="_handleToggleCollapsed">
 | |
|             [[_computeShowHideText(collapsed)]]
 | |
|           </label>
 | |
|         </div>
 | |
|       </div>
 | |
|       <div class="body">
 | |
|         <template is="dom-if" if="[[comment.robot_id]]">
 | |
|           <div class="robotId" hidden$="[[collapsed]]">
 | |
|             <iron-icon class="robotIcon" icon="gr-icons:robot"></iron-icon>
 | |
|             [[comment.robot_id]]
 | |
|           </div>
 | |
|         </template>
 | |
|         <template is="dom-if" if="[[editing]]">
 | |
|           <gr-textarea
 | |
|               id="editTextarea"
 | |
|               class="editMessage"
 | |
|               autocomplete="on"
 | |
|               monospace
 | |
|               disabled="{{disabled}}"
 | |
|               rows="4"
 | |
|               text="{{_messageText}}"></gr-textarea>
 | |
|         </template>
 | |
|         <!--The message class is needed to ensure selectability from
 | |
|         gr-diff-selection.-->
 | |
|         <gr-formatted-text class="message"
 | |
|             content="[[comment.message]]"
 | |
|             no-trailing-margin="[[!comment.__draft]]"
 | |
|             collapsed="[[collapsed]]"
 | |
|             config="[[projectConfig.commentlinks]]"></gr-formatted-text>
 | |
|         <div hidden$="[[!comment.robot_run_id]]" class="message">
 | |
|           <div class="runIdInformation" hidden$="[[collapsed]]">
 | |
|             Run ID:
 | |
|             <template is="dom-if" if="[[comment.url]]">
 | |
|               <a class="robotRunLink" href$="[[comment.url]]">
 | |
|                 <span class="robotRun link">[[comment.robot_run_id]]</span>
 | |
|               </a>
 | |
|             </template>
 | |
|             <template is="dom-if" if="[[!comment.url]]">
 | |
|               <span class="robotRun text">[[comment.robot_run_id]]</span>
 | |
|             </template>
 | |
|           </div>
 | |
|         </div>
 | |
|         <div class="actions humanActions" hidden$="[[!_showHumanActions]]">
 | |
|           <div class="action resolve hideOnPublished">
 | |
|             <label>
 | |
|               <input type="checkbox"
 | |
|                   id="resolvedCheckbox"
 | |
|                   checked="[[resolved]]"
 | |
|                   on-change="_handleToggleResolved">
 | |
|               Resolved
 | |
|             </label>
 | |
|           </div>
 | |
|           <div class="rightActions">
 | |
|             <gr-button
 | |
|                 link
 | |
|                 secondary
 | |
|                 class="action cancel hideOnPublished"
 | |
|                 on-tap="_handleCancel">Cancel</gr-button>
 | |
|             <gr-button
 | |
|                 link
 | |
|                 secondary
 | |
|                 class="action discard hideOnPublished"
 | |
|                 on-tap="_handleDiscard">Discard</gr-button>
 | |
|             <gr-button
 | |
|                 link
 | |
|                 secondary
 | |
|                 class="action edit hideOnPublished"
 | |
|                 on-tap="_handleEdit">Edit</gr-button>
 | |
|             <gr-button
 | |
|                 link
 | |
|                 secondary
 | |
|                 disabled$="[[_computeSaveDisabled(_messageText, comment, resolved)]]"
 | |
|                 class="action save hideOnPublished"
 | |
|                 on-tap="_handleSave">Save</gr-button>
 | |
|           </div>
 | |
|         </div>
 | |
|         <div class="robotActions" hidden$="[[!_showRobotActions]]">
 | |
|           <template is="dom-if" if="[[isRobotComment]]">
 | |
|             <gr-button
 | |
|                 link
 | |
|                 secondary
 | |
|                 class="action fix"
 | |
|                 on-tap="_handleFix"
 | |
|                 disabled="[[robotButtonDisabled]]">
 | |
|               Please Fix
 | |
|             </gr-button>
 | |
|             <gr-endpoint-decorator name="robot-comment-controls">
 | |
|               <gr-endpoint-param name="comment" value="[[comment]]">
 | |
|               </gr-endpoint-param>
 | |
|             </gr-endpoint-decorator>
 | |
|           </template>
 | |
|         </div>
 | |
|       </div>
 | |
|     </div>
 | |
|     <template is="dom-if" if="[[_enableOverlay]]">
 | |
|       <gr-overlay id="confirmDeleteOverlay" with-backdrop>
 | |
|         <gr-confirm-delete-comment-dialog id="confirmDeleteComment"
 | |
|             on-confirm="_handleConfirmDeleteComment"
 | |
|             on-cancel="_handleCancelDeleteComment">
 | |
|         </gr-confirm-delete-comment-dialog>
 | |
|       </gr-overlay>
 | |
|       <gr-overlay id="confirmDiscardOverlay" with-backdrop>
 | |
|         <gr-dialog
 | |
|             id="confirmDiscardDialog"
 | |
|             confirm-label="Discard"
 | |
|             confirm-on-enter
 | |
|             on-confirm="_handleConfirmDiscard"
 | |
|             on-cancel="_closeConfirmDiscardOverlay">
 | |
|           <div class="header" slot="header">
 | |
|             Discard comment
 | |
|           </div>
 | |
|           <div class="main" slot="main">
 | |
|             Are you sure you want to discard this draft comment?
 | |
|           </div>
 | |
|         </gr-dialog>
 | |
|       </gr-overlay>
 | |
|     </template>
 | |
|     <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
 | |
|     <gr-storage id="storage"></gr-storage>
 | |
|     <gr-reporting id="reporting"></gr-reporting>
 | |
|   </template>
 | |
|   <script src="gr-diff-comment.js"></script>
 | |
| </dom-module>
 |