<!--
// Copyright 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.
-->
<import src="/sky/framework/sky-checkbox.sky" />
<import src="/sky/framework/sky-element/sky-element.sky" as="SkyElement" />

<sky-element
    name="test-element"
    attributes="size:number, checked:boolean,name:string"
    on-host-event="handleEvent">
<template>
  <div id="inside" on-test-event="handleEvent" lang="{{ value }}">{{ value }}</div>
  <sky-checkbox id="checkbox" checked="{{ checked }}" />
</template>
<script>
module.exports = class extends SkyElement {
  created() {
    this.lastEvent = null;
    this.value = 10;
    this.shadowRootReadyCount = 0;
    this.changes = [];
  }
  handleEvent(event) {
    this.lastEvent = event;
  }
  shadowRootReady() {
    this.shadowRootReadyCount++;
  }
  sizeChanged(oldValue, newValue) {
    this.recordAttributeChange('size', oldValue, newValue);
  }
  checkedChanged(oldValue, newValue) {
    this.recordAttributeChange('checked', oldValue, newValue);
  }
  nameChanged(oldValue, newValue) {
    this.recordAttributeChange('name', oldValue, newValue);
  }
  recordAttributeChange(name, oldValue, newValue) {
    this.changes.push({
      name: name,
      newValue: newValue,
      oldValue: oldValue,
    });
  }
}.register();
</script>
</sky-element>
