From 75903ccde56207722c748c520c21a94e1bf44031 Mon Sep 17 00:00:00 2001 From: Steve Orvell Date: Tue, 15 Apr 2014 07:51:30 -0700 Subject: [PATCH] allow scoping to use an array of selectors. --- src/ShadowCSS.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/ShadowCSS.js b/src/ShadowCSS.js index 72675ea..92993c8 100644 --- a/src/ShadowCSS.js +++ b/src/ShadowCSS.js @@ -417,13 +417,16 @@ var ShadowCSS = { if (this.selectorNeedsScoping(p, scopeSelector)) { p = (strict && !p.match(polyfillHostNoCombinator)) ? this.applyStrictSelectorScope(p, scopeSelector) : - this.applySimpleSelectorScope(p, scopeSelector); + this.applySelectorScope(p, scopeSelector); } r.push(p); }, this); return r.join(', '); }, selectorNeedsScoping: function(selector, scopeSelector) { + if (Array.isArray(scopeSelector)) { + return true; + } var re = this.makeScopeMatcher(scopeSelector); return !selector.match(re); }, @@ -431,6 +434,19 @@ var ShadowCSS = { scopeSelector = scopeSelector.replace(/\[/g, '\\[').replace(/\[/g, '\\]'); return new RegExp('^(' + scopeSelector + ')' + selectorReSuffix, 'm'); }, + applySelectorScope: function(selector, selectorScope) { + return Array.isArray(selectorScope) ? + this.applySelectorScopeList(selector, selectorScope) : + this.applySimpleSelectorScope(selector, selectorScope); + }, + // apply an array of selectors + applySelectorScopeList: function(selector, scopeSelectorList) { + var r = []; + for (var i=0, s; (s=scopeSelectorList[i]); i++) { + r.push(this.applySimpleSelectorScope(selector, s)); + } + return r.join(', '); + }, // scope via name and [is=name] applySimpleSelectorScope: function(selector, scopeSelector) { if (selector.match(polyfillHostRe)) {