<!--
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="../../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 #ddd;
      }
      .projectFilter {
        color: #777;
        font-style: italic;
        margin-left: 1em;
      }
      .newFilterInput {
        width: 100%;
      }
    </style>
    <div class="gr-form-styles">
      <table id="watchedProjects">
        <thead>
          <tr>
            <th class="projectHeader">Project</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-tap="_handleRemoveProject">Delete</gr-button>
              </td>
            </tr>
          </template>
        </tbody>
        <tfoot>
          <tr>
            <th>
              <gr-autocomplete
                  id="newProject"
                  debounce-wait="200"
                  query="[[_query]]"
                  threshold="1"
                  placeholder="Project"></gr-autocomplete>
            </th>
            <th colspan$="[[_getTypeCount()]]">
              <input
                  id="newFilter"
                  class="newFilterInput"
                  is="iron-input"
                  placeholder="branch:name, or other search expression">
            </th>
            <th>
              <gr-button link on-tap="_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>
