<!--
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/rest-client-behavior.html">
<link rel="import" href="../../shared/gr-ajax/gr-ajax.html">
<link rel="import" href="../gr-change-list/gr-change-list.html">

<dom-module id="gr-change-list-view">
  <template>
    <style>
      :host {
        background-color: var(--view-background-color);
        display: block;
      }
      .loading,
      .error {
        padding: 1em var(--default-horizontal-margin);
      }
      .loading {
        color: #666;
      }
      .error {
        color: #D32F2F;
      }
      gr-change-list {
        width: 100%;
      }
      nav {
        padding: .5em 0;
        text-align: center;
      }
      nav a {
        display: inline-block;
      }
      nav a:first-of-type {
        margin-right: .5em;
      }
      @media only screen and (max-width: 50em) {
        .loading,
        .error {
          padding: 0 var(--default-horizontal-margin);
        }
      }
    </style>
    <gr-ajax
        auto
        url="/changes/"
        params="[[_computeQueryParams(_query, _offset, changesPerPage)]]"
        last-response="{{_changes}}"
        last-error="{{_lastError}}"
        loading="{{_loading}}"></gr-ajax>
    <div class="loading" hidden$="[[!_loading]]" hidden>Loading...</div>
    <div class="error" hidden$="[[_computeErrorHidden(_loading, _lastError)]]" hidden>
      [[_lastError.request.xhr.responseText]]
    </div>
    <div hidden$="[[_computeListHidden(_loading, _lastError)]]" hidden>
      <gr-change-list
          changes="{{_changes}}"
          selected-index="{{viewState.selectedChangeIndex}}"
          show-star="[[loggedIn]]"></gr-change-list>
      <nav>
        <a href$="[[_computeNavLink(_query, _offset, -1, changesPerPage)]]"
           hidden$="[[_hidePrevArrow(_offset)]]">&larr; Prev</a>
        <a href$="[[_computeNavLink(_query, _offset, 1, changesPerPage)]]"
           hidden$="[[_hideNextArrow(_changes.length, changesPerPage)]]">
          Next &rarr;</a>
      </nav>
    </div>
  </template>
  <script src="gr-change-list-view.js"></script>
</dom-module>
