| @@ -0,0 +1,57 @@ | |||||
| # -*- coding: utf-8 -*- | |||||
| """ | |||||
| jpegoptim plugin | |||||
| """ | |||||
| from hyde.plugin import CLTransformer | |||||
| from hyde.fs import File | |||||
| class JPEGOptimPlugin(CLTransformer): | |||||
| """ | |||||
| The plugin class for JPEGOptim | |||||
| """ | |||||
| def __init__(self, site): | |||||
| super(JPEGOptimPlugin, self).__init__(site) | |||||
| @property | |||||
| def plugin_name(self): | |||||
| """ | |||||
| The name of the plugin. | |||||
| """ | |||||
| return "jpegoptim" | |||||
| def binary_resource_complete(self, resource): | |||||
| """ | |||||
| If the site is in development mode, just return. | |||||
| Otherwise, run jpegoptim to compress the jpg file. | |||||
| """ | |||||
| try: | |||||
| mode = self.site.config.mode | |||||
| except AttributeError: | |||||
| mode = "production" | |||||
| if not resource.source_file.kind == 'jpg': | |||||
| return | |||||
| if mode.startswith('dev'): | |||||
| self.logger.debug("Skipping jpegoptim in development mode.") | |||||
| return | |||||
| supported = [ | |||||
| "force", | |||||
| "max=", | |||||
| "strip-all", | |||||
| "strip-com", | |||||
| "strip-exif", | |||||
| "strip-iptc", | |||||
| "strip-icc", | |||||
| ] | |||||
| target = File(self.site.config.deploy_root_path.child( | |||||
| resource.relative_deploy_path)) | |||||
| jpegoptim = self.app | |||||
| args = [str(jpegoptim)] | |||||
| args.extend(self.process_args(supported)) | |||||
| args.extend(["-q", str(target)]) | |||||
| self.call_app(args) | |||||