<!--
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">

<dom-module id="gr-patch-range-select">
  <template>
    <style>
      :host {
        display: block;
      }
      .patchRange {
        display: inline-block;
      }
      select {
        max-width: 25em;
      }
    </style>
    Patch set:
    <span class="patchRange">
      <select id="leftPatchSelect" bind-value="{{_leftSelected}}"
          on-change="_handlePatchChange" is="gr-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>
    </span>
    <span is="dom-if" if="[[filesWeblinks.meta_a]]">
      <template is="dom-repeat" items="[[filesWeblinks.meta_a]]" as="weblink">
        <a target="_blank"
           href$="[[weblink.url]]">[[weblink.name]]</a>
      </template>
    </span>
    &rarr;
    <span class="patchRange">
      <select id="rightPatchSelect" bind-value="{{_rightSelected}}"
          on-change="_handlePatchChange" is="gr-select">
        <template is="dom-repeat" items="{{availablePatches}}" as="patchNum">
          <option value$="[[patchNum]]"
              disabled$="[[_computeRightDisabled(patchNum, patchRange)]]">
            [[patchNum]]
            [[_computePatchSetDescription(revisions, patchNum)]]
          </option>
        </template>
      </select>
      <span is="dom-if" if="[[filesWeblinks.meta_b]]">
        <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>
