12 | | * Implementation underway in WebKit |
13 | | * Mozilla is generally interested, but focused on Boot 2 Gecko for now |
14 | | * Microsoft has showed interest as well. Shadow DOM is remininscent of HTC/behaviors. Windows 8 controls effectively have a fake Shadow DOM built in JS. They want this to solve that problem in the long term. |
15 | | * Spec is very robust. Will likely push to Working Draft at F2F in May |
16 | | * Running behind a flag. Only in Canary/Dev in Chrome (basically the Nightly builds) |
17 | | * We will not ship and release to web at large until at least one other implementation in progress. |
18 | | |
| 12 | * Implementation underway in WebKit |
| 13 | * Mozilla is generally interested, but focused on Boot 2 Gecko for now |
| 14 | * Microsoft has showed interest as well. Shadow DOM is remininscent of HTC/behaviors. Windows 8 controls effectively have a fake Shadow DOM built in JS. They want this to solve that problem in the long term. |
| 15 | * Spec is very robust. Will likely push to Working Draft at F2F in May |
| 16 | * Running behind a flag. Only in Canary/Dev in Chrome (basically the Nightly builds) |
| 17 | * We will not ship and release to web at large until at least one other implementation in progress. |
| 18 | |
20 | | * A lot of interest from web developers. |
21 | | * Interesting issues to consider, especially around modifying the HTML parser behavior |
22 | | * Working with Henry Sivonen (sp?) at Mozilla to investigate purely additive things to do to the parser to not break existing content |
23 | | * Hoping to push small delta to HTML spec instead of its own spec. |
24 | | |
| 20 | |
| 21 | * A lot of interest from web developers. |
| 22 | * Interesting issues to consider, especially around modifying the HTML parser behavior |
| 23 | * Working with Henry Sivonen (sp?) at Mozilla to investigate purely additive things to do to the parser to not break existing content |
| 24 | * Hoping to push small delta to HTML spec instead of its own spec. |
| 25 | |
42 | | * For any given node, you can have a shadowRoot. You can have more than one of them, in a stack. |
43 | | * Every shadowRoot is a document fragment that can have zero or more nodes of its own that define a DOM subtree. |
44 | | * Those nodes are '''not''' accessible to the document tree (except through teh shadowRoot) |
45 | | * Allows creating a sub-tree associated with an element but not presented as part of it in the DOM |
46 | | * When rendering, there's an algorithm to render them as part of the document tree. |
47 | | * Shadow DOM spec formalizes how they're composed, interact with the document, and what the encapsualtion boundaries are between the document and the shadow tree. |
48 | | * This gives you the capability to add more rendering to an existing node. Example: a navigation bar with no content when viewed from the rest of the document, but renders, has styling, etc in reality. |
49 | | * You to compose the logical DOM children of the node into the shadow DOM for rendering. Without this, all that would render would be in the shadow DOM. |
50 | | * Insertion points are special nodes that allow you to specify "holes" in the shadow DOM where the logical children should render. For example, take the <aside> in the node and put it into a specific part of a flexbox in the shadow DOM. |
51 | | * Insertion points are <content> nodes. Has a special attribute: "select". Allows you to specify a limited subset of CSS selectors. This is how you select which parts of the logical DOM children of the node are rendered in which <content> nodes. |
52 | | * This allows you to create layout managers. So the navigation bar example could have two content areas: one area takes all <li>'s (that are not taken by the other), the other takes all the <li>'s with a class of 'login'. |
53 | | * Another example: you pick out breaking news (via their class names), and put them in a special section at the top. No need to change markup (it's presentational anyway), just create two <content> nodes, one of which gets the breaking news and one of which gets the other content. |
54 | | * This allows you to add extra controls and behaviors easily. |
| 43 | * For any given node, you can have a shadowRoot. You can have more than one of them, in a stack. |
| 44 | * Every shadowRoot is a document fragment that can have zero or more nodes of its own that define a DOM subtree. |
| 45 | * Those nodes are '''not''' accessible to the document tree (except through teh shadowRoot) |
| 46 | * Allows creating a sub-tree associated with an element but not presented as part of it in the DOM |
| 47 | * When rendering, there's an algorithm to render them as part of the document tree. |
| 48 | * Shadow DOM spec formalizes how they're composed, interact with the document, and what the encapsualtion boundaries are between the document and the shadow tree. |
| 49 | * This gives you the capability to add more rendering to an existing node. Example: a navigation bar with no content when viewed from the rest of the document, but renders, has styling, etc in reality. |
| 50 | * You to compose the logical DOM children of the node into the shadow DOM for rendering. Without this, all that would render would be in the shadow DOM. |
| 51 | * Insertion points are special nodes that allow you to specify "holes" in the shadow DOM where the logical children should render. For example, take the <aside> in the node and put it into a specific part of a flexbox in the shadow DOM. |
| 52 | * Insertion points are <content> nodes. Has a special attribute: "select". Allows you to specify a limited subset of CSS selectors. This is how you select which parts of the logical DOM children of the node are rendered in which <content> nodes. |
| 53 | * This allows you to create layout managers. So the navigation bar example could have two content areas: one area takes all <li>'s (that are not taken by the other), the other takes all the <li>'s with a class of 'login'. |
| 54 | * Another example: you pick out breaking news (via their class names), and put them in a special section at the top. No need to change markup (it's presentational anyway), just create two <content> nodes, one of which gets the breaking news and one of which gets the other content. |
| 55 | * This allows you to add extra controls and behaviors easily. |
77 | | * Selection is a beast, especially with multiple ranges. There is a serious discussion thave about this. rniwa would probably say, "no multiple selection". It gets complicated very quickly. Currently, if a selection starts in the shadow DOM, we can't expose it--because from the perspective of the doc nothing happened. |
| 78 | * Selection is a beast, especially with multiple ranges. There is a serious discussion thave about this. rniwa would probably say, "no multiple selection". It gets complicated very quickly. Currently, if a selection starts in the shadow DOM, we can't expose it--because from the perspective of the doc nothing happened. |
| 79 | |
| 80 | * If a component decides to expose its shadowRoot somewhere, then anyone can interact with it--it's just DOM. But by default the shadowRoot object isn't shared. IF it is, the containing page can do anything it wants. So if the component exposes any element, then you can walk up to the shadow DOM in the containing thing. The parentnode of the shadowRoot is null (although there is a host attribute that points to the document), to prevent accidentally walking back up into the document and exposing your root if you don't want to. |
90 | | * Currently we're focusing on robustness. Using a fuzzer. We get a steady trickle constantly. Then we'll focus on performance. |
91 | | * First week we ran it, we got <select> and <video> bugs all the time. All of these bugs are posted to crbug.com and upstreamed to WebKit. |
92 | | |
93 | | * There is some remaining work we're holding off on (waiting for other implementors to provide feedback) |
94 | | * One cool thing to add is a shared stylesheet. Important for widget toolkits--right now you'd have to have a <style> block in every instance of the component. Still don't have an elegant way to do this. |
| 91 | * Currently we're focusing on robustness. Using a fuzzer. We get a steady trickle constantly. Then we'll focus on performance. |
| 92 | * First week we ran it, we got <select> and <video> bugs all the time. All of these bugs are posted to crbug.com and upstreamed to WebKit. |
| 93 | |
| 94 | * There is some remaining work we're holding off on (waiting for other implementors to provide feedback) |
| 95 | * One cool thing to add is a shared stylesheet. Important for widget toolkits--right now you'd have to have a <style> block in every instance of the component. Still don't have an elegant way to do this. |