<!--
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/gr-access-behavior/gr-access-behavior.html">
<link rel="import" href="../../../behaviors/base-url-behavior/base-url-behavior.html">
<link rel="import" href="../../../behaviors/gr-url-encoding-behavior.html">

<link rel="import" href="../../../styles/gr-menu-page-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-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../gr-access-section/gr-access-section.html">

<script src="../../../scripts/util.js"></script>

<dom-module id="gr-repo-access">
  <template>
    <style include="shared-styles">
      .gwtLink {
        margin-bottom: 1em;
      }
      .gwtLink {
        display: none;
      }
      .admin .gwtLink {
        display: block;
      }
      gr-button {
        display: none;
      }
      .admin gr-button.visible {
        display: inline-block;
        margin: 1em 0;
      }
      .weblink {
        margin-right: .2em;
      }
      .weblinks {
        display: none;
      }
      .weblinks.show {
        display: block;
      }
    </style>
    <style include="gr-menu-page-styles"></style>
    <main class$="[[_computeAdminClass(_isAdmin, _canUpload)]]">
      <div class="gwtLink">Editing access in the new UI is a work in progress. Visit the
        <a href$="[[computeGwtUrl(path)]]" rel="external">Old UI</a>
        if you need a feature that is not yet supported.
      </div>
      <template is="dom-if" if="[[_inheritsFrom]]">
        <h3 id="inheritsFrom">Rights Inherit From
          <a href$="[[_computeParentHref(_inheritsFrom.name)]]" rel="noopener">
              [[_inheritsFrom.name]]</a>
        </h3>
      </template>
      <div class$="weblinks [[_computeWebLinkClass(_weblinks)]]">
        History:
        <template is="dom-repeat" items="[[_weblinks]]" as="link">
          <a href="[[link.url]]" class="weblink" rel="noopener" target="[[link.target]]">
            [[link.name]]
          </a>
        </template>
      </div>
      <gr-button id="editBtn"
          class$="[[_computeShowEditClass(_sections)]]"
          on-tap="_handleEdit">[[_editOrCancel(_editing)]]</gr-button>
      <gr-button id="saveBtn"
          primary
          class$="[[_computeShowSaveClass(_editing)]]"
          on-tap="_handleSaveForReview"
          disabled$="[[!_modified]]">
            Save for review</gr-button>
      <template
          is="dom-repeat"
          items="{{_sections}}"
          as="section">
        <gr-access-section
            capabilities="[[_capabilities]]"
            section="{{section}}"
            labels="[[_labels]]"
            editing="[[_editing]]"
            groups="[[_groups]]"></gr-access-section>
      </template>
      <gr-button id="addReferenceBtn"
          class$="[[_computeShowSaveClass(_editing)]]"
          on-tap="_handleCreateSection">Add Reference</gr-button>
    </main>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-repo-access.js"></script>
</dom-module>
