| <!-- |
| 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="../../shared/gr-textarea/gr-textarea.html"> |
| <link rel="import" href="../../shared/gr-button/gr-button.html"> |
| <link rel="import" href="../../shared/gr-confirm-dialog/gr-confirm-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-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-tooltip-content/gr-tooltip-content.html"> |
| <link rel="import" href="../gr-confirm-delete-comment-dialog/gr-confirm-delete-comment-dialog.html"> |
| <link rel="import" href="../../../styles/shared-styles.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]) .container { |
| opacity: .5; |
| } |
| :host([is-robot-comment]) { |
| background-color: #cfe8fc; |
| } |
| .header { |
| cursor: pointer; |
| display: flex; |
| font-family: 'Open Sans', sans-serif; |
| margin-bottom: 0.7em; |
| padding-bottom: 0; |
| } |
| .container.collapsed .header { |
| margin: 0; |
| } |
| .headerMiddle { |
| color: #666; |
| flex: 1; |
| overflow: hidden; |
| } |
| .authorName, |
| .draftLabel, |
| .draftTooltip { |
| font-family: var(--font-family-bold); |
| } |
| .draftLabel, |
| .draftTooltip { |
| color: #999; |
| 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: #666; |
| } |
| .actions { |
| display: flex; |
| justify-content: flex-end; |
| padding-top: 0; |
| } |
| .action { |
| margin-left: 1em; |
| --gr-button: { |
| color: #212121; |
| } |
| --gr-button-hover-color: rgba(33, 33, 33, .75); |
| } |
| .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, |
| .draft:not(.editing) .resolve { |
| display: none; |
| } |
| .editing .message, |
| .editing .reply, |
| .editing .quote, |
| .editing .ack, |
| .editing .done, |
| .editing .edit, |
| .editing .unresolved { |
| display: none; |
| } |
| .editing .editMessage { |
| display: block; |
| } |
| .show-hide { |
| margin-left: .4em; |
| } |
| .robotId { |
| color: #808080; |
| margin-bottom: .8em; |
| margin-top: -.4em; |
| } |
| .runIdInformation { |
| margin: 1em 0; |
| } |
| .robotRun { |
| margin-left: .5em; |
| } |
| .robotRunLink { |
| margin-left: .5em; |
| } |
| input.show-hide { |
| display: none; |
| } |
| label.show-hide { |
| color: #000; |
| cursor: pointer; |
| display: block; |
| font-size: .8em; |
| 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: #333; |
| font-size: 12px; |
| } |
| gr-confirm-dialog .main { |
| background-color: #fef; |
| display: flex; |
| flex-direction: column; |
| width: 100%; |
| } |
| #deleteBtn { |
| color: #666; |
| display: none; |
| } |
| #deleteBtn.showDeleteButtons { |
| display: block; |
| } |
| </style> |
| <div id="container" |
| class="container" |
| on-mouseenter="_handleMouseEnter" |
| on-mouseleave="_handleMouseLeave"> |
| <div class="header" id="header" on-click="_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 red 'Reply' 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 |
| 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> |
| <template is="dom-if" if="[[comment.robot_id]]"> |
| <div class="robotId" hidden$="[[collapsed]]"> |
| [[comment.robot_id]] |
| </div> |
| </template> |
| <gr-textarea |
| id="editTextarea" |
| class="editMessage" |
| autocomplete="on" |
| monospace |
| disabled="{{disabled}}" |
| rows="4" |
| text="{{_messageText}}"></gr-textarea> |
| <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]]"> |
| <div class="runIdInformation" hidden$="[[collapsed]]"> |
| Run ID: |
| <a class="robotRunLink" href$="[[comment.url]]"> |
| <span class="robotRun">[[comment.robot_run_id]]</span> |
| </a> |
| </div> |
| </div> |
| <div class="actions humanActions" hidden$="[[!_showHumanActions]]"> |
| <div class="action resolve hideOnPublished"> |
| <label> |
| <input type="checkbox" |
| checked$="[[resolved]]" |
| on-change="_handleToggleResolved"> |
| Resolved |
| </label> |
| </div> |
| <div class="action unresolved hideOnPublished" hidden$="[[resolved]]"> |
| Unresolved |
| </div> |
| <div class="rightActions"> |
| <gr-button link class="action cancel hideOnPublished" |
| on-tap="_handleCancel" hidden>Cancel</gr-button> |
| <gr-button link class="action discard hideOnPublished" |
| on-tap="_handleDiscard">Discard</gr-button> |
| <gr-button link class="action edit hideOnPublished" |
| on-tap="_handleEdit">Edit</gr-button> |
| <gr-button link class="action save hideOnPublished" |
| on-tap="_handleSave" |
| disabled$="[[_computeSaveDisabled(_messageText)]]">Save |
| </gr-button> |
| </div> |
| </div> |
| <div class="actions robotActions" hidden$="[[!_showRobotActions]]"> |
| <gr-button link class="action fix" |
| on-tap="_handleFix" |
| disabled="[[robotButtonDisabled]]"> |
| Please Fix |
| </gr-button> |
| </div> |
| </div> |
| <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-confirm-dialog |
| id="confirmDiscaDialog" |
| confirm-label="Discard" |
| on-confirm="_handleConfirmDiscard" |
| on-cancel="_closeConfirmDiscardOverlay"> |
| <div class="header"> |
| Discard comment |
| </div> |
| <div class="main"> |
| Are you sure you want to discard this draft comment? |
| </div> |
| </gr-confirm-dialog> |
| </gr-overlay> |
| <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> |
| <gr-storage id="storage"></gr-storage> |
| </template> |
| <script src="gr-diff-comment.js"></script> |
| </dom-module> |