Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: sky/specs/modules.md

Issue 695043002: Specs: make element registrations be per-module, define how they are (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« sky/specs/apis.md ('K') | « sky/specs/apis.md ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 Sky Module System 1 Sky Module System
2 ================= 2 =================
3 3
4 This document describes the Sky module system. 4 This document describes the Sky module system.
5 5
6 Overview 6 Overview
7 -------- 7 --------
8 8
9 The Sky module system is based on the ```import``` element. In its 9 The Sky module system is based on the ```import``` element. In its
10 most basic form, you import a module as follows: 10 most basic form, you import a module as follows:
11 11
12 ```html 12 ```html
13 <import src="path/to/module.sky" /> 13 <import src="path/to/module.sky" />
14 ``` 14 ```
15 15
16 As these ```import``` elements are inserted into a document, the 16 As these ```import``` elements are inserted into a document, the
17 document's list of outstanding dependencies grows. When an imported 17 document's list of outstanding dependencies grows. When an imported
18 module completes, it is removed from the document's list of 18 module completes, it is removed from the document's list of
19 outstanding dependencies. 19 outstanding dependencies.
20 20
21 Before executing any ```script``` elements, the parser waits until the 21 Before executing any ```script``` elements, the parser waits until the
22 list of outstanding dependencies is empty. After the parser has 22 list of outstanding dependencies is empty. After the parser has
23 finished parsing, the document waits until its list of outstanding 23 finished parsing, the document waits until its list of outstanding
24 dependencies is empty before the module it represents is marked 24 dependencies is empty before the module it represents is marked
25 complete. 25 complete.
26 26
27
27 Module API 28 Module API
28 ---------- 29 ----------
29 30
30 Within a script in a module, the ```module``` identifier is bound to 31 Within a script in a module, the ```module``` identifier is bound to
31 the ```Module``` object that represents the module: 32 the ```Module``` object that represents the module:
32 33
33 ```javascript 34 ```javascript
34 interface Module : EventTarget { 35 interface Module : EventTarget {
35 constructor (Application application, Document document); // O(1) 36 constructor (Application application, Document document); // O(1)
36 attribute any exports; // O(1) // defaults to the module's document 37 attribute any exports; // O(1) // defaults to the module's document
37 readonly attribute Document document; // O(1) // the module's document 38 readonly attribute Document document; // O(1) // the module's document
38 readonly attribute Application application; // O(1) 39 readonly attribute Application application; // O(1)
39 } 40 }
40 ``` 41 ```
41 42
42 ### Exporting values ### 43 ### Exporting values ###
43 44
44 A module can export a value by assigning the ```exports``` property of 45 A module can export a value by assigning the ```exports``` property of
45 its ```Module``` object. By default, the ```exports``` property of a 46 its ```Module``` object. By default, the ```exports``` property of a
46 ```Module``` is its ```Document``` object, so that a script-less 47 ```Module``` is its ```Document``` object, so that a script-less
47 import is still useful (it exposes its contents, e.g. templates that 48 import is still useful (it exposes its contents, e.g. templates that
48 the import might have been written to provide). 49 the import might have been written to provide).
49 50
51 ### Exporting element definitions ###
52
53 When importing a module into another, Sky looks at the properties on
54 the imported module's ``exports`` value, and for each property that is
55 an element constructor (generated by ``registerElement()``), it adds
56 an element to the importee's element registry.
57
58
50 Naming modules 59 Naming modules
51 -------------- 60 --------------
52 61
53 The ```as``` attribute on the ```import``` element binds a name to the 62 The ```as``` attribute on the ```import``` element binds a name to the
54 imported module: 63 imported module:
55 64
56 ```html 65 ```html
57 <import src="path/to/chocolate.sky" as="chocolate" /> 66 <import src="path/to/chocolate.sky" as="chocolate" />
58 ``` 67 ```
59 68
60 The parser executes the contents of script elements inside a module as 69 The parser executes the contents of script elements inside a module as
61 if they were executed as follow: 70 if they were executed as follow:
62 71
63 ```javascript 72 ```javascript
64 (new Function(name_1, ..., name_n, module, source_code)).call( 73 (new Function(name_1, ..., name_n, module, source_code)).call(
65 value_1, ..., value_n, source_module); 74 value_1, ..., value_n, source_module);
66 ``` 75 ```
67 76
68 Where ```name_1``` through ```name_n``` are the names bound to the 77 Where ```name_1``` through ```name_n``` are the names bound to the
69 various named imports in the script element's document, 78 various named imports in the script element's document,
70 ```source_code``` is the text content of the script element, 79 ```source_code``` is the text content of the script element,
71 ```source_module`` is the ```Module``` object of the script element's 80 ```source_module`` is the ```Module``` object of the script element's
72 module, and ```value_1``` through ```value_n``` are the values 81 module, and ```value_1``` through ```value_n``` are the values
73 exported by the various named imports in the script element's 82 exported by the various named imports in the script element's
74 document. 83 document.
75 84
76 When an import fails to load, the ```as``` name for the import gets 85 When an import fails to load, the ```as``` name for the import gets
77 bound to ```undefined```. 86 bound to ```undefined```.
OLDNEW
« sky/specs/apis.md ('K') | « sky/specs/apis.md ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698