From e17e6cf54eaf1facdc8a15853fdff07e5c8dd52c Mon Sep 17 00:00:00 2001 From: Alex Wass Date: Tue, 1 Oct 2024 12:35:21 +0100 Subject: [PATCH 1/3] Add emulateMediaFeatures method --- bin/browser.cjs | 4 ++++ src/Browsershot.php | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/bin/browser.cjs b/bin/browser.cjs index 9d5b26d..dfddcbd 100644 --- a/bin/browser.cjs +++ b/bin/browser.cjs @@ -250,6 +250,10 @@ const callChrome = async pup => { await page.emulateMediaType(request.options.emulateMedia); } + if (request.options && request.options.emulateMediaFeatures) { + await page.emulateMediaFeatures(JSON.parse(request.options.emulateMediaFeatures)); + } + if (request.options && request.options.viewport) { await page.setViewport(request.options.viewport); } diff --git a/src/Browsershot.php b/src/Browsershot.php index d50ee04..9ade1d3 100644 --- a/src/Browsershot.php +++ b/src/Browsershot.php @@ -524,6 +524,11 @@ public function emulateMedia(?string $media): static return $this->setOption('emulateMedia', $media); } + public function emulateMediaFeatures(array $features): static + { + return $this->setOption('emulateMediaFeatures', json_encode($features)); + } + public function newHeadless(): self { return $this->setOption('newHeadless', true); From dc12f78c568523106d0cb45ec68f3cd836b84d6f Mon Sep 17 00:00:00 2001 From: Alex Wass Date: Tue, 1 Oct 2024 12:36:18 +0100 Subject: [PATCH 2/3] Add test for media features --- tests/CommandTest.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/CommandTest.php b/tests/CommandTest.php index a186df9..752f89f 100644 --- a/tests/CommandTest.php +++ b/tests/CommandTest.php @@ -343,6 +343,29 @@ ], $command); }); +it('can set emulate media features', function () { + $command = Browsershot::url('https://example.com') + ->emulateMediaFeatures([ + ['name' => 'prefers-color-scheme', 'value' => 'dark'] + ]) + ->createScreenshotCommand('screenshot.png'); + + $this->assertEquals([ + 'url' => 'https://example.com', + 'action' => 'screenshot', + 'options' => [ + 'path' => 'screenshot.png', + 'viewport' => [ + 'width' => 800, + 'height' => 600, + ], + 'emulateMediaFeatures' => '[{"name":"prefers-color-scheme","value":"dark"}]', + 'args' => [], + 'type' => 'png', + ], + ], $command); +}); + it('can use pipe', function () { $command = Browsershot::url('https://example.com') ->usePipe() From fd2d6a4a81c75ed81596070a129685b5f8ada173 Mon Sep 17 00:00:00 2001 From: Alex Wass Date: Tue, 1 Oct 2024 12:36:43 +0100 Subject: [PATCH 3/3] Update documentation with example of media features --- .../setting-the-css-media-type-of-the-page.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/miscellaneous-options/setting-the-css-media-type-of-the-page.md b/docs/miscellaneous-options/setting-the-css-media-type-of-the-page.md index 00ba5c8..0dd4625 100644 --- a/docs/miscellaneous-options/setting-the-css-media-type-of-the-page.md +++ b/docs/miscellaneous-options/setting-the-css-media-type-of-the-page.md @@ -11,3 +11,12 @@ Browsershot::url('https://example.com') ->savePdf($pathToPdf); ``` +You can also emulate [media features](https://www.w3.org/TR/mediaqueries-5/), such as dark mode or reduced motion. + +```php +Browsershot::url('https://example.com') + ->emulateMediaFeatures([ + ['name' => 'prefers-color-scheme', 'value' => 'dark'] + ]) + ->save($pathToImage); +```