
Actions can be taken on a change by one user on behalf of another user. This is indicated in ChangeMessageInfo by the real_author property. When this property is present and indicates a different account than author, then we modify the heading of the message to read: <Real Author> on behalf of <Author> Bug: Issue 5801 Change-Id: Ia9ef4eb410f1f637bce97c7acbfa97c91b8d3882
189 lines
6.0 KiB
HTML
189 lines
6.0 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="../../shared/gr-account-link/gr-account-link.html">
|
|
<link rel="import" href="../../shared/gr-button/gr-button.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-rest-api-interface/gr-rest-api-interface.html">
|
|
|
|
<link rel="import" href="../gr-comment-list/gr-comment-list.html">
|
|
|
|
<dom-module id="gr-message">
|
|
<template>
|
|
<style>
|
|
:host {
|
|
border-top: 1px solid #ddd;
|
|
display: block;
|
|
position: relative;
|
|
cursor: pointer;
|
|
}
|
|
:host(.expanded) {
|
|
cursor: auto;
|
|
}
|
|
gr-avatar {
|
|
position: absolute;
|
|
left: var(--default-horizontal-margin);
|
|
}
|
|
.collapsed .contentContainer {
|
|
align-items: baseline;
|
|
color: #777;
|
|
display: flex;
|
|
white-space: nowrap;
|
|
}
|
|
.showAvatar.expanded .contentContainer {
|
|
margin-left: calc(var(--default-horizontal-margin) + 2.5em);
|
|
padding: 10px 0;
|
|
}
|
|
.showAvatar.collapsed .contentContainer {
|
|
margin-left: calc(var(--default-horizontal-margin) + 1.75em);
|
|
}
|
|
.hideAvatar.collapsed .contentContainer,
|
|
.hideAvatar.expanded .contentContainer {
|
|
margin-left: 0;
|
|
}
|
|
.showAvatar.collapsed .contentContainer,
|
|
.hideAvatar.collapsed .contentContainer,
|
|
.hideAvatar.expanded .contentContainer {
|
|
padding: .75em 0;
|
|
}
|
|
.collapsed gr-avatar {
|
|
top: .5em;
|
|
height: 1.75em;
|
|
width: 1.75em;
|
|
}
|
|
.expanded gr-avatar {
|
|
top: 12px;
|
|
height: 2.5em;
|
|
width: 2.5em;
|
|
}
|
|
.name {
|
|
font-weight: bold;
|
|
}
|
|
.message {
|
|
max-width: 80ch;
|
|
}
|
|
.collapsed .message {
|
|
max-width: none;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
.collapsed .author,
|
|
.collapsed .content,
|
|
.collapsed .message,
|
|
.collapsed .updateCategory,
|
|
gr-account-chip {
|
|
display: inline;
|
|
}
|
|
.collapsed gr-comment-list,
|
|
.collapsed .replyContainer,
|
|
.collapsed .hideOnCollapsed,
|
|
.hideOnOpen {
|
|
display: none;
|
|
}
|
|
.collapsed .hideOnOpen {
|
|
display: block;
|
|
}
|
|
.collapsed .content {
|
|
flex: 1;
|
|
margin-right: .25em;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
.collapsed .date {
|
|
position: static;
|
|
}
|
|
.collapsed .author {
|
|
color: var(--default-text-color);
|
|
margin-right: .4em;
|
|
}
|
|
.expanded .author {
|
|
cursor: pointer;
|
|
}
|
|
.date {
|
|
color: #666;
|
|
position: absolute;
|
|
right: var(--default-horizontal-margin);
|
|
top: 10px;
|
|
}
|
|
.replyContainer {
|
|
padding: .5em 0 1em;
|
|
}
|
|
</style>
|
|
<div class$="[[_computeClass(_expanded, showAvatar)]]">
|
|
<gr-avatar account="[[author]]" image-size="100"></gr-avatar>
|
|
<div class="contentContainer">
|
|
<div class="author" on-tap="_handleAuthorTap">
|
|
<span hidden$="[[!showOnBehalfOf]]">
|
|
<span class="name">[[message.real_author.name]]</span>
|
|
on behalf of
|
|
</span>
|
|
<span class="name">[[author.name]]</span>
|
|
</div>
|
|
<template is="dom-if" if="[[message.message]]">
|
|
<div class="content">
|
|
<div class="message hideOnOpen">[[message.message]]</div>
|
|
<gr-formatted-text
|
|
class="message hideOnCollapsed"
|
|
content="[[message.message]]"
|
|
config="[[projectConfig.commentlinks]]"></gr-formatted-text>
|
|
<gr-comment-list
|
|
comments="[[comments]]"
|
|
change-num="[[changeNum]]"
|
|
patch-num="[[message._revision_number]]"
|
|
project-config="[[projectConfig]]"></gr-comment-list>
|
|
</div>
|
|
</template>
|
|
<template is="dom-if" if="[[_computeIsReviewerUpdate(message)]]">
|
|
<div class="content">
|
|
<template is="dom-repeat" items="[[message.updates]]" as="update">
|
|
<div class="updateCategory">
|
|
[[update.message]]
|
|
<template
|
|
is="dom-repeat" items="[[update.reviewers]]" as="reviewer">
|
|
<gr-account-chip account="[[reviewer]]">
|
|
</gr-account-chip>
|
|
</template>
|
|
</div>
|
|
</template>
|
|
</div>
|
|
</template>
|
|
<template is="dom-if" if="[[!message.id]]">
|
|
<span class="date">
|
|
<gr-date-formatter
|
|
has-tooltip
|
|
date-str="[[message.date]]"></gr-date-formatter>
|
|
</span>
|
|
</template>
|
|
<template is="dom-if" if="[[message.id]]">
|
|
<a class="date" href$="[[_computeMessageHash(message)]]" on-tap="_handleLinkTap">
|
|
<gr-date-formatter
|
|
has-tooltip
|
|
date-str="[[message.date]]"></gr-date-formatter>
|
|
</a>
|
|
</template>
|
|
</div>
|
|
<div class="replyContainer" hidden$="[[!showReplyButton]]" hidden>
|
|
<gr-button small on-tap="_handleReplyTap">Reply</gr-button>
|
|
</div>
|
|
</div>
|
|
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
|
</template>
|
|
<script src="gr-message.js"></script>
|
|
</dom-module>
|