<!--
@license
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-autocomplete/gr-autocomplete.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../../../styles/gr-form-styles.html">
<link rel="import" href="../../../styles/shared-styles.html">

<dom-module id="gr-watched-projects-editor">
  <template>
    <style include="shared-styles"></style>
    <style include="gr-form-styles">
      #watchedProjects .notifType {
        text-align: center;
        padding: 0 0.4em;
      }
      .notifControl {
        cursor: pointer;
        text-align: center;
      }
      .notifControl:hover {
        outline: 1px solid var(--border-color);
      }
      .projectFilter {
        color: var(--deemphasized-text-color);
        font-style: italic;
        margin-left: 1em;
      }
      .newFilterInput {
        width: 100%;
      }
    </style>
    <div class="gr-form-styles">
      <table id="watchedProjects">
        <thead>
          <tr>
            <th>Repo</th>
            <template is="dom-repeat" items="[[_getTypes()]]">
              <th class="notifType">[[item.name]]</th>
            </template>
            <th></th>
          </tr>
        </thead>
        <tbody>
          <template
              is="dom-repeat"
              items="[[_projects]]"
              as="project"
              index-as="projectIndex">
            <tr>
              <td>
                [[project.project]]
                <template is="dom-if" if="[[project.filter]]">
                  <div class="projectFilter">[[project.filter]]</div>
                </template>
              </td>
              <template
                  is="dom-repeat"
                  items="[[_getTypes()]]"
                  as="type">
                <td class="notifControl" on-tap="_handleNotifCellTap">
                  <input
                      type="checkbox"
                      data-index$="[[projectIndex]]"
                      data-key$="[[type.key]]"
                      on-change="_handleCheckboxChange"
                      checked$="[[_computeCheckboxChecked(project, type.key)]]">
                </td>
              </template>
              <td>
                <gr-button
                    link
                    data-index$="[[projectIndex]]"
                    on-click="_handleRemoveProject">Delete</gr-button>
              </td>
            </tr>
          </template>
        </tbody>
        <tfoot>
          <tr>
            <th>
              <gr-autocomplete
                  id="newProject"
                  query="[[_query]]"
                  threshold="1"
                  allow-non-suggested-values
                  tab-complete
                  placeholder="Repo"></gr-autocomplete>
            </th>
            <th colspan$="[[_getTypeCount()]]">
              <iron-input
                  class="newFilterInput"
                  placeholder="branch:name, or other search expression">
                <input
                    id="newFilter"
                    class="newFilterInput"
                    is="iron-input"
                    placeholder="branch:name, or other search expression">
              </iron-input>
            </th>
            <th>
              <gr-button link on-click="_handleAddProject">Add</gr-button>
            </th>
          </tr>
        </tfoot>
      </table>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-watched-projects-editor.js"></script>
</dom-module>
