<!--
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="../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../shared/gr-select/gr-select.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-patch-range-select">
  <template>
    <style include="shared-styles">
      :host {
        display: block;
      }
      .patchRange {
        display: inline-block;
      }
      select {
        max-width: 15em;
      }
      @media screen and (max-width: 50em) {
        .filesWeblinks {
          display: none;
        }
        select {
          max-width: 5.25em;
        }
      }
    </style>
    Patch set:
    <span class="patchRange">
      <gr-select id="leftPatchSelect" bind-value="{{_leftSelected}}"
          on-change="_handlePatchChange">
        <select>
          <option value="PARENT">Base</option>
          <template is="dom-repeat" items="{{availablePatches}}" as="patchNum">
            <option value$="[[patchNum]]"
                disabled$="[[_computeLeftDisabled(patchNum, patchRange)]]">
              [[patchNum]]
              [[_computePatchSetDescription(revisions, patchNum)]]
            </option>
          </template>
        </select>
      </gr-select>
    </span>
    <span is="dom-if" if="[[filesWeblinks.meta_a]]" class="filesWeblinks">
      <template is="dom-repeat" items="[[filesWeblinks.meta_a]]" as="weblink">
        <a target="_blank" rel="noopener"
           href$="[[weblink.url]]">[[weblink.name]]</a>
      </template>
    </span>
    &rarr;
    <span class="patchRange">
      <gr-select id="rightPatchSelect" bind-value="{{_rightSelected}}"
          on-change="_handlePatchChange">
        <select>
          <template is="dom-repeat" items="{{availablePatches}}" as="patchNum">
            <option value$="[[patchNum]]"
                disabled$="[[_computeRightDisabled(patchNum, patchRange)]]">
              [[patchNum]]
              [[_computePatchSetDescription(revisions, patchNum)]]
            </option>
          </template>
        </select>
      </gr-select>
      <span is="dom-if" if="[[filesWeblinks.meta_b]]" class="filesWeblinks">
        <template is="dom-repeat" items="[[filesWeblinks.meta_b]]" as="weblink">
          <a target="_blank"
             href$="[[weblink.url]]">[[weblink.name]]</a>
        </template>
      </span>
    </span>
  </template>
  <script src="gr-patch-range-select.js"></script>
</dom-module>
