myintervals / emogrifier Goto Github PK
View Code? Open in Web Editor NEWConverts CSS styles into inline style attributes in your HTML code.
Home Page: https://www.myintervals.com/emogrifier.php
License: MIT License
Converts CSS styles into inline style attributes in your HTML code.
Home Page: https://www.myintervals.com/emogrifier.php
License: MIT License
Emogrifier is not intended to be subclassed, and this will allow us to autodetect unused methods.
preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
Location: emogrifier.php on line 315
Modern devices used in reading email like phones & tablets support @media queries.
There should be an option in emogrifier to leave @media queries in HTML style tag and just ignore them while making styles inline.
Some ideas from elsewhere:
https://github.com/tijsverkoyen/CssToInlineStyles/blob/master/CssToInlineStyles.php
I need use of this in another class that extends the Emogrifier. Please change this method to protected so that it can be accessed.
There were 2 failures:
#')
Failed asserting that '
some text
some text
some more text
' matches PCRE pattern "##".
/home/klee/eclipse/emogrifier/Tests/Unit/EmogrifierTest.php:370
#')
Failed asserting that '
some text
some text
some more text
' matches PCRE pattern "##".
/home/klee/eclipse/emogrifier/Tests/Unit/EmogrifierTest.php:370
FAILURES!
Tests: 57, Assertions: 57, Failures: 2.
This is for the following lines in selectorDataProvider:
'BODY:first-child matches first child'
=> array('body:first-child {' . $styleRule . '} ', '#<p class="p-1" style="' . $styleRule . '">#'),
'BODY:first-child not matches middle child' => array('body:first-child {' . $styleRule . '} ', '#<p class="p-2">#'),
'BODY:first-child not matches last child' => array('body:first-child {' . $styleRule . '} ', '#<p class="p-3">#'),
'BODY:last-child not matches first child' => array('body:last-child {' . $styleRule . '} ', '#<p class="p-1">#'),
'BODY:last-child not matches middle child' => array('body:last-child {' . $styleRule . '} ', '#<p class="p-2">#'),
'BODY:last-child matches last child' => array('body:last-child {' . $styleRule . '} ', '#<p class="p-3" style="' . $styleRule . '">#'),
Hi
I'm writing a package that requires the emogrifier as a dependency of the package, I get an error when trying to install my package, saying that there is no matching package for the emogrifier require.
However if installing as a require in the root composer.json the package installs fine.
Any ideas?
oli
Any plans on supporting IDs?
There might be some templates that actually use that
css: div#container { margin: 1em auto; }
html: <div id="container">
They can - just as classes - also be stripped then afterwards.
It looks like this lib has the same issues as InlineCss, it cannot work with some UTF8 chars:
<div id="container">
<h1>チェック</h1>
<p>降です。アーリーチェックインはリクエ</p>
<p class="small">チェック'foo'</p>
</div>
Gets scrambled into
<div id="container">
<h1 style="font-weight: bold; font-size: 2em;">チェック</h1>
<p style="margin-bottom: 1em; font-family: sans-serif; text-align: justify;">降です。アーリーチェックインはリクエ</p>
<p class="small" style="margin-bottom:1em;font-family:sans-serif;text-align:justify;font-size:70%;">チェック'foo'</p>
</div>
For the other lib I got i partially working again using htmlentitiesdecode.
/**
* @test
*/
public function emogrifyAppliesCssFromStyleNodes() {
$styleAttributeValue = 'color:#ccc;';
$html = self::HTML5_DOCUMENT_TYPE . self::LF .
'<html><style type="text/css">html {' . $styleAttributeValue . '}</style></html>';
$this->subject->setHtml($html);
$this->assertContains(
'<html style="' . $styleAttributeValue . '">',
$this->subject->emogrify()
);
}
PHPUnit 3.7.29 by Sebastian Bergmann.
.........................................................E
Time: 59 ms, Memory: 3.00Mb
There was 1 error:
1) Pelago\Tests\Unit\EmogrifierTest::emogrifyAppliesCssFromStyleNodes
DOMXPath::query(): Invalid expression
I had to use "pelago/emogrifier": "@dev"
in my composer.json
. Otherwise I got
Your requirements could not be resolved to an installable set of packages.
Problem 1
- The requested package pelago/emogrifier could not be found in any version, there may be a typo in the package name.
Potential causes:
- A typo in the package name
- The package is not available in a stable-enough version according to your minimum-stability setting
see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.
Read <http://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.
Creating this ticket per request to not leave comments in the code:
if (!preg_match('/ *([A-Za-z-]+) *: *([^;]+) */', $declaration, $matches)) {
continue;
}
// can we remove this regex entirely and replace with an explode on :, and conditional on resulting array being 2 strings?
It seems like this regex is only verifying that we have a single css declaration, and then using the regex match for the propertyName and propertyValue. I added the note because in the back of my head I thought an explode on the colon, and then verifying the resultant array has exactly 2 elements, and then using the 1st as propertyName and second as propertyValue would be quicker than a regex.
string[] instead of array etc.
We should have a field $cacheKeys.
Hi,
We have a problem in Outlook 2007 and 2010 with empty (the make a big line height with empty space), we can reproduce this issue here http://www.pelagodesign.com/sidecar/emogrifier/
with this css:
.zusatzleistung_desc_tr{
display: none;
visibility: hidden;
}
and this html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<table class="angebotdetails">
<tr class="zusatzleistung_desc_tr">
<td class="zusatzleistung_desc">Cane</td>
<td class="zusatzleistung_amount">5,00 Euro</td>
</tr>
</table>
</body>
</html>
gives after emogrify:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<table><tr></tr></table>
</body>
</html>
it should be:
<table>
<tr style=" display: none;visibility: hidden;">
<td class="zusatzleistung_desc">Cane</td>
<td class="zusatzleistung_amount">5,00 Euro</td>
</tr>
</table>
or remove the tr as well.
thank you!
lenny
We should do this once TravisCI provides PHP 5.6.
The following order should make the class more logical to read:
=== instead of ==
!== instead of !=
in_array with the third parameter set to true
everzet/capifony#358
https://coderwall.com/p/kz4egw
I use merge tags in my email bulletins to customize their content, for example to show the name of the recipient, I use the string
If I place the merge tag wrapped in a span or div, there is no inconvenience, but if the merge tag is inside an attribute, let's say an href, emogrifier turns the '$' symbol to '%24' and '[' to '%5B' respectively.
If my original html is <a href="$[LINK:EVENT]$">LINK</a>
emogrifier turns it into <a href="%24%5BLINK:EVENT%5D%24">LINK</a>
Any advice to avoid this behavior?
Because the only available version of this package is 1.0-alpha1
, the only way one can install this package with Composer as part of another component is by reducing the strength of minimum-stability
.
Could you please release a 0.1
version of the current state of the component, so that other libraries which depend on this component do not require the root project to reduce minimum-stability
, without having to wait for 1.0
?
We should do this once PHP 5.3 has reached its end of life, i.e., probably some time around June 2014.
What do I need to do to make sure my content is correctly encoded for emogrification?
It would be cool if you can add a composer.json to this repo so that we can install it using packagist and use composer's autoloader 😄
It looks like the unset is not needed for helping the garbage collector anymore.
Would it be possible to use github's release feature and semantic versioning? It would make dependencies much easier/safer in composer.
Unit test:
emogrifyLowercasesAttributeNamesFromStyleAttributes
verifies that inline css in uppercase is translated to lowercase.
Unit test:
emogrifyKeepsAttributeNamesFromCssInOriginalCasing
seems to verify that passed in css does not become lowercase.
I have separately verified that uppercase css in a <style> maintains its uppercase without translation. Is this by design or would you like a pull request to ensure all css is lowercase?
Email tracking tools like https://litmus.com are using follow technique for tracking email prints:
<style>
@media print {
#track {
background-image: url('http://www.letmeknow.com/print.jpg');
}
}
</style>
<div id="track"></div>
Current version from #62 PR strip this media query.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.