From b72684e99c062279846282d7a3dc8faa21100bc6 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sat, 1 Jul 2017 13:57:54 -0400 Subject: [PATCH] handle universal selectors --- src/generators/extractSelectors.ts | 1 + src/generators/shared/processCss.ts | 9 +++++++-- .../samples/cascade-false-universal-selector/_config.js | 3 +++ .../cascade-false-universal-selector/expected.css | 4 ++++ .../cascade-false-universal-selector/expected.html | 1 + .../samples/cascade-false-universal-selector/input.html | 7 +++++++ test/css/samples/universal-selector/expected.css | 4 ++++ test/css/samples/universal-selector/input.html | 7 +++++++ 8 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 test/css/samples/cascade-false-universal-selector/_config.js create mode 100644 test/css/samples/cascade-false-universal-selector/expected.css create mode 100644 test/css/samples/cascade-false-universal-selector/expected.html create mode 100644 test/css/samples/cascade-false-universal-selector/input.html create mode 100644 test/css/samples/universal-selector/expected.css create mode 100644 test/css/samples/universal-selector/input.html diff --git a/src/generators/extractSelectors.ts b/src/generators/extractSelectors.ts index 86222438b3..7dbf7b27ca 100644 --- a/src/generators/extractSelectors.ts +++ b/src/generators/extractSelectors.ts @@ -74,6 +74,7 @@ function selectorAppliesTo(parts: Node[], node: Node, stack: Node[]): boolean { } else if (part.type === 'TypeSelector') { + if (part.name === '*') return true; if (node.name !== part.name) return false; } diff --git a/src/generators/shared/processCss.ts b/src/generators/shared/processCss.ts index 77c1d4a420..15719e7b8f 100644 --- a/src/generators/shared/processCss.ts +++ b/src/generators/shared/processCss.ts @@ -44,7 +44,12 @@ export default function processCss( const child = block[i]; if (child.type === 'PseudoElementSelector' || child.type === 'PseudoClassSelector') continue; - code.appendLeft(child.end, attr); + if (child.type === 'TypeSelector' && child.name === '*') { + code.overwrite(child.start, child.end, attr); + } else { + code.appendLeft(child.end, attr); + } + return; } } @@ -64,7 +69,7 @@ export default function processCss( if (firstToken.type === 'TypeSelector') { const insert = firstToken.end - offset; - const head = css.slice(start, insert); + const head = firstToken.name === '*' ? css.slice(firstToken.end - offset, insert) : css.slice(start, insert); const tail = css.slice(insert, end); transformed = `${head}${attr}${tail}, ${attr} ${selectorString}`; diff --git a/test/css/samples/cascade-false-universal-selector/_config.js b/test/css/samples/cascade-false-universal-selector/_config.js new file mode 100644 index 0000000000..b37866f9b6 --- /dev/null +++ b/test/css/samples/cascade-false-universal-selector/_config.js @@ -0,0 +1,3 @@ +export default { + cascade: false +}; \ No newline at end of file diff --git a/test/css/samples/cascade-false-universal-selector/expected.css b/test/css/samples/cascade-false-universal-selector/expected.css new file mode 100644 index 0000000000..bb9155feb0 --- /dev/null +++ b/test/css/samples/cascade-false-universal-selector/expected.css @@ -0,0 +1,4 @@ + + [svelte-2950902288] { + color: red; + } diff --git a/test/css/samples/cascade-false-universal-selector/expected.html b/test/css/samples/cascade-false-universal-selector/expected.html new file mode 100644 index 0000000000..732e063d51 --- /dev/null +++ b/test/css/samples/cascade-false-universal-selector/expected.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/test/css/samples/cascade-false-universal-selector/input.html b/test/css/samples/cascade-false-universal-selector/input.html new file mode 100644 index 0000000000..36a65e23e6 --- /dev/null +++ b/test/css/samples/cascade-false-universal-selector/input.html @@ -0,0 +1,7 @@ +
+ + \ No newline at end of file diff --git a/test/css/samples/universal-selector/expected.css b/test/css/samples/universal-selector/expected.css new file mode 100644 index 0000000000..53f57d9083 --- /dev/null +++ b/test/css/samples/universal-selector/expected.css @@ -0,0 +1,4 @@ + + [svelte-2950902288], [svelte-2950902288] * { + color: red; + } diff --git a/test/css/samples/universal-selector/input.html b/test/css/samples/universal-selector/input.html new file mode 100644 index 0000000000..36a65e23e6 --- /dev/null +++ b/test/css/samples/universal-selector/input.html @@ -0,0 +1,7 @@ +
+ + \ No newline at end of file