chore(css selector): temporarily remove light dom shortcut (#2008)

This commit is contained in:
Dmitry Gozman 2020-04-27 20:23:31 -07:00 committed by GitHub
parent 8aab725813
commit f662686fcd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -81,26 +81,28 @@ export function createCSSEngine(shadow: boolean): SelectorEngine {
}, },
query(root: SelectorRoot, selector: string): Element | undefined { query(root: SelectorRoot, selector: string): Element | undefined {
const simple = root.querySelector(selector); // TODO: uncomment for performance.
if (simple) // const simple = root.querySelector(selector);
return simple; // if (simple)
if (!shadow) // return simple;
return; // if (!shadow)
// return;
const parts = split(selector); const parts = split(selector);
if (!parts.length) if (!parts.length)
return; return;
parts.reverse(); parts.reverse();
return queryShadowInternal(root, root, parts); return queryShadowInternal(root, root, parts, shadow);
}, },
queryAll(root: SelectorRoot, selector: string): Element[] { queryAll(root: SelectorRoot, selector: string): Element[] {
if (!shadow) // TODO: uncomment for performance.
return Array.from(root.querySelectorAll(selector)); // if (!shadow)
// return Array.from(root.querySelectorAll(selector));
const result: Element[] = []; const result: Element[] = [];
const parts = split(selector); const parts = split(selector);
if (parts.length) { if (parts.length) {
parts.reverse(); parts.reverse();
queryShadowAllInternal(root, root, parts, result); queryShadowAllInternal(root, root, parts, shadow, result);
} }
return result; return result;
} }
@ -109,15 +111,17 @@ export function createCSSEngine(shadow: boolean): SelectorEngine {
return engine; return engine;
} }
function queryShadowInternal(boundary: SelectorRoot, root: SelectorRoot, parts: string[]): Element | undefined { function queryShadowInternal(boundary: SelectorRoot, root: SelectorRoot, parts: string[], shadow: boolean): Element | undefined {
const matching = root.querySelectorAll(parts[0]); const matching = root.querySelectorAll(parts[0]);
for (let i = 0; i < matching.length; i++) { for (let i = 0; i < matching.length; i++) {
const element = matching[i]; const element = matching[i];
if (parts.length === 1 || matches(element, parts, boundary)) if (parts.length === 1 || matches(element, parts, boundary))
return element; return element;
} }
if (!shadow)
return;
if ((root as Element).shadowRoot) { if ((root as Element).shadowRoot) {
const child = queryShadowInternal(boundary, (root as Element).shadowRoot!, parts); const child = queryShadowInternal(boundary, (root as Element).shadowRoot!, parts, shadow);
if (child) if (child)
return child; return child;
} }
@ -125,27 +129,27 @@ function queryShadowInternal(boundary: SelectorRoot, root: SelectorRoot, parts:
for (let i = 0; i < elements.length; i++) { for (let i = 0; i < elements.length; i++) {
const element = elements[i]; const element = elements[i];
if (element.shadowRoot) { if (element.shadowRoot) {
const child = queryShadowInternal(boundary, element.shadowRoot, parts); const child = queryShadowInternal(boundary, element.shadowRoot, parts, shadow);
if (child) if (child)
return child; return child;
} }
} }
} }
function queryShadowAllInternal(boundary: SelectorRoot, root: SelectorRoot, parts: string[], result: Element[]) { function queryShadowAllInternal(boundary: SelectorRoot, root: SelectorRoot, parts: string[], shadow: boolean, result: Element[]) {
const matching = root.querySelectorAll(parts[0]); const matching = root.querySelectorAll(parts[0]);
for (let i = 0; i < matching.length; i++) { for (let i = 0; i < matching.length; i++) {
const element = matching[i]; const element = matching[i];
if (parts.length === 1 || matches(element, parts, boundary)) if (parts.length === 1 || matches(element, parts, boundary))
result.push(element); result.push(element);
} }
if ((root as Element).shadowRoot) if (shadow && (root as Element).shadowRoot)
queryShadowAllInternal(boundary, (root as Element).shadowRoot!, parts, result); queryShadowAllInternal(boundary, (root as Element).shadowRoot!, parts, shadow, result);
const elements = root.querySelectorAll('*'); const elements = root.querySelectorAll('*');
for (let i = 0; i < elements.length; i++) { for (let i = 0; i < elements.length; i++) {
const element = elements[i]; const element = elements[i];
if (element.shadowRoot) if (shadow && element.shadowRoot)
queryShadowAllInternal(boundary, element.shadowRoot, parts, result); queryShadowAllInternal(boundary, element.shadowRoot, parts, shadow, result);
} }
} }