<!--
@license
Copyright (C) 2017 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="../../../behaviors/base-url-behavior/base-url-behavior.html">
<link rel="import" href="../../../behaviors/gr-admin-nav-behavior/gr-admin-nav-behavior.html">
<link rel="import" href="../../../behaviors/gr-url-encoding-behavior/gr-url-encoding-behavior.html">
<link rel="import" href="../../../styles/gr-menu-page-styles.html">
<link rel="import" href="../../../styles/gr-page-nav-styles.html">
<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
<link rel="import" href="../../shared/gr-dropdown-list/gr-dropdown-list.html">
<link rel="import" href="../../shared/gr-icons/gr-icons.html">
<link rel="import" href="../../shared/gr-js-api-interface/gr-js-api-interface.html">
<link rel="import" href="../../shared/gr-page-nav/gr-page-nav.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../gr-admin-group-list/gr-admin-group-list.html">
<link rel="import" href="../gr-group/gr-group.html">
<link rel="import" href="../gr-group-audit-log/gr-group-audit-log.html">
<link rel="import" href="../gr-group-members/gr-group-members.html">
<link rel="import" href="../gr-plugin-list/gr-plugin-list.html">
<link rel="import" href="../gr-repo/gr-repo.html">
<link rel="import" href="../gr-repo-access/gr-repo-access.html">
<link rel="import" href="../gr-repo-commands/gr-repo-commands.html">
<link rel="import" href="../gr-repo-dashboards/gr-repo-dashboards.html">
<link rel="import" href="../gr-repo-detail-list/gr-repo-detail-list.html">
<link rel="import" href="../gr-repo-list/gr-repo-list.html">

<dom-module id="gr-admin-view">
  <template>
    <style include="shared-styles">
      /* Workaround for empty style block - see https://github.com/Polymer/tools/issues/408 */
    </style>
    <style include="gr-menu-page-styles">
      /* Workaround for empty style block - see https://github.com/Polymer/tools/issues/408 */
    </style>
    <style include="gr-page-nav-styles">
      gr-dropdown-list {
        --trigger-style: {
          text-transform: none;
        }
      }
      .breadcrumbText {
        /* Same as dropdown trigger so chevron spacing is consistent. */
        padding: 5px 4px;
      }
      iron-icon {
        margin: 0 var(--spacing-xs);
      }
      .breadcrumb {
        align-items: center;
        display: flex;
      }
      .mainHeader {
        align-items: baseline;
        border-bottom: 1px solid var(--border-color);
        display: flex;
      }
      .selectText {
        display: none;
      }
      .selectText.show {
        display: inline-block;
      }
      main.breadcrumbs:not(.table) {
        margin-top: var(--spacing-l);
      }
    </style>
    <gr-page-nav class="navStyles">
      <ul class="sectionContent">
        <template id="adminNav" is="dom-repeat" items="[[_filteredLinks]]">
          <li class$="sectionTitle [[_computeSelectedClass(item.view, params)]]">
            <a class="title" href="[[_computeLinkURL(item)]]"
                  rel="noopener">[[item.name]]</a>
          </li>
          <template is="dom-repeat" items="[[item.children]]" as="child">
            <li class$="[[_computeSelectedClass(child.view, params)]]">
              <a href$="[[_computeLinkURL(child)]]"
                  rel="noopener">[[child.name]]</a>
            </li>
          </template>
          <template is="dom-if" if="[[item.subsection]]">
            <!--If a section has a subsection, render that.-->
            <li class$="[[_computeSelectedClass(item.subsection.view, params)]]">
              <a class="title" href$="[[_computeLinkURL(item.subsection)]]"
                  rel="noopener">
                [[item.subsection.name]]</a>
            </li>
            <!--Loop through the links in the sub-section.-->
            <template is="dom-repeat"
                items="[[item.subsection.children]]" as="child">
              <li class$="subsectionItem [[_computeSelectedClass(child.view, params, child.detailType)]]">
                <a href$="[[_computeLinkURL(child)]]">[[child.name]]</a>
              </li>
            </template>
          </template>
        </template>
      </ul>
    </gr-page-nav>
    <template is="dom-if" if="[[_subsectionLinks.length]]">
      <section class="mainHeader">
        <span class="breadcrumb">
          <span class="breadcrumbText">[[_breadcrumbParentName]]</span>
          <iron-icon icon="gr-icons:chevron-right"></iron-icon>
        </span>
        <gr-dropdown-list
            lowercase
            id="pageSelect"
            value="[[_computeSelectValue(params)]]"
            items="[[_subsectionLinks]]"
            on-value-change="_handleSubsectionChange">
        </gr-dropdown-list>
      </section>
    </template>
    <template is="dom-if" if="[[_showRepoList]]" restamp="true">
      <main class="table">
        <gr-repo-list class="table" params="[[params]]"></gr-repo-list>
      </main>
    </template>
    <template is="dom-if" if="[[_showGroupList]]" restamp="true">
      <main class="table">
        <gr-admin-group-list class="table" params="[[params]]">
        </gr-admin-group-list>
      </main>
    </template>
    <template is="dom-if" if="[[_showPluginList]]" restamp="true">
      <main class="table">
        <gr-plugin-list class="table" params="[[params]]"></gr-plugin-list>
      </main>
    </template>
    <template is="dom-if" if="[[_showRepoMain]]" restamp="true">
      <main class="breadcrumbs">
        <gr-repo repo="[[params.repo]]"></gr-repo>
      </main>
    </template>
    <template is="dom-if" if="[[_showGroup]]" restamp="true">
      <main class="breadcrumbs">
        <gr-group
            group-id="[[params.groupId]]"
            on-name-changed="_updateGroupName"></gr-group>
      </main>
    </template>
    <template is="dom-if" if="[[_showGroupMembers]]" restamp="true">
      <main class="breadcrumbs">
        <gr-group-members
            group-id="[[params.groupId]]"></gr-group-members>
      </main>
    </template>
    <template is="dom-if" if="[[_showRepoDetailList]]" restamp="true">
      <main class="table breadcrumbs">
        <gr-repo-detail-list
            params="[[params]]"
            class="table"></gr-repo-detail-list>
      </main>
    </template>
    <template is="dom-if" if="[[_showGroupAuditLog]]" restamp="true">
      <main class="table breadcrumbs">
        <gr-group-audit-log
            group-id="[[params.groupId]]"
            class="table"></gr-group-audit-log>
      </main>
    </template>
    <template is="dom-if" if="[[_showRepoCommands]]" restamp="true">
      <main class="breadcrumbs">
        <gr-repo-commands
            repo="[[params.repo]]"></gr-repo-commands>
      </main>
    </template>
    <template is="dom-if" if="[[_showRepoAccess]]" restamp="true">
      <main class="breadcrumbs">
        <gr-repo-access
            path="[[path]]"
            repo="[[params.repo]]"></gr-repo-access>
      </main>
    </template>
    <template is="dom-if" if="[[_showRepoDashboards]]" restamp="true">
      <main class="table breadcrumbs">
        <gr-repo-dashboards repo="[[params.repo]]"></gr-repo-dashboards>
      </main>
    </template>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
    <gr-js-api-interface id="jsAPI"></gr-js-api-interface>
  </template>
  <script src="gr-admin-view.js"></script>
</dom-module>
