diff --git a/hyde/ext/plugins/jpegoptim.py b/hyde/ext/plugins/jpegoptim.py new file mode 100644 index 0000000..6e40d19 --- /dev/null +++ b/hyde/ext/plugins/jpegoptim.py @@ -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)