<!--
// Copyright 2015 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.
-->
<import src="/sky/framework/elements/material-element.sky" />
<import src="/sky/framework/elements/sky-element.sky" />
<import src="stock-arrow.sky" />

<sky-element>
<template>
  <style>
  :host {
    // TODO(eseidel): Why does setting height here make this too big?
    // height: 48px;
    max-height: 48px;
    display: flex;
    align-items: center;
    border-bottom: 1px solid #F4F4F4;
    padding-top: 16px;
    padding-left: 16px;
    padding-right: 16px;
    padding-bottom: 20px;
  }
  stock-arrow {
    margin-right: 16px;
  }
  #ticker {
    flex: 1;
    font-family: 'Roboto Medium', 'Helvetica';
  }
  #last-sale {
    text-align: right;
    padding-right: 16px;
  }
  #change {
    color: #8A8A8A;
    text-align: right;
  }
  </style>
  <stock-arrow id="arrow" />
  <div id="ticker" />
  <div id="last-sale" />
  <div id="change" />
</template>
<script>
import "dart:sky";

@Tagname('stock')
class Stock extends MaterialElement {
  var model; // model.Stock

  void shadowRootReady() {
    shadowRoot.getElementById('ticker').textContent = model.symbol;

    Element lastSale = shadowRoot.getElementById('last-sale');
    lastSale.textContent = "\$${model.lastSale.toStringAsFixed(2)}";

    Element change = shadowRoot.getElementById('change');
    String changeString = "${model.percentChange.toStringAsFixed(2)}%";
    if (model.percentChange > 0)
      changeString = "+" + changeString;
    change.textContent = changeString;

    StockArrow arrow = shadowRoot.getElementById('arrow');
    arrow.change = model.percentChange;
  }
}

_init(script) => register(script, Stock);
</script>
</sky-element>
