<!DOCTYPE html>
<!--
Copyright (c) 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<link rel="import" href="/base/utils.html">

<polymer-element name="tr-b-ui-table-header-cell"
    on-tap="onTap_">
  <template>
  <style>
    :host {
      -webkit-user-select: none;
      display: flex;
    }

    span {
      flex: 0 1 auto;
    }

    side-element {
      -webkit-user-select: none;
      flex: 1 0 auto;
      padding-left: 4px;
      vertical-align: top;
      font-size: 15px;
      font-family: sans-serif;
      display: inline;
      line-height: 85%;
    }
  </style>

    <span id="title"></span><side-element id="side"></side-element>
  </template>

  <script>
  'use strict';

  Polymer({
    created: function() {
      this.tapCallback_ = undefined;
      this.cellTitle_ = '';
    },

    set cellTitle(value) {
      this.cellTitle_ = value;

      var titleNode;
      if (this.cellTitle_ instanceof Node)
        titleNode = this.cellTitle_;
      else
        titleNode = this.ownerDocument.createTextNode(this.cellTitle_);

      this.$.title.innerText = '';
      this.$.title.appendChild(titleNode);
    },

    get cellTitle() {
      return this.cellTitle_;
    },

    clearSideContent: function() {
      this.$.side.textContent = '';
    },

    set sideContent(content) {
      this.$.side.textContent = content;
    },

    get sideContent() {
      return this.$.side.textContent;
    },

    set tapCallback(callback) {
      this.style.cursor = 'pointer';
      this.tapCallback_ = callback;
    },

    get tapCallback() {
      return this.tapCallback_;
    },

    onTap_: function() {
      if (this.tapCallback_)
        this.tapCallback_();
    }
  });
</script>
</polymer-element>
