diff --git a/src/lib/annotations/annotations.html b/src/lib/annotations/annotations.html index da03b66283..b68507ba9e 100644 --- a/src/lib/annotations/annotations.html +++ b/src/lib/annotations/annotations.html @@ -273,7 +273,7 @@ _localSubTree: function(node, host) { return (node === host) ? node.childNodes : - (node.lightChildren || node.childNodes); + (node._lightChildren || node.childNodes); }, findAnnotatedNode: function(root, annote) { diff --git a/src/lib/dom-api.html b/src/lib/dom-api.html index e515003682..7c4ad77a1c 100644 --- a/src/lib/dom-api.html +++ b/src/lib/dom-api.html @@ -203,7 +203,7 @@ // a node is in a shadyRoot, is a shadyRoot, // or has a lightParent _nodeIsInLogicalTree: function(node) { - return Boolean(node.lightParent || node._isShadyRoot || + return Boolean(node._lightParent || node._isShadyRoot || this._ownerShadyRootForNode(node) || node.shadyRoot); }, @@ -230,12 +230,12 @@ }, _removeNodeFromHost: function(node) { - if (node.lightParent) { + if (node._lightParent) { var root = this._ownerShadyRootForNode(node); if (root) { root.host._elementRemove(node); } - this._removeLogicalInfo(node, node.lightParent); + this._removeLogicalInfo(node, node._lightParent); } this._removeOwnerShadyRoot(node); }, @@ -260,11 +260,11 @@ var c$ = Array.prototype.slice.call(node.childNodes); for (var i=0, n; (i+~])' }, - HOST: ':host', - ROOT: ':root', + HOST_SELECTORS: [':host'], + SCOPE_SELECTORS: [':root'], XSCOPE_NAME: 'x-scope' }; diff --git a/src/mini/shady.html b/src/mini/shady.html index 85fb7a5434..71191e99c7 100644 --- a/src/mini/shady.html +++ b/src/mini/shady.html @@ -46,7 +46,7 @@ // removed from document by shadyDOM distribution // so we ensure this here if (!this.dataHost) { - upgradeLightChildren(this.lightChildren); + upgradeLightChildren(this._lightChildren); } } }, @@ -236,7 +236,7 @@ this._updateChildNodes(this, this._composeNode(this)); var p$ = this.shadyRoot._insertionPoints; for (var i=0, l=p$.length, p, parent; (ia: b: '); - assertArrayEqual(host.lightChildren, [a]); - assert.strictEqual(a.lightParent, host); - assertArrayEqual(host.shadyRoot.lightChildren, [p]); - assert.strictEqual(p.lightParent, host.shadyRoot); - assertArrayEqual(p.lightChildren, [b, content]); - assert.strictEqual(b.lightParent, p); - assert.strictEqual(content.lightParent, p); - assertArrayEqual(p.shadyRoot.lightChildren, + assertArrayEqual(host._lightChildren, [a]); + assert.strictEqual(a._lightParent, host); + assertArrayEqual(host.shadyRoot._lightChildren, [p]); + assert.strictEqual(p._lightParent, host.shadyRoot); + assertArrayEqual(p._lightChildren, [b, content]); + assert.strictEqual(b._lightParent, p); + assert.strictEqual(content._lightParent, p); + assertArrayEqual(p.shadyRoot._lightChildren, [textNodeA, contentA, textNodeB, contentB]); } @@ -165,7 +165,7 @@ distributeContentNow(host); assert.strictEqual(getComposedHTML(host), ''); - host.lightChildren = []; + host._lightChildren = []; distributeContentNow(host); assert.strictEqual(getComposedHTML(host), 'fallback'); }); @@ -180,11 +180,11 @@ distributeContentNow(host); assert.strictEqual(getComposedHTML(host), 'Helloafter'); - host.shadyRoot.lightChildren[1].textContent = ''; + host.shadyRoot._lightChildren[1].textContent = ''; distributeContentNow(host); assert.strictEqual(getComposedHTML(host), 'Hello'); - host.shadyRoot.lightChildren = []; + host.shadyRoot._lightChildren = []; distributeContentNow(host); assert.strictEqual(getComposedHTML(host), ''); }); @@ -203,11 +203,11 @@ distributeContentNow(host); assert.strictEqual(getComposedHTML(host), ''); - host.shadyRoot.firstChild.lightChildren = []; + host.shadyRoot.firstChild._lightChildren = []; distributeContentNow(host); assert.strictEqual(getComposedHTML(host), ''); - host.shadyRoot.lightChildren = []; + host.shadyRoot._lightChildren = []; distributeContentNow(host); assert.strictEqual(getComposedHTML(host), ''); }); @@ -225,7 +225,7 @@ distributeContentNow(host); assert.strictEqual(getComposedHTML(host), ''); - host.lightChildren = []; + host._lightChildren = []; distributeContentNow(host); assert.strictEqual(getComposedHTML(host), 'fallback'); }); @@ -265,11 +265,11 @@ distributeContentNow(host); assert.strictEqual(getComposedHTML(host), 'Hello'); - host.shadyRoot.lightChildren.splice(1, 1); // remove b + host.shadyRoot._lightChildren.splice(1, 1); // remove b distributeContentNow(host); assert.strictEqual(getComposedHTML(host), 'Hello'); - host.shadyRoot.lightChildren = []; // remove a + host.shadyRoot._lightChildren = []; // remove a distributeContentNow(host); assert.strictEqual(getComposedHTML(host), ''); }); @@ -368,7 +368,7 @@ assert.strictEqual(getComposedHTML(host), 'Hello'); var b = document.createElement('b'); - host.lightChildren[0] = b; + host._lightChildren[0] = b; distributeContentNow(host); assert.strictEqual(getComposedHTML(host), ''); }); @@ -437,12 +437,12 @@ }); function syncLightDOM(n) { - if (n.lightChildren) { + if (n._lightChildren) { var c$ = n.__patched ? n._composedChildren || [] : Array.prototype.slice.call(n.childNodes); c$.forEach(function(c) { - if (n.lightChildren.indexOf(c) < 0) { - c.lightParent = n; - n.lightChildren.push(c); + if (n._lightChildren.indexOf(c) < 0) { + c._lightParent = n; + n._lightChildren.push(c); } }); } diff --git a/test/unit/styling-cross-scope-var.html b/test/unit/styling-cross-scope-var.html index f042be0894..b3b67e54a8 100644 --- a/test/unit/styling-cross-scope-var.html +++ b/test/unit/styling-cross-scope-var.html @@ -76,6 +76,9 @@ :host { display: block; padding: 8px; + } + + :root { --gc4-scope: 5px solid green; } @@ -106,19 +109,49 @@ - + + + + + + + + @@ -157,6 +190,7 @@ --fallback: 7px solid orange; --default1: var(--undefined, 6px solid yellow); --default2: var(--undefined, --fallback); + --default3: var(--undefined, rgb(128, 200, 250)); --a: 10px; --b: 5px; --primary-color: rgb(128, 128, 128); @@ -191,10 +225,19 @@ border: var(--default2); } - #rename { + #default3 { + padding: 8px; + background-color: var(--default3); + } + + #overrides1, #overrides2, #overrides3 { --rename: 8px solid navy; } + #overrides2, #overrides3 { + --grand-child-scope-var: 9px solid orange; + } + #calc { border: solid red; border-width: calc(var(--a) + var(--b)); @@ -218,9 +261,12 @@
x-scope
- + + +
default
var default
+
tricky property rgb(...) default
default
var default
Calc
@@ -309,6 +355,11 @@ assertComputed(styled.$.applyDefault2, '7px'); }); + test('variable literal defaults can contain one (...)', function() { + var b = getComputedStyle(styled.$.default3).backgroundColor; + assert.match(b, /rgb\(128/, 'literal fallback containin (...) not set'); + }); + test('variable values can be used with calc', function() { assertComputed(styled.$.calc, '15px'); }); @@ -344,6 +395,25 @@ assert.ok(c, 'dom-if did not stamp'); assertComputed(c, '1px'); }); + + test('variable precedence and overrides', function() { + // renamed property applied + var o1 = styled.$.overrides1; + assertStylePropertyValue(o1._styleProperties, '--rename', '8px'); + assertStylePropertyValue(o1._styleProperties, '--grand-child-scope-var', '8px'); + assertComputed(o1.$.gc1.$.me, '8px'); + // :host property overridden by outer scope + var o2 = styled.$.overrides2; + assertStylePropertyValue(o2._styleProperties, '--rename', '8px'); + assertStylePropertyValue(o2._styleProperties, '--grand-child-scope-var', '9px'); + assertComputed(o2.$.gc1.$.me, '9px'); + // own scope property overrides outer scope + var o3 = styled.$.overrides3; + assertStylePropertyValue(o3._styleProperties, '--rename', '8px'); + assertStylePropertyValue(o3._styleProperties, '--grand-child-scope-var', '8px'); + assertComputed(o3.$.gc1.$.me, '8px'); + + }); });