Skip to content

Commit 134080b

Browse files
committed
srcsets, imgix filters and tinypng.com imagine post processor
1 parent bd05ec3 commit 134080b

19 files changed

+844
-3
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* [Site Tree](src/Resources/doc/site-tree.md)
88
* [Form types](src/Resources/doc/form-types.md)
99
* [Misc](src/Resources/doc/misc.md)
10+
* [Imagine extensions](src/Resources/doc/imagine.md)
1011
* [Search](src/Resources/doc/search.md)
1112

1213

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"require": {
44
"ext-intl": "*",
55
"kunstmaan/bundles-cms": "~3.5",
6-
"nassau/registry-compiler": "^1.1"
6+
"nassau/registry-compiler": "^1.1",
7+
"guzzlehttp/guzzle": ">=6.0"
78
},
89
"require-dev": {
910
"friendsofsymfony/user-bundle": "2.0.*@dev",

composer.lock

Lines changed: 223 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace ArsThanea\KunstmaanExtraBundle\DependencyInjection\CompilerPass;
4+
5+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
6+
use Symfony\Component\DependencyInjection\ContainerBuilder;
7+
use Symfony\Component\DependencyInjection\Reference;
8+
9+
class ImagineChainedDataLoaderCompilerPass implements CompilerPassInterface
10+
{
11+
public function process(ContainerBuilder $container)
12+
{
13+
$imgixLoader = 'ars_thanea.kunstmaan_extra.imagine.imgix_data_loader';
14+
$remoteLoader = 'ars_thanea.remote_media.imagine.chained_data_loader';
15+
16+
if ($container->has($remoteLoader) && $container->has($imgixLoader)) {
17+
$definition = $container->getDefinition($remoteLoader);
18+
$definition->setMethodCalls(array_merge([
19+
['addLoader', new Reference($imgixLoader)]
20+
], $definition->getMethodCalls()));
21+
}
22+
}
23+
}

src/DependencyInjection/Configuration.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public function getConfigTreeBuilder()
1616
$treeBuilder = new TreeBuilder();
1717
$rootNode = $treeBuilder->root('kunstmaan_extra');
1818

19+
$rootNode->children()->scalarNode('tinypng_api_key')->defaultNull();
1920
$rootNode->children()->scalarNode('generate_controller')->defaultNull();
2021

2122
$assets = $rootNode->children()->arrayNode('assets');
@@ -47,6 +48,19 @@ public function getConfigTreeBuilder()
4748
$bem = $bem->prototype('array');
4849
$bem->normalizeKeys(false)->prototype('scalar');
4950

51+
/** @var ArrayNodeDefinition $imgix */
52+
$imgix = $rootNode->children()->arrayNode('imgix')->addDefaultsIfNotSet();
53+
$imgix->children()->scalarNode('bucket')->defaultNull();
54+
55+
/** @var ArrayNodeDefinition $presets */
56+
$presets = $imgix->children()->arrayNode('presets')->prototype('array');
57+
$presets->prototype('scalar');
58+
59+
$srcset = $rootNode->children()->arrayNode('srcset')->addDefaultsIfNotSet();
60+
$srcset->children()->scalarNode('default_filter')->defaultValue('srcset');
61+
$srcset->children()->integerNode('image_width_threshold')->defaultValue(100);
62+
$srcset->children()->arrayNode('breakpoints')->prototype('scalar');
63+
5064
return $treeBuilder;
5165

5266
}

src/DependencyInjection/KunstmaanExtraExtension.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,17 @@ public function load(array $configs, ContainerBuilder $container)
6464
$loader->load('assets.yml');
6565
}
6666

67+
if ($configs['tinypng_api_key']) {
68+
$container->setParameter('kunstmaan_extra.tinypng_api_key', $configs['tinypng_api_key']);
69+
$loader->load('imagine_tinypng_services.yml');
70+
}
71+
72+
if ($configs['imgix']['bucket']) {
73+
$container->setParameter('kunstmaan_extra.imgix_bucket', $configs['imgix']['bucket']);
74+
$container->setParameter('kunstmaan_extra.imgix_presets', $configs['imgix']['presets']);
75+
$loader->load('imagine_imgix_services.yml');
76+
}
77+
6778
if ($configs['generate_controller']) {
6879
$container->setDefinition('kunstmaan_extra.typehinting_controller_cache_warmer', (new Definition)
6980
->setClass(TypehintingControllerCacheWarmer::class)
@@ -87,5 +98,38 @@ public function prepend(ContainerBuilder $container)
8798
]
8899
]
89100
]);
101+
102+
$this->prependImagineBreakpoints($container);
103+
}
104+
105+
106+
private function prependImagineBreakpoints(ContainerBuilder $container)
107+
{
108+
$config = $this->processConfiguration(new Configuration(), $container->getExtensionConfig($this->getAlias()));
109+
110+
$breakpoints = $config['srcset']['breakpoints'];
111+
$defaultFilter = $config['srcset']['default_filter'];
112+
113+
$container->setParameter('kunstmaan_extra.srcset_breakpoints', $breakpoints);
114+
$container->setParameter('kunstmaan_extra.srcset_default_filter', $defaultFilter);
115+
$container->setParameter('kunstmaan_extra.srcset_image_width_threshold', $config['srcset']['image_width_threshold']);
116+
117+
if (false === isset($breakpoints)) {
118+
return ;
119+
}
120+
121+
$value = [
122+
'filters' => [
123+
'strip' => null,
124+
'auto_rotate' => null,
125+
],
126+
];
127+
128+
if ($config['tinypng_api_key']) {
129+
$value += ['post_processors' => ['tinypng_com' => null]];
130+
}
131+
132+
$container->prependExtensionConfig('liip_imagine', ['filter_sets' => [$defaultFilter => $value]]);
133+
90134
}
91135
}

src/Imagine/ImageResizer.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace ArsThanea\KunstmaanExtraBundle\Imagine;
4+
5+
interface ImageResizer
6+
{
7+
/**
8+
* @param string $path
9+
* @param string $filter
10+
* @param integer $width
11+
* @return string
12+
*/
13+
public function getBrowserPath($path, $filter, $width);
14+
}

0 commit comments

Comments
 (0)