Comments (4)
Just need to be 100% on the same page here. You expect the CSS block to remain, and only ignore the <!--
and -->
- but PreMailer is stripping out the style block as well as the comment tokens?
from premailer.net.
Yes, that's what I expect based on how browsers handle a static test page implemented as just the above. I would then expect the style block to be removed once the css was moved inline.
I would expect the final result to be something like the following if class stripping was also turned on.
<html>
<head>
</head>
<body>
<div>
<p style="font-weight:bold;">Hello World!</p>
</div>
</body>
</html>
I'm not sure on the current PreMailer behaviour in all modes, I first encountered this when I was running with the removeComments parameter set to true but even with that disabled I still did not get the inline styles.
from premailer.net.
To be clear, both the following unit tests should pass since the output should be the same in both cases. Currently the first test passes and the second fails, but the only change is a change which the HTML parser (technically the CSS parser) should ignore, since inside style isn't a comment, (/* */ is css syntax).
using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace PreMailerTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
const string html = @"
<html>
<head>
<style>
p.custom {
font-weight: bold;
}
<!---->
</style>
</head>
<body>
<div>
<p class=""custom"">Hello World!</p>
</div>
</body>
</html >
";
var result = PreMailer.Net.PreMailer.MoveCssInline(html, true, null, null, true, false);
CollectionAssert.AreEqual(result.Warnings,new List<string>());
Assert.AreEqual("<html><head>\n\t\t \n\t </head>\n\t <body>\n\t\t <div>\n\t\t\t <p style=\"font-weight: bold\">Hello World!</p>\n\t\t </div>\n\t \n \n </body></html>",result.Html);
}
[TestMethod]
public void TestMethod2()
{
const string html = @"
<html>
<head>
<style>
<!--
p.custom {
font-weight: bold;
}
-->
</style>
</head>
<body>
<div>
<p class=""custom"">Hello World!</p>
</div>
</body>
</html >
";
var result = PreMailer.Net.PreMailer.MoveCssInline(html, true, null, null, true, false);
CollectionAssert.AreEqual(result.Warnings, new List<string>());
Assert.AreEqual("<html><head>\n\t\t \n\t </head>\n\t <body>\n\t\t <div>\n\t\t\t <p style=\"font-weight: bold\">Hello World!</p>\n\t\t </div>\n\t \n \n </body></html>", result.Html);
}
}
}
from premailer.net.
More succinct test that I've added to my private copy of the solution:
[TestMethod]
public void MoveCssInLine_StripHTMLComments()
{
const string html = @"<html><head><style><!--p.custom {font-weight: bold;}--></style></head><body><div><p class=""custom"">Hello World!</p></div></body></html>";
var result = PreMailer.MoveCssInline(html, true, null, null, true, false);
Assert.AreEqual(@"<html><head></head><body><div><p style=""font-weight: bold"">Hello World!</p></div></body></html>", result.Html);
}
I got this to pass for my own use by adding the following code to PreMailer.Net.CssParser.CleanUp
but this is a hack and I look forward to seeing a better solution. (For instance it should probably process all match groups rather than assuming a single match (although this is already after having been tokenised by '}'), etc.)
All the other unit tests pass with this code in place.
private static Regex HTMLCommentRegex = new Regex(@"<!--(.*)-->");
private string CleanUp(string s)
{
/* ... */
var commentedBlock = HTMLCommentRegex.Match(temp);
if (commentedBlock.Success)
{
temp = commentedBlock.Groups[1].Captures[0].Value;
}
from premailer.net.
Related Issues (20)
- Breaking changes in dependencies / .NET Standard 2.0 support
- MoveCssInline returns self-closing title when empty HOT 5
- MoveCssInline encodes non-ASCII characters even when they should be valid HTML
- Regex in CssParser never ends and uses 100% cpu. HOT 1
- url embedded resources HOT 2
- Request to change colors defined with hsl/hsla to rgb/rgba HOT 1
- Anchor tags should be appended after analytics tags
- Performance issue when process email containing useless big Style tag to small body content HOT 1
- MoveCssInline is HTML encoding CSS HOT 2
- Inliner strips out vml from html tag HOT 1
- Configure continuous benchmark
- Add more example HTML emails to benchmark
- Automate contributors list in README
- Resolve css var's with their actual values?
- Ability to specify which classes should not be removed, like "preheader"
- How to keep html entities (such as ©) from being converted to special characters? HOT 3
- Are you looking for maintainers? HOT 23
- RobiniaDocs API Explorer
- Bug in comment regex, fix in issue description HOT 1
- Two same CSS properties on same dom element does not work HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from premailer.net.