<!--
@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"></style>
    <style include="gr-menu-page-styles"></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 .2em;
      }
      .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: 1em;
      }
    </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>
