Skip to content

Commit 9de3b46

Browse files
committed
MAGETWO-64085: [GitHub] Static versioning and styles minification break email fonts styles #8241
1 parent eed81bf commit 9de3b46

File tree

3 files changed

+92
-13
lines changed

3 files changed

+92
-13
lines changed

app/code/Magento/Email/Model/Template/Filter.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,9 @@ class Filter extends \Magento\Framework\Filter\Template
149149
protected $urlModel;
150150

151151
/**
152-
* @var \Pelago\Emogrifier
152+
* @var \Magento\Framework\Css\PreProcessor\Adapter\CssInliner
153153
*/
154-
protected $emogrifier;
154+
protected $cssInliner;
155155

156156
/**
157157
* @var \Magento\Email\Model\Source\Variables
@@ -180,7 +180,7 @@ class Filter extends \Magento\Framework\Filter\Template
180180
* @param \Magento\Framework\View\LayoutFactory $layoutFactory
181181
* @param \Magento\Framework\App\State $appState
182182
* @param \Magento\Framework\UrlInterface $urlModel
183-
* @param \Pelago\Emogrifier $emogrifier
183+
* @param \Magento\Framework\Css\PreProcessor\Adapter\CssInliner $cssInliner
184184
* @param \Magento\Email\Model\Source\Variables $configVariables
185185
* @param array $variables
186186
*
@@ -198,7 +198,7 @@ public function __construct(
198198
\Magento\Framework\View\LayoutFactory $layoutFactory,
199199
\Magento\Framework\App\State $appState,
200200
\Magento\Framework\UrlInterface $urlModel,
201-
\Pelago\Emogrifier $emogrifier,
201+
\Magento\Framework\Css\PreProcessor\Adapter\CssInliner $cssInliner,
202202
\Magento\Email\Model\Source\Variables $configVariables,
203203
$variables = []
204204
) {
@@ -213,7 +213,7 @@ public function __construct(
213213
$this->_layoutFactory = $layoutFactory;
214214
$this->_appState = $appState;
215215
$this->urlModel = $urlModel;
216-
$this->emogrifier = $emogrifier;
216+
$this->cssInliner = $cssInliner;
217217
$this->configVariables = $configVariables;
218218
parent::__construct($string, $variables);
219219
}
@@ -975,14 +975,14 @@ public function applyInlineCss($html)
975975
);
976976
}
977977

978-
$emogrifier = $this->emogrifier;
979-
$emogrifier->setHtml($html);
980-
$emogrifier->setCss($cssToInline);
978+
$this->cssInliner->setHtml($html);
979+
980+
$this->cssInliner->setCss($cssToInline);
981981

982982
// Don't parse inline <style> tags, since existing tag is intentionally for non-inline styles
983-
$emogrifier->disableStyleBlocksParsing();
983+
$this->cssInliner->disableStyleBlocksParsing();
984984

985-
$processedHtml = $emogrifier->emogrify();
985+
$processedHtml = $this->cssInliner->process();
986986
} catch (\Exception $e) {
987987
if ($this->_appState->getMode() == \Magento\Framework\App\State::MODE_DEVELOPER) {
988988
$processedHtml = __('CSS inlining error:') . PHP_EOL . $e->getMessage()

app/code/Magento/Widget/Model/Template/Filter.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class Filter extends \Magento\Cms\Model\Template\Filter
3333
* @param \Magento\Framework\View\LayoutFactory $layoutFactory
3434
* @param \Magento\Framework\App\State $appState
3535
* @param \Magento\Framework\UrlInterface $urlModel
36-
* @param \Pelago\Emogrifier $emogrifier
36+
* @param \Magento\Framework\Css\PreProcessor\Adapter\CssInliner $cssInliner
3737
* @param \Magento\Email\Model\Source\Variables $configVariables
3838
* @param \Magento\Widget\Model\ResourceModel\Widget $widgetResource
3939
* @param \Magento\Widget\Model\Widget $widget
@@ -51,7 +51,7 @@ public function __construct(
5151
\Magento\Framework\View\LayoutFactory $layoutFactory,
5252
\Magento\Framework\App\State $appState,
5353
\Magento\Framework\UrlInterface $urlModel,
54-
\Pelago\Emogrifier $emogrifier,
54+
\Magento\Framework\Css\PreProcessor\Adapter\CssInliner $cssInliner,
5555
\Magento\Email\Model\Source\Variables $configVariables,
5656
\Magento\Widget\Model\ResourceModel\Widget $widgetResource,
5757
\Magento\Widget\Model\Widget $widget
@@ -70,7 +70,7 @@ public function __construct(
7070
$layoutFactory,
7171
$appState,
7272
$urlModel,
73-
$emogrifier,
73+
$cssInliner,
7474
$configVariables
7575
);
7676
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Css\PreProcessor\Adapter;
7+
use Pelago\Emogrifier;
8+
9+
class CssInliner
10+
{
11+
/**
12+
* @var Emogrifier
13+
*/
14+
private $emogrifier;
15+
16+
/**
17+
* @param Emogrifier $emogrifier
18+
*/
19+
public function __construct(Emogrifier $emogrifier)
20+
{
21+
$this->emogrifier = $emogrifier;
22+
}
23+
24+
/**
25+
* Sets the HTML to emogrify.
26+
*
27+
* @param string $html the HTML to emogrify, must be UTF-8-encoded
28+
*
29+
* @return void
30+
*/
31+
public function setHtml($html)
32+
{
33+
$this->emogrifier->setHtml($html);
34+
}
35+
36+
/**
37+
* Sets the CSS to merge with the HTML.
38+
*
39+
* @param string $css the CSS to merge, must be UTF-8-encoded
40+
*
41+
* @return void
42+
*/
43+
public function setCss($css)
44+
{
45+
/**
46+
* Adds space to CSS string before passing to Emogrifier to fix known parsing issue with library.
47+
* https://github.com/jjriv/emogrifier/issues/370
48+
*/
49+
$cssWithAddedSpaces = preg_replace('#([\{\}>])#i', ' $1 ', $css);
50+
51+
$this->emogrifier->setCss($cssWithAddedSpaces);
52+
}
53+
54+
/**
55+
* Disables the parsing of <style> blocks.
56+
*
57+
* @return void
58+
*/
59+
public function disableStyleBlocksParsing()
60+
{
61+
$this->emogrifier->disableStyleBlocksParsing();
62+
}
63+
64+
/**
65+
* Applies $this->css to $this->html and returns the HTML with the CSS
66+
* applied.
67+
*
68+
* This method places the CSS inline.
69+
*
70+
* @return string
71+
*
72+
* @throws \BadMethodCallException
73+
*/
74+
public function process()
75+
{
76+
return $this->emogrifier->emogrify();
77+
}
78+
79+
}

0 commit comments

Comments
 (0)