<!--
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="../../../behaviors/gr-anonymous-name-behavior/gr-anonymous-name-behavior.html">
<link rel="import" href="../../../behaviors/gr-tooltip-behavior/gr-tooltip-behavior.html">
<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../gr-avatar/gr-avatar.html">
<link rel="import" href="../gr-rest-api-interface/gr-rest-api-interface.html">

<dom-module id="gr-account-label">
  <template>
    <style include="shared-styles">
      :host {
        display: inline;
      }
      :host::after {
        content: var(--account-label-suffix);
      }
      gr-avatar {
        height: 1.3em;
        width: 1.3em;
        margin-right: .15em;
        vertical-align: -.25em;
      }
      .text {
        @apply --gr-account-label-text-style;
      }
      .text:hover {
        @apply --gr-account-label-text-hover-style;
      }
      .email,
      .showEmail .name {
        display: none;
      }
      .showEmail .email {
        display: inline-block;
      }
    </style>
    <span>
      <template is="dom-if" if="[[!hideAvatar]]">
        <gr-avatar account="[[account]]"
            image-size="[[avatarImageSize]]"></gr-avatar>
      </template>
      <span class$="text [[_computeShowEmailClass(account)]]">
        <span class="name">
          [[_computeName(account, _serverConfig)]]</span>
        <span class="email">
          [[_computeEmailStr(account)]]
        </span>
        <template is="dom-if" if="[[account.status]]">
          <span>([[account.status]])</span>
        </template>
      </span>
    </span>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="../../../scripts/util.js"></script>
  <script src="gr-account-label.js"></script>
</dom-module>
