<!--
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-rest-api-interface/gr-rest-api-interface.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 {
        color: #666;
        padding: 1em var(--default-horizontal-margin);
      }
      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>
    <div class="loading" hidden$="[[!_loading]]" hidden>Loading...</div>
    <div hidden$="[[_loading]]" 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)]]" hidden>&larr; Prev</a>
        <a href$="[[_computeNavLink(_query, _offset, 1, _changesPerPage)]]"
           hidden$="[[_hideNextArrow(_loading, _changesPerPage)]]" hidden>
          Next &rarr;</a>
      </nav>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-change-list-view.js"></script>
</dom-module>
