From 92eaece0a1f62026519ab7d89dbbd7d96aa5ee25 Mon Sep 17 00:00:00 2001 From: Vladimir Bolshakov Date: Fri, 22 Aug 2014 19:11:21 +0400 Subject: [PATCH] Support for clean-css (https://github.com/GoalSmashers/clean-css/) --- compressor/conf.py | 2 ++ compressor/filters/cleancss.py | 10 ++++++++++ compressor/tests/test_filters.py | 5 +++++ docs/settings.txt | 15 +++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 compressor/filters/cleancss.py diff --git a/compressor/conf.py b/compressor/conf.py index e9763d9..87f9d69 100644 --- a/compressor/conf.py +++ b/compressor/conf.py @@ -45,6 +45,8 @@ class CompressorConf(AppConf): YUGLIFY_BINARY = 'yuglify' YUGLIFY_CSS_ARGUMENTS = '--terminal' YUGLIFY_JS_ARGUMENTS = '--terminal' + CLEAN_CSS_BINARY = 'cleancss' + CLEAN_CSS_ARGUMENTS = '' DATA_URI_MAX_SIZE = 1024 # the cache backend to use diff --git a/compressor/filters/cleancss.py b/compressor/filters/cleancss.py new file mode 100644 index 0000000..daa381a --- /dev/null +++ b/compressor/filters/cleancss.py @@ -0,0 +1,10 @@ +from compressor.conf import settings +from compressor.filters import CompilerFilter + + +class CleanCSSFilter(CompilerFilter): + command = "{binary} {args} -o {outfile} {infile}" + options = ( + ("binary", settings.COMPRESS_CLEAN_CSS_BINARY), + ("args", settings.COMPRESS_CLEAN_CSS_ARGUMENTS), + ) diff --git a/compressor/tests/test_filters.py b/compressor/tests/test_filters.py index 084b50c..784d89a 100644 --- a/compressor/tests/test_filters.py +++ b/compressor/tests/test_filters.py @@ -22,6 +22,7 @@ from compressor.filters.closure import ClosureCompilerFilter from compressor.filters.csstidy import CSSTidyFilter from compressor.filters.yuglify import YUglifyCSSFilter, YUglifyJSFilter from compressor.filters.yui import YUICSSFilter, YUIJSFilter +from compressor.filters.cleancss import CleanCSSFilter from compressor.tests.test_base import test_dir @@ -372,3 +373,7 @@ class SpecializedFiltersTest(TestCase): filter = YUIJSFilter('', verbose=1) self.assertEqual(filter.command, '{binary} {args} --type=js --verbose') self.assertEqual(filter.options, (('binary', six.text_type('java -jar yuicompressor.jar')), ('args', six.text_type('')), ('verbose', 1))) + + def test_clean_css_filter(self): + filter = CleanCSSFilter('') + self.assertEqual(filter.options, (('binary', six.text_type('cleancss')), ('args', six.text_type('')))) diff --git a/docs/settings.txt b/docs/settings.txt index 4d2f470..84950a4 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -137,9 +137,24 @@ Backend settings A filter that uses Zachary Voase's Python port of the YUI CSS compression algorithm cssmin_. + - ``compressor.filters.cleancss.CleanCSSFilter`` + + A filter that passes the CSS content to the `clean-css`_ tool. + + .. attribute:: CLEAN_CSS_BINARY + + The clean-css binary filesystem path. + + .. attribute:: CLEAN_CSS_ARGUMENTS + + The arguments passed to clean-css. + + .. _CSSTidy: http://csstidy.sourceforge.net/ .. _`data: URIs`: http://en.wikipedia.org/wiki/Data_URI_scheme .. _cssmin: http://pypi.python.org/pypi/cssmin/ + .. _`clean-css`: https://github.com/GoalSmashers/clean-css/ + - ``compressor.filters.template.TemplateFilter``