From 093538874ff909807de83882cc0ba83302e0ccf6 Mon Sep 17 00:00:00 2001 From: Bart Veneman Date: Wed, 8 May 2024 08:29:00 +0200 Subject: [PATCH] fix: lowercase pseudo element selectors --- index.js | 12 ++++++++++-- test/selectors.test.js | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 025863f..9cf9bba 100644 --- a/index.js +++ b/index.js @@ -142,16 +142,24 @@ function print_simple_selector(node, css) { } break } + case 'PseudoElementSelector': { + buffer += COLON + COLON + buffer += is_uppercase(child.name) ? child.name.toLowerCase() : child.name + break + } case 'PseudoClassSelector': { buffer += COLON // Special case for `:before` and `:after` which were used in CSS2 and are usually minified // as `:before` and `:after`, but we want to keep them as `::before` and `::after` - if (child.name === 'before' || child.name === 'after') { + let name = child.name + let pseudo = is_uppercase(name) ? name.toLowerCase() : name + + if (pseudo === 'before' || pseudo === 'after') { buffer += COLON } - buffer += child.name + buffer += pseudo if (child.children) { buffer += '(' + print_simple_selector(child, css) + ')' diff --git a/test/selectors.test.js b/test/selectors.test.js index bf54902..37c30f0 100644 --- a/test/selectors.test.js +++ b/test/selectors.test.js @@ -91,6 +91,26 @@ c::first-letter {}` assert.equal(actual, expected) }) +test('formats pseudo elements with odd casing', () => { + let css = ` + a::Before, + a::After, + b:Before, + b:After, + c:After, + d::First-letter {} + ` + let expected = `a::before, +a::after, +b::before, +b::after, +c::after, +d::first-letter {}` + + let actual = format(css) + assert.equal(actual, expected) +}) + test("formats selectors with Nth", () => { let fixtures = [ [`li:nth-child(3n-2) {}`, `li:nth-child(3n -2) {}`],