protected virtual bool ParseMediaQuery(ItemFactory itemFactory, ITextProvider text, TokenStream tokens) { MediaQuery mq = itemFactory.CreateSpecific <MediaQuery>(this); if (mq.Parse(itemFactory, text, tokens)) { MediaQueries.Add(mq); Children.Add(mq); return(true); } return(false); }
public static void AddMediaQuery(string className, CssParsedUnit cssParsedUnit) { string mediaQuery = $"{{ width:{cssParsedUnit} !important; max-width: {cssParsedUnit}; }}"; if (MediaQueries.ContainsKey(className)) { var mediaQueryCurrent = MediaQueries[className]; if (mediaQueryCurrent.Equals(mediaQuery, StringComparison.InvariantCultureIgnoreCase)) { return; } } MediaQueries.Add(className, mediaQuery); }
// https://github.com/mjmlio/mjml/blob/d4c6ea0744e05c928044108c3117c16a9c4110fe/packages/mjml-core/src/helpers/mediaQueries.js private static string BuildMediaQueriesTags(bool forceOWADesktop = false) { if (!MediaQueries.Any()) { return(string.Empty); } StringBuilder sb = new StringBuilder(); sb.Append($@" <style type=""text/css""> @media only screen and (min-width:{Breakpoint}) {{ "); foreach (var mediaQuery in MediaQueries) { sb.AppendLine($@".{mediaQuery.Key} {mediaQuery.Value}"); } sb.Append($@" }} </style> "); if (forceOWADesktop) { sb.AppendLine($@"<style type=""text/css"">"); foreach (var mediaQuery in MediaQueries) { sb.AppendLine($@"[owa] .{mediaQuery.Key} {mediaQuery.Value}"); } sb.AppendLine($@"</style>"); } return(sb.ToString()); }