<!--
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">
      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;
      }
      .loading {
        display: none;
      }
      #loading.loading {
        display: block;
      }
      #loading:not(.loading) {
        display: none;
      }
    </style>
    <style include="gr-menu-page-styles"></style>
    <main class$="[[_computeAdminClass(_isAdmin, _canUpload)]]">
      <div id="loading" class$="[[_computeLoadingClass(_loading)]]">
        Loading...
      </div>
      <div id="loadedContent" class$="[[_computeLoadingClass(_loading)]]">
        <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="visible"
            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>
      </div>
    </main>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-repo-access.js"></script>
</dom-module>
