|
5 | 5 | import posixpath |
6 | 6 | import re |
7 | 7 | import subprocess |
| 8 | +import warnings |
8 | 9 |
|
9 | 10 | from itertools import takewhile |
10 | 11 |
|
@@ -57,29 +58,46 @@ def css_compressor(self): |
57 | 58 |
|
58 | 59 | def compress_js(self, paths, templates=None, **kwargs): |
59 | 60 | """Concatenate and compress JS files""" |
| 61 | + compressor = self.js_compressor |
| 62 | + |
| 63 | + if settings.OUTPUT_SOURCEMAPS: |
| 64 | + if hasattr(compressor, 'compress_js_with_source_map'): |
| 65 | + if templates: |
| 66 | + warnings.warn("Source maps are not supported with javascript templates") |
| 67 | + else: |
| 68 | + return compressor(verbose=self.verbose).compress_js_with_source_map(paths) |
| 69 | + |
60 | 70 | js = self.concatenate(paths) |
61 | 71 | if templates: |
62 | 72 | js = js + self.compile_templates(templates) |
63 | 73 |
|
64 | 74 | if not settings.DISABLE_WRAPPER: |
65 | 75 | js = "(function() {\n%s\n}).call(this);" % js |
66 | 76 |
|
67 | | - compressor = self.js_compressor |
68 | 77 | if compressor: |
69 | 78 | js = getattr(compressor(verbose=self.verbose), 'compress_js')(js) |
70 | 79 |
|
71 | | - return js |
| 80 | + return js, None |
72 | 81 |
|
73 | 82 | def compress_css(self, paths, output_filename, variant=None, **kwargs): |
74 | 83 | """Concatenate and compress CSS files""" |
75 | | - css = self.concatenate_and_rewrite(paths, output_filename, variant) |
76 | 84 | compressor = self.css_compressor |
| 85 | + |
| 86 | + if settings.OUTPUT_SOURCEMAPS: |
| 87 | + if hasattr(compressor, 'compress_css_with_source_map'): |
| 88 | + if variant == "datauri": |
| 89 | + warnings.warn("Source maps are not supported with datauri variant") |
| 90 | + else: |
| 91 | + return (compressor(verbose=self.verbose) |
| 92 | + .compress_css_with_source_map(paths, output_filename)) |
| 93 | + |
| 94 | + css = self.concatenate_and_rewrite(paths, output_filename, variant) |
77 | 95 | if compressor: |
78 | 96 | css = getattr(compressor(verbose=self.verbose), 'compress_css')(css) |
79 | 97 | if not variant: |
80 | | - return css |
| 98 | + return css, None |
81 | 99 | elif variant == "datauri": |
82 | | - return self.with_data_uri(css) |
| 100 | + return self.with_data_uri(css), None |
83 | 101 | else: |
84 | 102 | raise CompressorError("\"%s\" is not a valid variant" % variant) |
85 | 103 |
|
@@ -235,16 +253,17 @@ def filter_js(self, js): |
235 | 253 |
|
236 | 254 |
|
237 | 255 | class SubProcessCompressor(CompressorBase): |
238 | | - def execute_command(self, command, content): |
| 256 | + def execute_command(self, command, content=None, **kwargs): |
239 | 257 | argument_list = [] |
240 | 258 | for flattening_arg in command: |
241 | 259 | if isinstance(flattening_arg, string_types): |
242 | 260 | argument_list.append(flattening_arg) |
243 | 261 | else: |
244 | 262 | argument_list.extend(flattening_arg) |
| 263 | + stdin = subprocess.PIPE if content else None |
245 | 264 |
|
246 | 265 | pipe = subprocess.Popen(argument_list, stdout=subprocess.PIPE, |
247 | | - stdin=subprocess.PIPE, stderr=subprocess.PIPE) |
| 266 | + stdin=stdin, stderr=subprocess.PIPE, **kwargs) |
248 | 267 | if content: |
249 | 268 | content = smart_bytes(content) |
250 | 269 | stdout, stderr = pipe.communicate(content) |
|
0 commit comments