<!--
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="../../../bower_components/paper-toggle-button/paper-toggle-button.html">
<link rel="import" href="../../core/gr-reporting/gr-reporting.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../gr-message/gr-message.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-messages-list">
  <template>
    <style include="shared-styles">
      :host,
      .messageListControls {
        display: block;
      }
      .header {
        align-items: center;
        background-color: #fafafa;
        border-bottom: 1px solid #ddd;
        border-top: 1px solid #ddd;
        display: flex;
        justify-content: space-between;
        min-height: 3.2em;
        padding: .5em var(--default-horizontal-margin);
      }
      #messageControlsContainer {
        padding: 0 var(--default-horizontal-margin);
      }
      .highlighted {
        animation: 3s fadeOut;
      }
      @keyframes fadeOut {
        0% { background-color: #fff9c4; }
        100% { background-color: #fff; }
      }
      #messageControlsContainer {
        align-items: center;
        border-bottom: 1px solid #ddd;
        display: flex;
        height: 2.25em;
        justify-content: center;
      }
      #messageControlsContainer gr-button {
        padding: 0.4em 0;
      }
      .container {
        align-items: center;
        display: flex;
      }
      paper-toggle-button {
        --paper-toggle-button-checked-bar-color: var(--color-link);
        --paper-toggle-button-checked-button-color: var(--color-link);
      }
    </style>
    <div class="header">
      <h3>Messages</h3>
      <div class="messageListControls container">
        <span
            id="automatedMessageToggleContainer"
            class="container"
            hidden$="[[!_hasAutomatedMessages(messages)]]">
          <paper-toggle-button
              id="automatedMessageToggle"
              checked="{{_hideAutomated}}"></paper-toggle-button>Only comments
          <span class="transparent separator"></span>
        </span>
        <gr-button
            id="collapse-messages"
            link
            on-tap="_handleExpandCollapseTap">
          [[_computeExpandCollapseMessage(_expanded)]]
        </gr-button>
      </div>
    </div>
    <span
        id="messageControlsContainer"
        hidden$="[[_computeShowHideTextHidden(_visibleMessages, _processedMessages, _hideAutomated, _visibleMessages.length)]]">
      <gr-button id="oldMessagesBtn" link on-tap="_handleShowAllTap">
          [[_computeNumMessagesText(_visibleMessages, _processedMessages, _hideAutomated, _visibleMessages.length)]]
      </gr-button>
      <span
          class="container"
          hidden$="[[_computeIncrementHidden(_visibleMessages, _processedMessages, _hideAutomated, _visibleMessages.length)]]">
        <span class="transparent separator"></span>
        <gr-button id="incrementMessagesBtn" link
            on-tap="_handleIncrementShownMessages">
          [[_computeIncrementText(_visibleMessages, _processedMessages, _hideAutomated, _visibleMessages.length)]]
        </gr-button>
      </span>
    </span>
    <template
        is="dom-repeat"
        items="[[_visibleMessages]]"
        as="message">
      <gr-message
          change-num="[[changeNum]]"
          message="[[message]]"
          comments="[[_computeCommentsForMessage(changeComments, message)]]"
          hide-automated="[[_hideAutomated]]"
          project-name="[[projectName]]"
          show-reply-button="[[showReplyButtons]]"
          on-scroll-to="_handleScrollTo"
          data-message-id$="[[message.id]]"></gr-message>
    </template>
    <gr-reporting id="reporting" category="message-list"></gr-reporting>
  </template>
  <script src="gr-messages-list.js"></script>
</dom-module>
