/// <summary>The optimize media query.</summary> /// <param name="mediaNode">The media node.</param> /// <param name="ruleSetMediaPageDictionary">The rule set media page dictionary.</param> private void OptimizeMediaQuery(MediaNode mediaNode, OrderedDictionary ruleSetMediaPageDictionary) { var mediaNodeHashKey = mediaNode.PrintSelector(); var pageNodes = mediaNode.PageNodes.ToList(); var rulesetNodes = mediaNode.Rulesets.ToList(); if (ruleSetMediaPageDictionary.Contains(mediaNodeHashKey)) { var previousNode = ruleSetMediaPageDictionary[mediaNodeHashKey] as MediaNode; if (previousNode != null) { pageNodes = previousNode.PageNodes.Concat(pageNodes).ToList(); rulesetNodes = previousNode.Rulesets.Concat(rulesetNodes).ToList(); } ruleSetMediaPageDictionary.Remove(mediaNodeHashKey); } ruleSetMediaPageDictionary.Add( mediaNodeHashKey, new MediaNode( mediaNode.MediaQueries, this.GetMergedNodeDictionary(rulesetNodes).Values.Cast <RulesetNode>().ToList().AsSafeReadOnly(), pageNodes.ToSafeReadOnlyCollection())); }
/// <summary>The <see cref="MediaNode"/> visit implementation</summary> /// <param name="mediaNode">The media AST node</param> /// <returns>The modified AST node if modified otherwise the original node</returns> public override AstNode VisitMediaNode(MediaNode mediaNode) { if (mediaNode == null) { throw new ArgumentNullException("mediaNode"); } var updatedRulesetNodes = new List <RulesetNode>(); var updatePageNodes = new List <PageNode>(); mediaNode.Rulesets.ForEach(rulesetNode => { var updatedRulesetNode = (RulesetNode)rulesetNode.Accept(this); if (updatedRulesetNode != null) { updatedRulesetNodes.Add(updatedRulesetNode); } }); mediaNode.PageNodes.ForEach(page => { var updatedPageNode = (PageNode)page.Accept(this); if (updatedPageNode != null) { updatePageNodes.Add(updatedPageNode); } } ); return(new MediaNode(mediaNode.MediaQueries, updatedRulesetNodes.AsReadOnly(), updatePageNodes.AsReadOnly())); }
/// <summary>The <see cref="MediaNode"/> visit implementation</summary> /// <param name="mediaNode">The media AST node</param> /// <returns>The modified AST node if modified otherwise the original node</returns> public override AstNode VisitMediaNode(MediaNode mediaNode) { return(new MediaNode( mediaNode.MediaQueries.Select(ruleset => (MediaQueryNode)ruleset.Accept(this)).ToSafeReadOnlyCollection(), mediaNode.Rulesets.Select(ruleset => (RulesetNode)ruleset.Accept(this)).ToSafeReadOnlyCollection(), mediaNode.PageNodes.Select(pages => (PageNode)pages.Accept(this)).ToSafeReadOnlyCollection())); }
/// <summary>The <see cref="MediaNode"/> visit implementation</summary> /// <param name="mediaNode">The media AST node</param> /// <returns>The modified AST node if modified otherwise the original node</returns> public override AstNode VisitMediaNode(MediaNode mediaNode) { var updatedRulesets = new List <RulesetNode>(); var updatedPageNodes = new List <PageNode>(); mediaNode.Rulesets.ForEach(rulesetNode => updatedRulesets.Add((RulesetNode)rulesetNode.Accept(this))); mediaNode.PageNodes.ForEach(pageNode => updatedPageNodes.Add((PageNode)pageNode.Accept(this))); return(new MediaNode(mediaNode.MediaQueries, updatedRulesets.AsReadOnly(), updatedPageNodes.AsReadOnly())); }
public static TreeNode GetAllTypeNode() { TypeB16Node nodeType = new TypeB16Node(); nodeType.Text = nodeType.KNXMainNumber + "." + nodeType.KNXSubNumber + " " + nodeType.Name; nodeType.Nodes.Add(StatusDHWCNode.GetTypeNode()); nodeType.Nodes.Add(StatusRHCCNode.GetTypeNode()); nodeType.Nodes.Add(MediaNode.GetTypeNode()); nodeType.Nodes.Add(ChannelActivation16Node.GetTypeNode()); return(nodeType); }
/// <summary>The <see cref="MediaNode"/> visit implementation</summary> /// <param name="mediaNode">The media AST node</param> /// <returns>The modified AST node if modified otherwise the original node</returns> public override AstNode VisitMediaNode(MediaNode mediaNode) { // media // : MEDIA_SYM S* media_list LBRACE S* ruleset* CloseCurlyBracket S* // ; // append for: MEDIA_SYM S* _printerFormatter.Append(CssConstants.Media); mediaNode.MediaQueries.ForEach((mediaQuery, last) => { mediaQuery.Accept(this); if (!last) { _printerFormatter.Append(CssConstants.Comma); } }); // append for: LBRACE S* ruleset* CloseCurlyBracket S* _printerFormatter.AppendLine(); _printerFormatter.AppendLine(CssConstants.OpenCurlyBracket); _printerFormatter.IncrementIndentLevel(); foreach (var ruleset in mediaNode.Rulesets) { ruleset.Accept(this); } // add and indent any nested Page nodes. foreach (var page in mediaNode.PageNodes) { _printerFormatter.WriteIndent(); page.Accept(this); } _printerFormatter.DecrementIndentLevel(); _printerFormatter.AppendLine(CssConstants.CloseCurlyBracket); return(mediaNode); }
/// <summary>The <see cref="MediaNode"/> visit implementation</summary> /// <param name="mediaNode">The media AST node</param> /// <returns>The modified AST node if modified otherwise the original node</returns> public override AstNode VisitMediaNode(MediaNode mediaNode) { if (mediaNode == null) { throw new ArgumentNullException("mediaNode"); } // Note - "@media" string cannot be verified here as it is analyzed during the parsing. // The print visitors convert it to lower case "@media" after printing. try { // Validate the mediums for lower case mediaNode.MediaQueries.ForEach(mediaQuery => ValidateForLowerCase(mediaQuery.MinifyPrint())); // Visit rulesets mediaNode.Rulesets.ForEach(rulesetNode => rulesetNode.Accept(this)); } catch (BuildWorkflowException exception) { throw new WorkflowException(string.Format(CultureInfo.CurrentUICulture, CssStrings.CssLowercaseValidationParentNodeError, mediaNode.PrettyPrint()), exception); } return(mediaNode); }
/// <summary>The <see cref="MediaNode"/> visit implementation</summary> /// <param name="mediaNode">The media AST node</param> /// <returns>The modified AST node if modified otherwise the original node</returns> public override AstNode VisitMediaNode(MediaNode mediaNode) { mediaNode.Rulesets.ForEach(rulesetNode => rulesetNode.Accept(this)); mediaNode.PageNodes.ForEach(pageNode => pageNode.Accept(this)); return(mediaNode); }
public override void VisitMedia(MediaNode node) { VisitMediaBase(node, false); }
/// <summary>The <see cref="MediaNode"/> visit implementation</summary> /// <param name="mediaNode">The media AST node</param> /// <returns>The modified AST node if modified otherwise the original node</returns> public virtual AstNode VisitMediaNode(MediaNode mediaNode) { return(mediaNode); }
private static void EnsureDeclarationNode(DeclarationNode declarationNode, RulesetNode ruleSetNode, MediaNode mediaQueryNode, StyleSheetNode actualCss) { var rules = actualCss.StyleSheetRules.ToArray(); var expectedMediaQuery = string.Empty; if (mediaQueryNode != null) { expectedMediaQuery = mediaQueryNode.PrintSelector(); rules = rules.OfType <MediaNode>().Where(r => r.PrintSelector().Equals(expectedMediaQuery)).SelectMany(mq => mq.Rulesets).ToArray(); } var expectedRule = ruleSetNode.PrintSelector(); var declarations = rules .OfType <RulesetNode>() .Where(rsn => rsn.PrintSelector().Equals(expectedRule)) .SelectMany(r => r.Declarations).ToArray(); var expectedproperty = declarationNode.Property; var declarationValues = declarations.Where(d => d.Property.Equals(expectedproperty)).ToArray(); var expectedValue = declarationNode.ExprNode.TermNode.MinifyPrint(); if (!declarationValues.Any(d => d.ExprNode.TermNode.MinifyPrint().Equals(expectedValue))) { Assert.Fail("Could not find [{0}] --> [{1}] --> {2}: {3}; ".InvariantFormat(expectedMediaQuery, expectedRule, expectedproperty, expectedValue)); } }
private static void EnsureExpectedCssResult(IEnumerable <StyleSheetRuleNode> styleSheetRuleNodes, StyleSheetNode actualCss, MediaNode mediaQueryNode = null) { foreach (var styleSheetRuleNode in styleSheetRuleNodes) { if (styleSheetRuleNode is MediaNode) { var mediaNode = styleSheetRuleNode as MediaNode; EnsureExpectedCssResult(mediaNode.Rulesets, actualCss, mediaNode); } else if (styleSheetRuleNode is RulesetNode) { var ruleSetNode = styleSheetRuleNode as RulesetNode; foreach (var declarationNode in ruleSetNode.Declarations) { EnsureDeclarationNode(declarationNode, ruleSetNode, mediaQueryNode, actualCss); } } } }
public abstract void VisitMedia(MediaNode node);
/// <summary> /// Prints the @media selector for the media node. /// </summary> /// <param name="node">The media node</param> /// <returns>The @media .... string.</returns> public static string PrintSelector(this MediaNode node) { return(CssConstants.Media + string.Join(",", node.MediaQueries.Select(mq => mq.MinifyPrint()))); }