<!--
// 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-element.sky" />

<sky-element attributes="type:string, size:number">
<template>
  <img />
</template>
<script>
import "dart:sky";

const String kAssetBase = '/sky/assets/material-design-icons';

@Tagname('sky-icon')
class SkyIcon extends SkyElement {
  Element _img;

  void _setSize(int size) {
    _img.style['height'] = '${size}px';
    _img.style['width'] = '${size}px';
  }

  void _setSrc(String type, int size) {
    List<String> parts = type.split('/');
    if (parts.length < 2)
      return;
    String category = parts[0];
    String subtype = parts[1];
    _img.src = '${kAssetBase}/${category}/2x_web/ic_${subtype}_${size}dp.png';
  }

  void shadowRootReady() {
    _img = shadowRoot.firstElementChild;
    int size = this.size.floor();
    _setSize(size);
    _setSrc(type, size);
  }

  void typeChanged(String oldValue, String newValue) {
    if (_img != null)
      _setSrc(newValue, size.floor());
  }

  void sizeChanged(double oldValue, double newValue) {
    if (_img != null) {
      _setSize(newValue.floor());
      _setSrc(type, newValue.floor());
    }
  }
}

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