<!--
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="../../../behaviors/rest-client-behavior.html">
<link rel="import" href="../../shared/gr-account-link/gr-account-link.html">
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
<link rel="import" href="../../shared/gr-editable-label/gr-editable-label.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../gr-reviewer-list/gr-reviewer-list.html">

<dom-module id="gr-change-metadata">
  <template>
    <style>
      section:not(:first-of-type) {
        margin-top: 1em;
      }
      .title,
      .value {
        display: block;
      }
      .title {
        color: #666;
        font-weight: bold;
      }
      .labelValueContainer:not(:first-of-type) {
        margin-top: .25em;
      }
      .labelValueContainer .approved,
      .labelValueContainer .notApproved {
        display: inline-block;
        padding: .1em .3em;
        border-radius: 3px;
      }
      .labelValue {
        display: inline-block;
      }
      .approved {
        background-color: #d4ffd4;
      }
      .notApproved {
        background-color: #ffd4d4;
      }
      @media screen and (max-width: 50em), screen and (min-width: 75em) {
        :host {
          display: table;
        }
        section {
          display: table-row;
        }
        section:not(:first-of-type) .title,
        section:not(:first-of-type) .value {
          padding-top: .5em;
        }
        .title,
        .value {
          display: table-cell;
          vertical-align: top;
        }
        .title {
          padding-right: .5em;
        }
      }
    </style>
    <section>
      <span class="title">Updated</span>
      <span class="value">
        <gr-date-formatter
            date-str="[[change.updated]]"></gr-date-formatter>
      </span>
    </section>
    <section>
      <span class="title">Owner</span>
      <span class="value">
        <gr-account-link account="[[change.owner]]"></gr-account-link>
      </span>
    </section>
    <section>
      <span class="title">Reviewers</span>
      <span class="value">
        <gr-reviewer-list
            change="[[change]]"
            mutable="[[mutable]]"
            suggest-from="[[serverConfig.suggest.from]]"></gr-reviewer-list>
      </span>
    </section>
    <section>
      <span class="title">Project</span>
      <span class="value">[[change.project]]</span>
    </section>
    <section>
      <span class="title">Branch</span>
      <span class="value">[[change.branch]]</span>
    </section>
    <section>
      <span class="title">Commit</span>
      <span class="value">
        <template is="dom-if" if="[[_showWebLink]]">
          <a target="_blank"
              href$="[[_webLink]]">[[_computeShortHash(commitInfo)]]</a>
        </template>
        <template is="dom-if" if="[[!_showWebLink]]">
          [[_computeShortHash(commitInfo)]]
        </template>
      </span>
    </section>
    <section>
      <span class="title">Topic</span>
      <span class="value">
        <gr-editable-label
            value="{{change.topic}}"
            placeholder="[[_computeTopicPlaceholder(_topicReadOnly)]]"
            read-only="[[_topicReadOnly]]"
            on-changed="_handleTopicChanged"></gr-editable-label>
      </span>
    </section>
    <section class="strategy" hidden$="[[_computeHideStrategy(change)]]" hidden>
      <span class="title">Strategy</span>
      <span class="value">[[_computeStrategy(change)]]</span>
    </section>
    <template is="dom-repeat"
        items="[[_computeLabelNames(change.labels)]]" as="labelName">
      <section>
        <span class="title">[[labelName]]</span>
        <span class="value">
          <template is="dom-repeat"
              items="[[_computeLabelValues(labelName, change.labels)]]"
              as="label">
            <div class="labelValueContainer">
              <span class$="[[label.className]]">
                <span class="labelValue">[[label.value]]</span>
                <gr-account-link account="[[label.account]]"></gr-account-link>
              </span>
            </div>
          </template>
        </span>
      </section>
    </template>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-change-metadata.js"></script>
</dom-module>
