Permalink
Browse files

separate yui compressor from yuglify compressor

  • Loading branch information...
1 parent 416cca8 commit 02c03f37a79ed547483c8eb96e90e75df4112810 @cyberdelia cyberdelia committed Dec 22, 2012
Showing with 98 additions and 40 deletions.
  1. +45 −3 docs/compressors.rst
  2. +22 −22 docs/configuration.rst
  3. +5 −5 docs/installation.rst
  4. +14 −0 pipeline/compressors/yuglify.py
  5. +9 −7 pipeline/conf/settings.py
  6. +3 −3 tests/tests/compressor.py
View
@@ -5,10 +5,48 @@ Compressors
===========
-YUI compressor
+Yuglify compressor
+==================
+
+The Yuglify compressor uses `yuglify <http://github.com/yui/yuglify>`_
+for compressing javascript and stylesheets.
+
+To use it for your stylesheets add this to your ``PIPELINE_CSS_COMPRESSOR`` ::
+
+ PIPELINE_CSS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor'
+
+To use it for your javascripts add this to your ``PIPELINE_JS_COMPRESSOR`` ::
+
+ PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.yuglify.YuglifyCompressor'
+
+
+``PIPELINE_YUGLIFY_BINARY``
+---------------------------
+
+ Command line to execute for the Yuglify program.
+ You will most likely change this to the location of yuglify on your system.
+
+ Defaults to ``'/usr/bin/env yuglify'``.
+
+``PIPELINE_YUGLIFY_CSS_ARGUMENTS``
+----------------------------------
+
+ Additional arguments to use when compressing CSS.
+
+ Defaults to ``''``.
+
+``PIPELINE_YUGLIFY_JS_ARGUMENTS``
+---------------------------------
+
+ Additional arguments to use when compressing JavaScript.
+
+ Defaults to ``''``.
+
+
+YUI Compressor compressor
=========================
-The YUI compressor uses `yuglify <http://github.com/yui/yuglify>`_
+The YUI compressor uses `yui-compressor <http://developer.yahoo.com/yui/compressor/>`_
for compressing javascript and stylesheets.
To use it for your stylesheets add this to your ``PIPELINE_CSS_COMPRESSOR`` ::
@@ -26,7 +64,11 @@ To use it for your javascripts add this to your ``PIPELINE_JS_COMPRESSOR`` ::
Command line to execute for the YUI program.
You will most likely change this to the location of yui-compressor on your system.
- Defaults to ``'/usr/bin/env yuglify'``.
+ Defaults to ``'/usr/bin/env yuicompressor'``.
+
+.. warning::
+ Don't point to ``yuicompressor.jar`` directly, we expect to find a executable script.
+
``PIPELINE_YUI_CSS_ARGUMENTS``
------------------------------
View
@@ -11,7 +11,7 @@ Configuration and list of available settings for Pipeline
Specifying files
================
-You specify groups of files to be compressed in your settings. You can use glob
+You specify groups of files to be compressed in your settings. You can use glob
syntax to select multiples files.
The basic syntax for specifying CSS/JavaScript groups files is ::
@@ -49,46 +49,46 @@ Group options
....................
**Required**
-
+
Is a tuple with the source files to be compressed.
The files are concatenated in the order specified in the tuple.
-
+
``output_filename``
...................
-
+
**Required**
-
+
Is the filename of the (to be) compressed file.
``variant``
...........
**Optional**
-
+
Is the variant you want to apply to your CSS. This allow you to embed images
and fonts in CSS with data-URI.
Allowed values are : ``None`` and ``datauri``.
-
+
Defaults to ``None``.
``template_name``
.................
**Optional**
-
+
Name of the template used to render ``<script>`` for js package or ``<link>`` for css package.
-
+
Defaults to ``None``.
``extra_context``
.................
**Optional**
-
+
Is a dictionary of values to add to the template context,
when generating the HTML for the HTML-tags with the templatetags.
-
+
For CSS, if you do not specify ``extra_context``/``media``, the default media in
the ``<link>`` output will be ``media="all"``.
@@ -119,21 +119,21 @@ Other settings
Compressor class to be applied to CSS files.
If empty or ``None``, CSS files won't be compressed.
-
- Defaults to ``'pipeline.compressors.yui.YUICompressor'``.
+
+ Defaults to ``'pipeline.compressors.yuglify.YuglifyCompressor'``.
``PIPELINE_JS_COMPRESSOR``
...........................
Compressor class to be applied to JavaScript files.
If empty or ``None``, JavaScript files won't be compressed.
-
- Defaults to ``'pipeline.compressors.yui.YUICompressor'``
+
+ Defaults to ``'pipeline.compressors.yuglify.YuglifyCompressor'``
.. note::
- Please note that in order to use YUI Compressor, you need to install YUI Compressor (see :doc:`installation` for more details).
+ Please note that in order to use Yuglify compressor, you need to install Yuglify (see :doc:`installation` for more details).
``PIPELINE_TEMPLATE_NAMESPACE``
...............................
@@ -159,15 +159,15 @@ Other settings
Pipeline doesn't bundle a javascript template library, but the default
setting is to use the
`underscore <http://documentcloud.github.com/underscore/>`_ template function.
-
+
Defaults to ``"_.template"``
Embedding fonts and images
==========================
-You can embed fonts and images directly in your compiled css, using Data-URI in
-modern browsers.
+You can embed fonts and images directly in your compiled css, using Data-URI in
+modern browsers.
To do so, setup variant group options to the method you wish to use : ::
@@ -198,14 +198,14 @@ You can override these rules using the following settings:
Setting that controls the maximum image size (in bytes) to embed in CSS using Data-URIs.
Internet Explorer 8 has issues with assets under 32 kilobytes.
-
+
Defaults to ``32700``
-
+
``PIPELINE_EMBED_PATH``
.......................
Setting the directory that an asset needs to be in so that it is embedded
-
+
Defaults to ``r'[/]?embed/'``
View
@@ -5,9 +5,9 @@ Installation
============
1. Either check out Pipeline from GitHub_ or to pull a release off PyPI_ ::
-
+
pip install django-pipeline
-
+
2. Add 'pipeline' to your ``INSTALLED_APPS`` ::
@@ -21,16 +21,16 @@ Installation
.. note::
- You need to use ``Django>=1.4`` or ``django-staticfiles>=1.2.1`` to be able to use this version of pipeline.
+ You need to use ``Django>=1.4`` or ``django-staticfiles>=1.2.1`` to be able to use this version of pipeline.
.. _GitHub: http://github.com/cyberdelia/django-pipeline
.. _PyPI: http://pypi.python.org/pypi/django-pipeline
Recommendations
===============
-Pipeline's default CSS and JS compressor is the YUI compressor, which uses yuglify.
-yuglify wraps UglifyJS and cssmin, applying the default YUI configurations to them.
+Pipeline's default CSS and JS compressor is Yuglify.
+Yuglify wraps UglifyJS and cssmin, applying the default YUI configurations to them.
It can be downloaded from: https://github.com/yui/yuglify/.
If you do not install yuglify, make sure to disable the compressor in your settings.
@@ -0,0 +1,14 @@
+from pipeline.conf import settings
+from pipeline.compressors import SubProcessCompressor
+
+
+class YuglifyCompressor(SubProcessCompressor):
+ def compress_common(self, content, compress_type, arguments):
+ command = '%s --type=%s %s' % (settings.PIPELINE_YUGLIFY_BINARY, compress_type, arguments)
+ return self.execute_command(command, content)
+
+ def compress_js(self, js):
+ return self.compress_common(js, 'js', settings.PIPELINE_YUGLIFY_JS_ARGUMENTS)
+
+ def compress_css(self, css):
+ return self.compress_common(css, 'css', settings.PIPELINE_YUGLIFY_CSS_ARGUMENTS)
View
@@ -8,11 +8,9 @@
'pipeline.storage.PipelineFinderStorage')
PIPELINE_CSS_COMPRESSOR = getattr(settings, 'PIPELINE_CSS_COMPRESSOR',
- 'pipeline.compressors.yui.YUICompressor'
-)
+ 'pipeline.compressors.yuglify.YuglifyCompressor')
PIPELINE_JS_COMPRESSOR = getattr(settings, 'PIPELINE_JS_COMPRESSOR',
- 'pipeline.compressors.yui.YUICompressor'
-)
+ 'pipeline.compressors.yuglify.YuglifyCompressor')
PIPELINE_COMPILERS = getattr(settings, 'PIPELINE_COMPILERS', [])
PIPELINE_CSS = getattr(settings, 'PIPELINE_CSS', {})
@@ -27,9 +25,13 @@
PIPELINE_CSSTIDY_BINARY = getattr(settings, 'PIPELINE_CSSTIDY_BINARY', '/usr/bin/env csstidy')
PIPELINE_CSSTIDY_ARGUMENTS = getattr(settings, 'PIPELINE_CSSTIDY_ARGUMENTS', '--template=highest')
-PIPELINE_YUI_BINARY = getattr(settings, 'PIPELINE_YUI_BINARY', '/usr/bin/env yuglify')
-PIPELINE_YUI_CSS_ARGUMENTS = getattr(settings, 'PIPELINE_YUI_CSS_ARGUMENTS', '--terminal')
-PIPELINE_YUI_JS_ARGUMENTS = getattr(settings, 'PIPELINE_YUI_JS_ARGUMENTS', '--terminal')
+PIPELINE_YUGLIFY_BINARY = getattr(settings, 'PIPELINE_YUI_BINARY', '/usr/bin/env yuglify')
+PIPELINE_YUGLIFY_CSS_ARGUMENTS = getattr(settings, 'PIPELINE_YUI_CSS_ARGUMENTS', '--terminal')
+PIPELINE_YUGLIFY_JS_ARGUMENTS = getattr(settings, 'PIPELINE_YUI_JS_ARGUMENTS', '--terminal')
+
+PIPELINE_YUI_BINARY = getattr(settings, 'PIPELINE_YUI_BINARY', '/usr/bin/env yuicompressor')
+PIPELINE_YUI_CSS_ARGUMENTS = getattr(settings, 'PIPELINE_YUI_CSS_ARGUMENTS', '')
+PIPELINE_YUI_JS_ARGUMENTS = getattr(settings, 'PIPELINE_YUI_JS_ARGUMENTS', '')
PIPELINE_CLOSURE_BINARY = getattr(settings, 'PIPELINE_CLOSURE_BINARY', '/usr/bin/env closure')
PIPELINE_CLOSURE_ARGUMENTS = getattr(settings, 'PIPELINE_CLOSURE_ARGUMENTS', '')
@@ -6,7 +6,7 @@
from django.test import TestCase
from pipeline.compressors import Compressor, TEMPLATE_FUNC
-from pipeline.compressors.yui import YUICompressor
+from pipeline.compressors.yuglify import YuglifyCompressor
from paths import _
@@ -17,10 +17,10 @@ def setUp(self):
self.compressor = Compressor()
def test_js_compressor_class(self):
- self.assertEquals(self.compressor.js_compressor, YUICompressor)
+ self.assertEquals(self.compressor.js_compressor, YuglifyCompressor)
def test_css_compressor_class(self):
- self.assertEquals(self.compressor.css_compressor, YUICompressor)
+ self.assertEquals(self.compressor.css_compressor, YuglifyCompressor)
def test_concatenate_and_rewrite(self):
css = self.compressor.concatenate_and_rewrite([

0 comments on commit 02c03f3

Please sign in to comment.