Adam Barth d1d6e4436d Make sky/tests/services/event-sender.sky pass
This CL ports sky/framework/shell.sky to Dart and makes event-sender.sky. I've
also removed a number of not-that-interesting tests for the JS Mojo bindings.

R=eseidel@chromium.org, rafaelw@chromium.org

Review URL: https://codereview.chromium.org/922123002
2015-02-13 13:52:08 -08:00
..
2015-01-29 22:07:13 -08:00

SkyElement

SkyElement is the framework for creating...yup...Sky Elements. It take heavy inspriation from Polymer and isn't very fully featured...yet

Declaring an element

<import src="../path/to/sky-element.sky" as="SkyElement" />
<template>
  <my-other-element>Hello, {{ place }}</my-other-element>
</template>
<script>
// SkyElement takes a single object as it's only parameter
SkyElement({
  name: 'my-element', // required. The element's tag-name
  attached: function() {
    this.place = 'World';
  }, // optional
  detached: function() {}, // optional
  attributeChanged: function(attrName, newValue, oldValue) {} // optional
});
</script>

Note that an element's declared ShadowDOM is the previous <template> element to the <script> element which defines the element.

Databinding

SkyElement's databinding support is derived from Polymer's. At the moment, there are some key differences:

There is not yet support for

  • Declarative event handlers
  • Inline expressions
  • Self-observation (e.g. fooChanged() gets invoked when this.foo is changed)
  • Computed properties (e.g. the computed block)
  • Conditional attributes (e.g. <my-foo checked?="{{ val }}")

Also, because there are so few built-in elements in Sky, the default behavior of HTMLElement with bindings is to assign to the property. e.g.

<my-foo bar="{{ bas }}">

Will not setAttribute on the my-foo, instead it will assign to the bar property of my-foo. There are two exceptions to this: class & style -- those stillsetAttribute.