Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions src/Console/CriticalCssMake.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,17 @@ public function handle()

$cssGenerator = $this->laravel->make('criticalcss.cssgenerator');

foreach ($this->getUris() as $key => $uri) {
$this->info(sprintf('Processing URI [%s]', $uri));

$cssGenerator->generate($uri, $this->getUriAlias($key));
foreach ($this->getUris() as $key => $obj) {
if(is_array($obj)) {
$uri = array_values($obj)[0];
$key = array_keys($obj)[0];
$routeCss = isset(array_values($obj)[1]) ? public_path(array_values($obj)[1]) : '';
$this->info(sprintf('Processing URI [%s]', $uri));
$cssGenerator->generate($uri, $this->getUriAlias($key), $routeCss);
} else {
$this->info(sprintf('Processing URI [%s]', $obj));
$cssGenerator->generate($obj, $this->getUriAlias($key));
}
}

$this->clearViews();
Expand Down
10 changes: 7 additions & 3 deletions src/CssGenerators/CriticalGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public function setOptions($width = 900, $height = 1300, array $ignore = [], $ti
/**
* {@inheritdoc}
*/
public function generate($uri, $alias = null)
public function generate($uri, $alias = null, $routeCss = '')
{
$html = $this->htmlFetcher->fetch($uri);

Expand All @@ -103,8 +103,12 @@ public function generate($uri, $alias = null)
$builder->add('--timeout='.$this->timeout);
}

foreach ($this->css as $css) {
$builder->add('--css='.$css);
if ($routeCss === '') {
foreach ($this->css as $css) {
$builder->add('--css=' . $css);
}
} else {
$builder->add('--css=' . $routeCss);
}

foreach ($this->ignore as $ignore) {
Expand Down
14 changes: 14 additions & 0 deletions src/config/criticalcss.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,25 @@
| Blade. The _value_ is the URI to request HTML from (the route with the
| parameters filled out.) Make sure the request won't 404.
|
| To use route specific css define the field as an array of route and css
| like ['/route', 'css/file.css']. This way it insures that the css is
| used accurately from the exact css file needed instead of entire css array.
|
| NOTE: if route specific css are not defined as an array,
| CSS Files(s) array will be used.
|
*/

'routes' => [
// 'static/route', // In Blade: `@criticalCss('static/route')`
// 'users/profile' => 'users/1', // In Blade: `@criticalCss('users/profile')`

// route specific css
// ['/route', 'css/file.css'], // In Blade: `@criticalCss('/route')`
// [
// 'users/profile' => 'users/1',
// 'css' => 'css/file.css'
// ], // In Blade: `@criticalCss('users/profile')`
],

/*
Expand Down
27 changes: 27 additions & 0 deletions tests/CssGenerators/CriticalGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,4 +119,31 @@ public function testGenerateWithUriAlias()

$this->assertTrue($g->generate($uri, $alias));
}

public function testGenerateWithRouteCss()
{
$uri = 'users/10';
$alias = 'users/profile';
$routeCss = $this->css[0];

$fetcher = m::mock(HtmlFetcherInterface::class);
$fetcher->shouldReceive('fetch')->once()
->with($uri)
->andReturn(file_get_contents($this->html));

$storage = m::mock(StorageInterface::class);
$storage->shouldReceive('writeCss')->once()
->with($alias, 'html{font-size:16px}body{background-image:url(/some-image.jpg)}.class{color:lightred}.other-class{color:#90ee90}')
->andReturn(true);

$g = new CriticalGenerator($this->css, $fetcher, $storage);

$g->setCriticalBin(
realpath(__DIR__.'/../../node_modules/.bin/critical')
);

$g->setOptions();

$this->assertTrue($g->generate($uri, $alias, $routeCss));
}
}