<!--
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-settings-styles.html">

<dom-module id="gr-watched-projects-editor">
  <template>
    <style>
      th.projectHeader {
        width: 11em;
      }
      th.notificationHeader {
        text-align: center;
      }
      th.notifType {
        text-align: center;
        padding: 0 0.4em;
      }
      td.notifControl {
        cursor: pointer;
        text-align: center;
      }
      td.notifControl:hover {
        border: 1px solid #ddd;
      }
      .projectFilter {
        color: #777;
        font-style: italic;
        margin-left: 1em;
      }
      input {
        font-size: 1em;
      }
      .newProjectInput {
        width: 10em;
      }
      .newFilterInput {
        width: 26em;
      }
    </style>
    <style include="gr-settings-styles"></style>
    <div class="gr-settings-styles">
      <table>
        <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 class="delete-column">
                <gr-button
                    data-index$="[[projectIndex]]"
                    on-tap="_handleRemoveProject">Delete</gr-button>
              </td>
            </tr>
          </template>
        </tbody>
        <tfoot>
          <tr>
            <th>
              <gr-autocomplete
                  id="newProject"
                  class="newProjectInput"
                  is="iron-input"
                  query="[[_query]]"
                  threshold="3"
                  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 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>
