An extension to WebHelpers that enables a real time JS/CSS combination and minification in production mode.
Using easy_install:
$ easy_install minimatic
Using pip:
$ pip install minimatic
Git repository is located at GitHub.com.
It extends the WebHelpers functions javascript_link and stylesheet_link to take a modified set of parameters:
- sources (list): JS/CSS items to process. Each item is one of the following:
- (dict) with keys:
- file: a path to the source file relative to the static file root
- minify: minification method. Possible values (default False):
- False (bool): use the source unmodified
- strip (str): only strip extra whitespace and comments (applicable to CSS only)
- minify (str): strip whitespace and apply other possible JS/CSS minifications. Note that this involves source parsing and will err on syntax errors (CSS hacks will be removed!). In effect the resulting file may be logically different
- dest: if the source list is not combined then each item must provide a destination filename relative to the static file root
(str): it will be treated as (see above):
{'file': (str), 'minify': False}
- combined (str): the combined filename relative to the static file root. Implies that the files need to be combined. If combined is None then every Item must have a dest key provided.
- beaker_kwargs (dict): override default arguments that will be passed to beaker_cache. beaker_kwargs.update() is issued on default arguments.
- timestamp append time.time timestamp to links to force browsers reload the JS/CSS assets, eg. test.js?t=123012343
The files will be combined in production mode; in development mode (debug=True) they will be served unmodified separately.
Mix and match the sources into one big JS file:
>>> javascript_link(
... # These files are already minified; combine them only
... '/js/jquery.js',
... '/js/jquery-ui-custom.js',
... # These are custom files which need to be minified first
... dict(file='/js/base.js', minify='minify'),
... dict(file='/js/page-script.js', minify='minify'),
... combined='/combined/js/scripts.js',
... timestamp=True)
Serve CSS files separately (uncombined):
>>> stylesheet_link(
... # This stylesheet is valid CSS and safe to parse and minify
... dict(file='/css/base.css', minify='minify',
... dest='/combined/css/base.css'),
... # This stylesheet is full of CSS hacks and only the extra whitespace
... # and comments should be stripped
... dict(file='/css/styles.ie6.css', minify='strip',
... dest='/combined/css/styles.ie6.css'),
... timestamp=True)