<!--
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);
      }
    </style>
    <span>
      <template is="dom-if" if="[[!hideAvatar]]">
        <gr-avatar account="[[account]]"
            image-size="[[avatarImageSize]]"></gr-avatar>
      </template>
      <span class="text">
        <span>[[_computeName(account, _serverConfig)]]</span>
        <span hidden$="[[!_computeShowEmail(showEmail, account)]]">
          [[_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>
