This is an automated email from the ASF dual-hosted git repository. benw pushed a commit to branch TAP5-2708 in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
commit f3e110df8cb4908b9b40bb1322cc378848c4e70c Author: Ben Weidig <b...@netzgut.net> AuthorDate: Thu May 18 13:11:51 2023 +0200 TAP5-2753: CssCompressor no longer breaks CSS variables in calc --- .../tapestry5/internal/webresources/CssCompressor.java | 2 +- .../t5/webresources/tests/CssCompressorSpec.groovy | 17 +++++++++++++++++ .../test/resources/t5/webresources/css/tap5-2753.css | 4 ++++ .../resources/t5/webresources/css/tap5-2753.css.min | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/CssCompressor.java b/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/CssCompressor.java index 31de21c38..77bf1ea2f 100644 --- a/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/CssCompressor.java +++ b/tapestry-webresources/src/main/java/org/apache/tapestry5/internal/webresources/CssCompressor.java @@ -538,7 +538,7 @@ public class CssCompressor { String s = m.group(); s = s.replaceAll("(?<=[-|%|px|em|rem|vw|\\d]+)\\+", " + "); - s = s.replaceAll("(?<=[-|%|px|em|rem|vw|\\d]+)\\-", " - "); + s = s.replaceAll("(?<=[-|%|px|em|rem|vw|\\)|\\d]+)(?<!var\\([a-z-0-9]+)\\-", " - "); s = s.replaceAll("(?<=[-|%|px|em|rem|vw|\\d]+)\\*", " * "); s = s.replaceAll("(?<=[-|%|px|em|rem|vw|\\d]+)\\/", " / "); diff --git a/tapestry-webresources/src/test/groovy/t5/webresources/tests/CssCompressorSpec.groovy b/tapestry-webresources/src/test/groovy/t5/webresources/tests/CssCompressorSpec.groovy index 3612a621a..7a6428c0c 100644 --- a/tapestry-webresources/src/test/groovy/t5/webresources/tests/CssCompressorSpec.groovy +++ b/tapestry-webresources/src/test/groovy/t5/webresources/tests/CssCompressorSpec.groovy @@ -23,6 +23,23 @@ class CssCompressorSpec extends Specification { writer.toString() == '''@keyframes anim{0%{opacity:0}100%{opacity:1}}''' } + @Issue('TAP5-2753') + def "preserve space for calc operators"() { + given: + def is = CssCompressorSpec.class.getResourceAsStream("/t5/webresources/css/tap5-2753.css") + def reader = new InputStreamReader(is) + def compressor = new CssCompressor(reader) + def expected = CssCompressorSpec.class.getResourceAsStream("/t5/webresources/css/tap5-2753.css.min").text.strip() + + def writer = new StringWriter() + + when: + def result = compressor.compress(writer, -1) + + then: + writer.toString() == expected + } + def "yui compressor test '#rawFile'"() { given: def is = CssCompressorSpec.class.getResourceAsStream("/t5/webresources/css/yui/$rawFile") diff --git a/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css b/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css new file mode 100644 index 000000000..7f28665b6 --- /dev/null +++ b/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css @@ -0,0 +1,4 @@ +.some-class +{ +padding-top: calc(10px + var(--default-page-header-height)); +} \ No newline at end of file diff --git a/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css.min b/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css.min new file mode 100644 index 000000000..8245d9a37 --- /dev/null +++ b/tapestry-webresources/src/test/resources/t5/webresources/css/tap5-2753.css.min @@ -0,0 +1 @@ +.some-class{padding-top:calc(10px + var(--default-page-header-height))} \ No newline at end of file