<!--
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">
<link rel="import" href="../../shared/gr-overlay/gr-overlay.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../../shared/gr-storage/gr-storage.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-diff-preferences">
  <template>
    <style include="shared-styles">
      :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-family: var(--font-family-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: flex-end;
      }
      .beta {
        font-family: var(--font-family-bold);
        color: #888;
      }
      gr-button {
        margin-left: 1em;
      }
    </style>
    <gr-overlay id="prefsOverlay" with-backdrop>
      <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="lineWrappingInput">Fit to screen</label>
          <input
              is="iron-input"
              type="checkbox"
              id="lineWrappingInput"
              on-tap="_handlelineWrappingTap">
        </div>
        <div class="pref" id="columnsPref"
            hidden$="[[_newPrefs.line_wrapping]]">
          <label for="columnsInput">Diff width</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" hidden$="[[!_newPrefs.font_size]]">
          <label for="fontSizeInput">Font size</label>
          <input is="iron-input" type="number" id="fontSizeInput"
                prevent-invalid-input
                allowed-pattern="[0-9]"
                bind-value="{{_newPrefs.font_size}}">
        </div>
        <div class="pref">
          <label for="showTabsInput">Show tabs</label>
          <input is="iron-input" type="checkbox" id="showTabsInput"
              on-tap="_handleShowTabsTap">
        </div>
        <div class="pref">
          <label for="showTrailingWhitespaceInput">
            Show trailing whitespace</label>
          <input is="iron-input" type="checkbox"
              id="showTrailingWhitespaceInput"
              on-tap="_handleShowTrailingWhitespaceTap">
        </div>
        <div class="pref">
          <label for="syntaxHighlightInput">Syntax highlighting</label>
          <input is="iron-input" type="checkbox" id="syntaxHighlightInput"
              on-tap="_handleSyntaxHighlightTap">
        </div>
        <div class="pref">
          <label for="automaticReviewInput">Automatically mark viewed files reviewed</label>
          <input
              is="iron-input"
              id="automaticReviewInput"
              type="checkbox"
              on-tap="_handleAutomaticReviewTap">
        </div>
      </div>
      <div class="actions">
        <gr-button id="cancelButton" link on-tap="_handleCancel">
            Cancel</gr-button>
        <gr-button id="saveButton" link primary on-tap="_handleSave">
            Save</gr-button>
      </div>
    </gr-overlay>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
    <gr-storage id="storage"></gr-storage>
  </template>
  <script src="gr-diff-preferences.js"></script>
</dom-module>
