This has the following implications: - There's no createElement() function any more. If you want to create an element from script, you have to use its constructor. - There's no async element registration. The parser will block until all the imports are imported when you use a tag name of a custom element that hasn't been registered yet, in case one of the imports defines it. - If you try to construct a non-registered element in markup, it turns into an <error> element. - <div>, <span>, and <error> are new built-in elements. R=esprehn@chromium.org Review URL: https://codereview.chromium.org/695423004
2.4 KiB
Sky Module System
This document describes the Sky module system.
Overview
The Sky module system is based on the import element. In its
most basic form, you import a module as follows:
<import src="path/to/module.sky" />
As these import elements are inserted into a document, the
document's list of outstanding dependencies grows. When an imported
module completes, it is removed from the document's list of
outstanding dependencies.
Before executing script or inserting an element that is not already registered, the parser waits until the list of outstanding dependencies is empty. After the parser has finished parsing, the document waits until its list of outstanding dependencies is empty before the module it represents is marked complete.
Module API
Within a script in a module, the module identifier is bound to
the Module object that represents the module.
Exporting values
A module can export a value by assigning the exports property of
its Module object. By default, the exports property of a
Module is its Document object, so that a script-less
import is still useful (it exposes its contents, e.g. templates that
the import might have been written to provide).
Exporting element definitions
When importing a module into another, Sky looks at the properties on
the imported module's exports value, and for each property that is
an element constructor (generated by registerElement()), it adds
an element to the importee's element registry.
Naming modules
The as attribute on the import element binds a name to the
imported module:
<import src="path/to/chocolate.sky" as="chocolate" />
The parser executes the contents of script elements inside a module as if they were executed as follow:
(new Function(name_1, ..., name_n, module, source_code)).call(
value_1, ..., value_n, source_module);
Where name_1 through name_n are the names bound to the
various named imports in the script element's document,
source_code is the text content of the script element,
source_module`` is the Moduleobject of the script element's module, andvalue_1throughvalue_n``` are the values
exported by the various named imports in the script element's
document.
When an import fails to load, the as name for the import gets
bound to undefined.