TPE DOM/Custom elements
Introduction
This project is to enable web authors to define and use new types of DOM elements in a document.
References:
- Custom Elements spec
- whatwg html wiki
- whatwg dom wiki
- blink-dev intent-to-implement
- Blink bugs
- Safari bugs
Taipei Main Members
Engineers: Edgar Chen (main contact), John Dai
Meeting Minutes
Roadmap
Summary
We are now at Stage 4, working on performance work, especially on the critical blocker from enabling this feature on Nightly.
- Estimated nightly version: 59
- Firefox dev-platform intent-to-implement
Details
[Stage 1] (completed)
- Remove support of SVG-based custom element.
- Bug: 1274505
- Window interface
- HTMLElement constructor
- Support using ES6 classes
- Construction stack
- Bug: 1274159
- Document interface
- createElement, createElementNS
- Bug: 1276579
- window.customElements.define
- Bug: 1275835
[Stage 2] (completed)
- custom element upgrade reactions stack/queue
- Upgrade reaction
- Algorithm of creating an element
- Spec: https://dom.spec.whatwg.org/#concept-create-element
- Revise consumers (createElement[NS] and HTML parser accordingly
[Stage 3] (completed)
- Callback reaction queue
- Lifecycle callbacks
- sProcessingStack
- EnqueueLifecycleCallback
- connectedCallback
- disconnectedCallback
- attributeChangedCallback
[Stage 4] (WE'RE HERE)
- Performance work
- Enable on Nightly (estimated target 59)
[Stage 5]
- Ride to train
[Stage 6 - Backlog]
- Mutation algorithms (Shadow dom)
- CSS :define
- Performance
- Web-platform-tests
Project Dashboard
Meta Bugs
| ID | Summary | Priority | Status |
|---|---|---|---|
| 889230 | [meta] Implement Custom Elements (from Web Components) | P3 | RESOLVED |
1 Total; 0 Open (0%); 1 Resolved (100%); 0 Verified (0%);
1st Impl. Shipping Blocker: Performance issues (INPROGRESS)
12 Total; 0 Open (0%); 12 Resolved (100%); 0 Verified (0%);
Post 1st Ship: Stage_4 Bugs & Progress (BACKLOG)
| ID | Summary | Status | Target milestone | Resolution | Assigned to | Depends on | Blocks |
|---|---|---|---|---|---|---|---|
| 1326028 | customElements.define must upgrade custom element in shadow-including tree order | RESOLVED | mozilla61 | FIXED | mrbkap@gmail.com | 889230, 1419323 | |
| 1331334 | Implement :defined pseudo-class for custom elements | RESOLVED | mozilla63 | FIXED | smaug@mozilla.com | 1299363, 1301024, 1417829 | 889230, 1471871 |
| 1331341 | Enqueue custom element upgrade/callbacks reactions in shadow-including tree order when inserting/removing a node | RESOLVED | --- | DUPLICATE | nobody@mozilla.org | 889230 |
3 Total; 0 Open (0%); 3 Resolved (100%); 0 Verified (0%);
What Have Been DONE
1st Impl. Shipping Blocker: Stage_1 Bugs & Progress (DONE)
| ID | Summary | Status | Target milestone | Resolution | Assigned to | Depends on | Blocks |
|---|---|---|---|---|---|---|---|
| 1274159 | Add [HTMLConstructor] to support custom element feature | RESOLVED | mozilla53 | FIXED | echen@mozilla.com | 1275835 | 889230, 1287348, 1301024, 1317658 |
| 1274505 | Remove support of SVG-based custom element | RESOLVED | mozilla50 | FIXED | jdai@mozilla.com | 889230, 1276579, 1396765 | |
| 1275832 | Implement custom element name validation for custom element | RESOLVED | mozilla52 | FIXED | jdai@mozilla.com | 889230, 1275835, 1275839 | |
| 1275833 | Add CustomElementsRegistry interface for custom element | RESOLVED | mozilla50 | FIXED | jdai@mozilla.com | 1289872 | 889230, 1275835, 1275838, 1275839 |
| 1275835 | Implement CustomElementsRegistry define function | RESOLVED | mozilla51 | FIXED | echen@mozilla.com | 1275832, 1275833 | 889230, 1274159, 1275838, 1275839 |
| 1275838 | Implement CustomElementsRegistry get function | RESOLVED | mozilla52 | FIXED | jdai@mozilla.com | 1275833, 1275835 | 889230 |
| 1275839 | Implement CustomElementsRegistry whenDefined function | RESOLVED | mozilla52 | FIXED | jdai@mozilla.com | 1275832, 1275833, 1275835 | 889230 |
| 1276579 | Revise document.createElement[NS] for custom elements | RESOLVED | mozilla50 | FIXED | yrliou@gmail.com | 1274505, 1294100, 1318630, 1338889 | 889230, 1276240 |
| 1288306 | Disable custom elements web-platform v0 tests | RESOLVED | mozilla50 | FIXED | echen@mozilla.com | 889230, 1396765 | |
| 1294100 | TypeError: Argument 2 of Document.createElement can't be converted to a dictionary. | VERIFIED | mozilla51 | FIXED | jdai@mozilla.com | 889230, 1276579 | |
| 1309140 | Rename CustomElementsRegistry to CustomElementRegistry | RESOLVED | mozilla52 | FIXED | jdai@mozilla.com | 889230 | |
| 1341693 | Crash [@mozilla::dom::WindowBinding::get_customElements] | RESOLVED | mozilla54 | FIXED | echen@mozilla.com | 1340565, 889230 |
12 Total; 0 Open (0%); 11 Resolved (91.67%); 1 Verified (8.33%);
1st Impl. Shipping Blocker: Stage_2 Bugs & Progress (IN PROGRESS)
15 Total; 0 Open (0%); 15 Resolved (100%); 0 Verified (0%);
1st Impl. Shipping Blocker: Stage_3 Bugs & Progress (DONE)
| ID | Summary | Status | Target milestone | Resolution | Assigned to | Depends on | Blocks |
|---|---|---|---|---|---|---|---|
| 1121994 | Implement adopted callback for custom elements | RESOLVED | mozilla58 | FIXED | jdai@mozilla.com | 889230, 1293921 | |
| 1315885 | Implement callback reaction for custom element reactions | RESOLVED | mozilla56 | FIXED | jdai@mozilla.com | 1309147, 1325279, 1347446 | 889230, 1293921, 1379573 |
| 1334043 | Implement connected lifecycle callbacks for custom elements | RESOLVED | mozilla58 | FIXED | jessi3py@gmail.com | 889230, 1293921, 1387125 | |
| 1334044 | Implement disconnected lifecycle callbacks for custom elements | RESOLVED | mozilla58 | FIXED | jessi3py@gmail.com | 889230, 1293921 | |
| 1334051 | Implement list of observed attributes for custom elements' attributeChanged callbacks | RESOLVED | mozilla57 | FIXED | jessi3py@gmail.com | 889230, 1293921 | |
| 1340027 | Add annotation with the [CEReactions] attribute | RESOLVED | mozilla56 | FIXED | jdai@mozilla.com | 1293921, 1309147 | 889230 |
| 1392970 | Consider having a reference of the CustomElementDefinition in the custom element itself | RESOLVED | mozilla58 | FIXED | jessi3py@gmail.com | 889230, 1396567, 1408828, 1410790 |
7 Total; 0 Open (0%); 7 Resolved (100%); 0 Verified (0%);