<!--
Copyright (C) 2016 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/iron-input/iron-input.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">

<dom-module id="gr-diff-preferences">
  <template>
    <style>
      :host {
        display: block;
      }
      :host[disabled] {
        opacity: .5;
        pointer-events: none;
      }
      input,
      select {
        font: inherit;
      }
      input[type="number"] {
        width: 4em;
      }
      .header,
      .actions {
        padding: 1em 1.5em;
      }
      .header {
        border-bottom: 1px solid #ddd;
        font-weight: bold;
      }
      .mainContainer {
        padding: 1em 0;
      }
      .pref {
        align-items: center;
        display: flex;
        padding: .35em 1.5em;
        width: 20em;
      }
      .pref:hover {
        background-color: #ebf5fb;
      }
      .pref label {
        cursor: pointer;
        flex: 1;
      }
      .actions {
        border-top: 1px solid #ddd;
        display: flex;
        justify-content: space-between;
      }
    </style>
    <div class="header">
      Diff View Preferences
    </div>
    <div class="mainContainer">
      <div class="pref">
        <label for="contextSelect">Context</label>
        <select id="contextSelect" on-change="_handleContextSelectChange">
          <option value="3">3 lines</option>
          <option value="10">10 lines</option>
          <option value="25">25 lines</option>
          <option value="50">50 lines</option>
          <option value="75">75 lines</option>
          <option value="100">100 lines</option>
          <option value="-1">Whole file</option>
        </select>
      </div>
      <div class="pref">
        <label for="columnsInput">Columns</label>
        <input is="iron-input" type="number" id="columnsInput"
            prevent-invalid-input
            allowed-pattern="[0-9]"
            bind-value="{{_newPrefs.line_length}}">
      </div>
      <div class="pref">
        <label for="tabSizeInput">Tab width</label>
        <input is="iron-input" type="number" id="tabSizeInput"
            prevent-invalid-input
            allowed-pattern="[0-9]"
            bind-value="{{_newPrefs.tab_size}}">
      </div>
      <div class="pref">
        <label for="showTabsInput">Show tabs</label>
        <input is="iron-input" type="checkbox" id="showTabsInput"
            on-tap="_handleShowTabsTap">
      </div>
    </div>
    <div class="actions">
      <gr-button primary on-tap="_handleSave">Save</gr-button>
      <gr-button on-tap="_handleCancel">Cancel</gr-button>
    </div>
  </template>
  <script src="gr-diff-preferences.js"></script>
</dom-module>
